STM32F2X移植FREERTOS
第一次开始写技术总结博客,就简单的写些点;
1、要移植FREERTOS,首先要去下个,我是去直接下了个最新版的FREERTOS,下载地点如下:
https://www.freertos.org/a00104.html,直接下载,我下的时候最新版本是V10.0.1
,
下完包里有source源文件与demo工程 文件,如果有符合的型号,可以直接移植工程,也省了建立工程;当然就算型号不同也可以直接移植,我这里是自己建立,走一遍,加深印象;
需要的文件:
当然我这里把所有的.C都包含进来了。
2、接下来修改启动代码
由于SVC_Handle,PendSV_Handle和SysTick_Handle在portasm.s中被重定义,所以需要在启动代码中修改这些中断向量的名称,并声明这些中断向量为外部函数。这也是初次使用FreeRTOS容易范的错误。
PendSV_Handler、SysTick_Handler、SVC_Handler这3个函数在startup_stm32f2xx.s启动文件中,启动中需要 使用到这3个,而
xPortPendSVHandler、xPortSysTickHandler、vPortSVCHandler在portasm.s中,2者名称不一样,一般操作是在FREERTOSCONFIG.H里增加宏定义,如下 :
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler
#define vPortSVCHandler SVC_Handler
当然在stm32f2xx.c中需要注释掉原来PendSV_Handler,xPortSysTickHandler;
3、设置IAR配置
常规的我就不讲了,最主要的就是选择好型号,配置路径如下
常规不用设置汇编,但此处需要对汇编进行路径定义,要不然编译会出错
其它按常规的来就行了。
4、配置freertosconfig.h
对于用户来讲,Freertos已经提供了一个窗口给用户配置文件,即freertosconfig.h
对于里面各项定义,自己可以查询百度下,其中:
#define configCPU_CLOCK_HZ ( ( unsigned long ) SystemCoreClock )编译时需要声明,不然会出错;
freertosV10.0.1此版本很多宏定义已经没有放置在freertosconfig.h,当用户需要用到哪个模块时,需要自己将宏定义放进来,如要用到系统软定时器组,需要自己添加 :
/* set soft timers para. */
#define configUSE_TIMERS 1
#define configTIMER_TASK_PRIORITY 2
#define configTIMER_QUEUE_LENGTH 3
#define configTIMER_TASK_STACK_DEPTH 512
/*end of set soft timer para */
5、建立完整工程,调试
上面配置完毕后,添加自己的工程调试;
我自己添加工程如下:
接下来设置硬件初始化,添加任务,启动任务;
特别需要注意的是,任务建立时,给任务分配的空间一定要足,刚开始尽量多分配一点,以免内存不足时,出现莫名其妙的问题,还不好找问题;我调试过程中,就出现了几次这样的问题,后来才发现 是空间不足;