这是学习FreeRTOS的第一个自己移植的demo
之前任务切换不成功,在别的例子上看到stm32f107的启动文件应该是 startup_stm32f10x_md.s而不是 startup_stm32f10x_cl.s,换成正确的启动文件,就可以切换任务了
但是stm32f107文件对应的启动文件就是startup_stm32f10x_cl.s!!!通过对比知道还要将系统时钟的中断 SysTick_Handler入口改为FreeRTOS的与硬件相关的文件port.c中去,
在port.c中对应就是xPortSysTickHandler了,所以将SysTick_Handler换成立马就可以实现任务切换了!
FreeRTOS的移植不仅仅只是将FreeRTOS的文件拷贝过来就算完事了,主要是涉及软件正常跑起来所需要的硬件相关的地方要对应起来,这里就是FreeRTOS所涉及到的硬件是
void xPortPendSVHandler( void );
void xPortSysTickHandler( void );
void vPortSVCHandler( void );
三个中断才能运行,因为利用vTaskDelay延时实现阻塞切换任务,是利用系统时钟来计时,计时就需要硬件的系统时钟中断计数来支持了,之前就是没配置正确系统时钟的中断,所以我说当系统时钟中断发生了,但是不能正确的跳转到FreeRTOS中的中断处理,任务就没法切换了!
移植的关键是正确配置软件跑起来所需要的硬件资源!比如这次FreeRTOS任务切换所需要的硬件系统时钟的中断。