欢迎光临散文网 会员登陆 & 注册

FreeRTOS移植

2023-04-06 10:22 作者:Zz嘻嘻zZ  | 我要投稿

1. 准备

- FreeRTOS 源码

在 freeRTOS 官网即可下载到

https://www.freertos.org/zh-cn-cmn-s/a00104.html


- ARM GCC

在 ARM 官网下载适合自己linux系统的版本

https://launchpad.net/gcc-arm-embedded/+series


- make

2. 移植

将下载到的文件解压,可得到如下的文件结构

其中,我们只需要 FreeRTOS 文件夹


新建一个目录,将 FreeRTOS 移入该目录,删除FreeRTOS/Demo,创建MIAN函数和makefile文件


根据自己的编译器,选择 FreeRTOS/Source/portable 内的文件夹。本文使用的是GCC编译器,故将除了GCC、MemMang和Common以外的文件夹全删除。

再进入GCC文件夹,只保留自己处理器类型的文件夹,其余全部删除

进入 MemMang 文件夹,只保留自己需要的heap类型,其余文件可以删除,也可以都保留,在编译时指定一种也可

2.1 修改makefile

打开刚刚创建的makefile

将以上代码中的各个文件 path 修改为与自己的工程一致,尤其是 LINKER_SCRIPT 和 startup_CMSDK_CM3.s 和相关的 incude 文件夹。将 heap 文件添加在 FRTOS_FILES 

生成的 bin 文件即可以直接用来下载运行,verilog 形式的 hex 文件可以用来仿真 M3 核心时给 tb 使用。

2.2 FreeRTOSConfig.h

在解压的 FreeRTOS/Demo 下找一个合适的 demo 将该文件夹内的 FreeRTOSConfig.h 文件复制到工程下的 FreeRTOS/Source/include 文件夹内

打开 FreeRTOSConfig.h,删除第52行,即取消低功耗模式。


其余的配置根据实际需求进行修改即可

2.3 修改 default_handlers

default_handlers.c 内为中断处理函数

通过系统默认的中断处理函数来调用 freertos 的系统中断响应函数


- xPortSysTickHandler 为系统的 systick 中断处理,即系统的心跳

- vPortSVCHandler 为系统服务调用中断,该中断会在使用 svc 指令后触发,主要用于上下文切换的触发

- xPortPendSVHandler 为可挂起的SVC中断,该中断一般为优先级最低的中断,只有在处理完所有的中断后,才会处理该中断。系统通常使用该中断进行上下文切换。


移植中,只需要在相应的默认中断处理函数中调用 FreeRTOS 的中断处理函数即可,不需要额外的修改。

2.4 编写main

在main函数内创建一个简单的task,也可以通过定义函数 vPortSetupTimerInterrupt 覆写 对 systick 初始化的函数。

若需要使用 configTICK_RATE_HZ 宏配置的参数,那么就不要覆写 vPortSetupTimerInterrupt 函数,让 FreeRTOS 自行配置 systick 即可。

2.5 linkScripts

linkScripts 主要用于规定如何把输入文件内的section放入输出文件内, 并控制输出文件内各部分在程序地址空间内的布局。可以根据自己芯片的内存是如何分配的来修改

2.6 编译运行

在配置好的文件夹内运行 make 即可成功编译

将生成的 .hex 文件移动到 TB 文件夹内,运行m3仿真可以观察到每 5 个周期打印一次 “task”


FreeRTOS移植的评论 (共 条)

分享到微博请遵守国家法律