Nucleo-F411RE (STM32F411)LL库体验 9 - RT-Thread nano的移植
1、RT-Thread下载
这一节基于rt-thread nano版本,进行内核的移植,不包含任何组件。移植成功后,可创建任务,串口输出RT-Thread版本信息。
2、RT-Thread移植(基于GCC)
首先找一个模版工程
我是用的这第二节课程RCC的那个源码,因为这个工程最简单,只初始化了一个led,系统时钟,以及滴答定时器。这样移植后出现问题,也好方便排查。
RT-Thread源码解压后,我们只需要将下面几个目录copy到我们的工程中。
componments目录这一节没有用到,后面会用。
src 内核源码
includ 头文件
libcpu 因为stm32F411是m4内核,所以我们只需要arm/cortex-m4那个文件夹即可。
在RCC目录下新建device/rt-thread目录,将上面四个文件夹进去。
如下:
修改Makefile,将rh-thread源码编译进去。
注意这里.S要改成.s
编译问题修改
我们从源码bsp下copy一个rtconfig.h放到RCC/User目录下。
CFLAG += -Wa,-mimplicit-it=thumb
屏蔽掉stm32f4xx_it.c中这两个回调函数。
关于systick定时器我放到了board.c里面,所以这里就不用写了。
这样应该就可以编译过了,如果有问题,请留言吧。
创建board.c文件
完善rt_hw_board_init函数。这个函数开机是这样调用的。
startup_stm32f411xe.s中 bl main我们需要改成bl entry。
entry的定义在component.c中
rt_hw_board_init函数我们初始化我们之前那些硬件就好,比如时钟,串口,systick,led等。
我这里就写了Board_Init();另外我在rtconfig.h中打开了RT_USING_HEAP这个宏,这是动态创建任务的宏定义,系统默认创建任务用的是静态创建方式。
所以要初始化heap。
初始化systick,一定要开启中断。在中断函数里调用rt-thread的节拍函数。
滴答定时器初始化。
使用rt_kprintf打印
要重写rt_hw_console_output函数,换成自己的串口发送函数。
这样开机就会有rt-thread version的log。
创建任务
另外
注意main函数要返回,不能跟freertos那样,写个while循环。开始我写成while死循环,任务一直创建不成功,查了好久才找到原因。
代码
代码下载