光脚板的脚印 https://bbs.21ic.com/?1033620 [收藏] [复制] [RSS]

日志

使用FreeRTOS的led闪烁灯开始工作

已有 1125 次阅读2014-5-5 21:56 |个人分类:嵌入式|系统分类:芝麻流水帐| FreeRTOS, stm32, HardFault_Handler

计划在一个项目中使用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启动很简单,只要三步:
       
  1. void main(void){
  2.     void Setuphardware(void);
  3.     
  4.     /* 时钟等硬件初始化 */
  5.     Setuphardware();
  6.     
  7.     /* 创建任务 */
  8.     xTaskCreate(LedTask, "led_task", LED_TASK_STACK_SIZE, NULL, LED_TASK_PRIORITY, NULL);
  9.     
  10.     /* 启动任务调度 */
  11.     vTaskStartScheduler();
  12.     
  13.     }
复制代码




路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)