移植FreeRTOS:
1.移植FreeRTOS内核源码——FreeRTOS-Kernel;
2.子系统框架的程序设计;
资源获取:
1.官方网址:www.freertos.org
2.源码获取:第一个版本是最新版本,第二个版本是最稳定的版本
3.参考手册:《The FreeRTOS Reference Manual》
移植步骤:
1.将“FreeRTOS-LTS\FreeRTOS\FreeRTOS-Kernel”拷贝到新建的工程目录文件夹中的 4_MiddleWare文件夹下;
2.新建FreeRTOSConfig.h,并根据官方参考和实际需求添加修改;
3.宏定义与弱化内核中断服务函数;
4.按需添加FreeRTOS的内核源码;
5.验证:创建任务并开启调度器;
编写头文件:
以下是官方推荐头文件编写
由于STM32F107C8T6支持的最大时钟为72mHZ,滴答时钟应该默认是和CPU的时钟一样如c8t6默认上电是8mHZ,tick rate应改为1000因此需要将红框中的参数修改为
接下来关于内存分配:
第一行第二行表示既支持静态分配内存也支持动态分配内存,可根据自己需求修改;
第三行设置的是总的堆大小,默认为10k即1024x10
第四行是使能一个在应用程序中分配堆空间
分配协同程序的依赖、软件定时器的依赖和内核中断的配置:
- 如果使用到软件定时器则将#define configUSE_TIMERS 1;使用不到则#define configUSE_TIMERS 0
- 第一行内核的中断优先级习惯性定位为最低优先级,Cortex-M3最低的中断优先级是255因此一般将[denpend of processor]改为255;第二行为最大的系统调用中断优先级,其是根据应用程序来选择的,不能低于内核中断优先级;第三行与第二行设置为一样即可。
宏定义:
由于我们是将FreeRTOS移植到Cortex-m3内核,则关于Cortex-m3内核中断在FreeRTOS内核中是会被重新实现的,所以我们要在Cortex-m3处理器写一个基于FreeRTOS内核的应用程序的话,就必须将Cortex-m3内核的下图所示中的三个中断服务函数复写,或者说如果写了要在前面加一个_weak来修饰来保证FreeRTOS在调用它的三个handler时优先调用的是FreeRTOS内核实现的而不是自己写的那些handler(下图红字),即需要在it.c文件中给三个中断服务函数加前缀。