计划在一个项目中使用FreeRTOS,硬件是stm32f103,软件编译调试环境是Keil for ARM(MDK)4.23,按照经验并参考FreeRTOS的demo例程添加了所需的文件并设置了include路径,新建一个main.c编写测试程序,测试程序中只建立一个控制一个发光二极管闪烁的任务,编译通过->连接JLink和目标板->仿真->运行,灯不闪! 暂停仿真,发现程序停在HardFault_Handler的while(1){};中,一时间压力袭来。检查stack和heap的设置分别为0x400和0x200,应该不会溢出;也许是很简单的问题呢,先上网搜,有信息说要修改stm32启动文件中的某些中断向量,用Byond Compare比较Demo中的STM32F10x.s和固件库中的startup_stm32f10x_md.s,发现中断向量表中有3处的中断服务名称不一样,前者是名称以xport开头的三个函数,看来是FreeRTOS修改的,按照前者把固件库中startup_stm32f10x_md.s三处向量表修改掉,并在向量表代码前增加三条IMPORT xxx 语句,再编译、仿真、运行,运行成功!
感觉FreeRTOS启动很简单,只要三步:
- void main(void){
- void Setuphardware(void);
-
- /* 时钟等硬件初始化 */
- Setuphardware();
-
- /* 创建任务 */
- xTaskCreate(LedTask, "led_task", LED_TASK_STACK_SIZE, NULL, LED_TASK_PRIORITY, NULL);
-
- /* 启动任务调度 */
- vTaskStartScheduler();
-
- }
复制代码