RT-Thread Nano移植到STM32心得(基于GCC、HAL库)
目录
- 环境说明
- RT-Thread Nano移植
- (一)基本框架移植
- (二)移植rt_kprintf
- (三)移植FinSH
- (四)移植总结
- (五)项目开源地址
环境说明
1、芯片:STM32H723ZGT6(Cortex-M7)
2、编译和开发环境:arm-none-eabi-gcc、cmake、ninja(可换为make或mingw32-make)、VsCode(可不需要)、windows系统
3、裸机代码生成:STM32CubeMX
4、烧录:STM32CubeProgrammer
RT-Thread Nano移植
(一)基本框架移植
参考官方IAR教程:https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/nano-port-iar/an0040-nano-port-iar
主要步骤:
1、复制rtthread nano源码的include、src、libmcu/arm/cortext-m7(选自己的目标芯片架构)、bsp/的board.c和rtconfig.h文件到自己的裸机工程下(可新建rtthread_nano目录)(记得在cmake中添加)
本项目使用的是gcc编译,所以启动脚本选 context_gcc.S
2、删除Core/Src/stm32h7xx_it.c的中断处理函数 HardFault_Handler()、PendSV_Handler()、SysTick_Handler()
3、修改board.c文件(参考官方教程)
4、(重点,使用gcc编译时需要此步骤,官方教程在刚开始的时候提到,后面具体步骤时没有提醒)将stm32启动脚本(startup_stm32h723xx.s)的入口函数main改为entry:

5、注释掉 rtconfig.h 的 【RT_USING_HEAP】和【RT_USING_SMALL_MEM】

6、注释掉 main() 函数的MPU_Config()函数
(二)移植rt_kprintf
cubemx中添加串口配置,在board.c的rt_hw_board_init()函数调用MX_USARTx_UART_Init()初始化
(三)移植FinSH
复制components文件夹到自己项目RTThread目录下,并通过cmakrlists添加源码
复制finsh_config.h到刚添加的目录 RTThread/components/finsh 下
(rtthread-nano源码中的bsp目录下是官方移植好的例子,可以从中复制一些配置好的文件到自己项目中使用,比如finsh_config.h)
修改board.c文件(参考官方教程:在 Nano 上添加 FinSH 组件(实现命令输入))
修改.ld链接脚本的 .text段为如下内容(主要是添加了一部分内容),这可以让INIT_BOARD_EXPORT等一些宏能够生效。
.text :{. = ALIGN(4);*(.text) /* .text sections (code) */*(.text*) /* .text* sections (code) */*(.glue_7) /* glue arm to thumb code */*(.glue_7t) /* glue thumb to arm code */*(.eh_frame)/* section information for finsh shell */. = ALIGN(4);__fsymtab_start = .;KEEP(*(FSymTab))__fsymtab_end = .;. = ALIGN(4);__vsymtab_start = .;KEEP(*(VSymTab))__vsymtab_end = .;/* section information for initial. */. = ALIGN(4);__rt_init_start = .;KEEP(*(SORT(.rti_fn*)))__rt_init_end = .;. = ALIGN(4);PROVIDE(__ctors_start__ = .);KEEP (*(SORT(.init_array.*)))KEEP (*(.init_array))PROVIDE(__ctors_end__ = .);KEEP (*(.init))KEEP (*(.fini)). = ALIGN(4);_etext = .; /* define a global symbols at end of code */} >FLASH
添加的部分内容为:
/* section information for finsh shell */. = ALIGN(4);__fsymtab_start = .;KEEP(*(FSymTab))__fsymtab_end = .;. = ALIGN(4);__vsymtab_start = .;KEEP(*(VSymTab))__vsymtab_end = .;/* section information for initial. */. = ALIGN(4);__rt_init_start = .;KEEP(*(SORT(.rti_fn*)))__rt_init_end = .;. = ALIGN(4);PROVIDE(__ctors_start__ = .);KEEP (*(SORT(.init_array.*)))KEEP (*(.init_array))PROVIDE(__ctors_end__ = .);
这部分内容是从官方rtthread标准版源码的bsp的例子中获取的
(四)移植总结
1、复制内核rtos到自己的工程
2、复制跟底层硬件相关的代码(如libcpu中的代码)
3、复制并修改移植文件,如board.c
4、内核配置(与裁剪),如rtconfig.h
5、修改启动文件(如修改stm32启动文件的入口函数)
6、修改ld链接脚本
(五)项目开源地址
点击前往
