小北爱编程 发表于 2022-4-27 15:13

FreeRTOS移植步骤

本帖最后由 小北爱编程 于 2022-4-27 15:33 编辑

#申请原创#
FreeRTOS移植步骤1、源码获取    去官网下载FreeRTOS最新的版本,官网地址:www.freertos.org2、准备基础工程    准备一个基础工程,用于FreeRTOS移植。3、向工程中添加相应文件文件    在基础工程中新建一个名为 FreeRTOS 的文件夹, 如图 1 所示: 图 1 新建 FreeRTOS 文件夹    将FreeRTOSv10.3.1\FreeRTOS\Source中的文件添加到该文件夹中,如图2所示: 图 2 添加 FreeRTOS 源码    我们只需要留下portable 文件夹下的keil、 MemMang 和 RVDS这三个文件夹, 其他的都可以删除掉(此处针对的为KEIL移植)。4、向工程分组中添加相应的文件    打开基础工程,新建分组 FreeRTOS_CORE 和 FreeRTOS_PORTABLE,然后向这两个分组中添加文件,如图 3 所示: 图 3 添加文件    分组 FreeRTOS_CORE 中的文件在新建的FreeRTOS文件下就能看到,添加过程不再细说。    FreeRTOS_PORTABLE 分组中的 port.c 和 heap_4.c的来源则是本操作系统系统的移植关键。port.c 是RVDS 文件夹下的文件,根据所移植的CPU的内核选择相对应的port.c文件,RVDS文件夹内容如图4所示: 图4 RVDS文件夹内容    可以看到不同的内核对应不同的文件,选择自己所需要的内核进行添加port.c文件。    heap_4.c 是 MemMang 文件夹中的,前面说了 MemMang 是跟内存管理相关的,里面有 5 个 c 文件: heap_1.c、 heap_2.c、 heap_3.c、 heap_4.c 和 heap_5.c。 这5 个 c 文件是五种不同的内存管理方法,此处选择heap_4.c文件。5、添加相应的头文件路径    添加完 FreeRTOS 源码中的 C 文件以后还要添加 FreeRTOS 源码的头文件路径,具体过程此处不再细说。6、添加FreeRTOSConfig.h文件   此时编译工程会显示FreeRTOSConfig.h找不到,需要自己手动添加该文件,此文件可以在FreeRTOS文件源码中的Demo中寻找,查看其官网的移植例程,在里面获取FreeRTOSConfig.h文件,将其复制到自己的工程中,具体存放路径看自己个人习惯。7、设置系统节拍    将 at32f403a_407_int.c 中的 PendSV_Handler()、SVC_Handler()和 Systick_Handler()这三个函数屏蔽掉。   将FreeRTOSConfig.h中的#define xPortSysTickHandler         SysTickHandler宏定义屏蔽掉,如图5所示: 图5     系统节拍定时器我在此处使用的为定时器2,重写定时器2中断函数,代码如下:void TMR2_GLOBAL_IRQHandler(void){    if(tmr_flag_get(TMR2, TMR_OVF_FLAG) != RESET)    {      if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)//系统已经运行      {            xPortSysTickHandler();      }      tmr_flag_clear(TMR2, TMR_OVF_FLAG);    }}    此时系统节拍中断函数已设置完成,此时还需要进行定时器的初始化,初始化节拍时间则根据FreeRTOSConfig.h文件中的宏定义获得,#define configTICK_RATE_HZ      (1000) //时钟节拍频率,这里设置为1000,周期就是1ms。将定时器2中断周期初始化为1ms,此时操作系统的移植基本完成,编译根据错误信息进行对应的修改,直至无错误则移植完成。8、可能的编译错误如下:    可能会显示一些以Hook 结尾的函数未定义,这些函数有个共同的名称: 钩子函数,这是因为在 FreeRTOSConfig.h中开启了这些钩子函数,但是却没有定义这些钩子函数而导致的,我们在 FreeRTOSConfig.h 中关闭这些钩子函数就行了,关闭的方法很简单, 将相应的宏定义改为 0 即 可 , 这 里 将 宏 configUSE_IDLE_HOOK 、 configUSE_TICK_HOOK 、configUSE_MALLOC_FAILED_HOOK 和configCHECK_FOR_STACK_OVERFLOW 定义为 0。9、FreeRTOSConfig.h文件对FreeRTOS的配置    系统各配置项信息请查看FreeRTOSConfig.h文件。

wsnsyy 发表于 2022-4-29 15:06

堆的大小和FPU也要注意。
页: [1]
查看完整版本: FreeRTOS移植步骤