搜索
bottom↓
回复: 12

在STM32开发板上移植FreeRTOS,任务调度出现功能问题

[复制链接]

出0入0汤圆

发表于 2014-8-26 17:24:43 | 显示全部楼层 |阅读模式
在STM32开发板上移植FreeRTOS,led1与led2同一个优先级并排跑没问题,但在task1任务代码中创建任务task2出错,跑三次后就task2创建不了任务了,进不了task2任务代码中,也就是只有LED1亮,LED2不亮,求助!​
​如仿真中,前三次功能没问题,灯交替闪烁,但从第三次开始直接跳回实红线所指代码处,而不再进入虚红线所指代码处了,请问这是怎么回事
  1. #include "includes.h"
  2. #include "sys.h"
  3. #include "delay.h"
  4. #include "usart.h"
  5. #include "freertos.h"
  6. #include "task.h"
  7. #include "queue.h"
  8. #include "led.h"

  9. static void led1_task(void *pdata);
  10. static void led2_task(void *pdata);

  11. int main(void)
  12. {
  13.          delay_init();             //ÑÓʱ³õʼ»¯          
  14.         NVIC_Configuration();          //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
  15.         LED_Init();                           //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
  16.   
  17.         xTaskCreate( led1_task, "LED1", 1000, NULL, 1, NULL );
  18.   

  19.         /* Start the scheduler. */
  20.         vTaskStartScheduler();
  21.         for(;;);
  22.        
  23. }
  24. //LED1ÈÎÎñ
  25. static void led1_task(void *pdata)
  26. {                
  27.         for(;;)
  28.         { xTaskHandle xLED2Handle;
  29.                 LED0=0;
  30.                 delay_ms(80);
  31.                 LED0=1;
  32.                 delay_ms(920);
  33.                   xTaskCreate( led2_task, "LED2", 1000, NULL, 2, &xLED2Handle );

  34.         };
  35. }

  36. //LED2ÈÎÎñ
  37. static void led2_task(void *pdata)
  38. {          
  39.         for(;;)
  40.         { xTaskHandle xLED2Handle;
  41.                 LED1=0;
  42.                 delay_ms(80);
  43.                 LED1=1;
  44.                 delay_ms(900);
  45.                 vTaskDelete(xLED2Handle);
  46.         };
  47. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-8-26 18:04:57 | 显示全部楼层
首先顶下楼主!

  我也在学习FreeRTOS,准备移植到PIC18F系列的单片机中,但是好像没有任何的移植参考资料。可以推荐些资料学习下吗?

出0入0汤圆

 楼主| 发表于 2014-8-26 18:08:13 | 显示全部楼层
fangy 发表于 2014-8-26 18:04
首先顶下楼主!

  我也在学习FreeRTOS,准备移植到PIC18F系列的单片机中,但是好像没有任何的移植参考资料 ...

Freertos我也刚学,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-8-27 08:31:24 | 显示全部楼层
是的,这个文件已经下载过,但是没有讲关于移植方面的,需要修改哪些配置文件来适应新的单片机?

出130入129汤圆

发表于 2014-8-27 08:38:57 来自手机 | 显示全部楼层
xTaskHandle xLED2Handle这得全局变量吧?

出0入0汤圆

发表于 2014-8-27 08:57:48 | 显示全部楼层
路过帮顶。

出0入0汤圆

发表于 2014-8-27 09:10:55 | 显示全部楼层
不知道对不对,
led1_task中的
xTaskHandle xLED2Handle;

static void led2_task(void *pdata)
中的
xTaskHandle xLED2Handle;
应该不是一个变量,是两个值不同的局部变量,
在led2_task,delete的应该不是led1_task中创建的那个任务。
应该将 xTaskHandle xLED2Handle; 设置位全局变量,
delete前查看一下是否是有效的任务句柄

出0入0汤圆

发表于 2014-8-27 09:14:59 | 显示全部楼层
任务2里面的xLED2Handle不是创建时返回的句柄了吧

出0入0汤圆

 楼主| 发表于 2014-8-27 09:38:48 | 显示全部楼层
maimaige 发表于 2014-8-27 09:10
不知道对不对,
led1_task中的
xTaskHandle xLED2Handle;

首先谢谢各位热心解答,我将static void led2_task(void *pdata)
中的
xTaskHandle xLED2Handle;用双斜线取消了,但是显示..\STM32FLib\USER\main.c(50): error:  #20: identifier "xLED2Handle" is undefined,放在MAIN中的话,两个都显示未定义,请问怎样算是把 xLED2Handle设为全局变量?

出0入0汤圆

 楼主| 发表于 2014-8-27 09:41:41 | 显示全部楼层
maimaige 发表于 2014-8-27 09:10
不知道对不对,
led1_task中的
xTaskHandle xLED2Handle;

首先谢谢各位热心解答,我将static void led2_task(void *pdata)
中的
xTaskHandle xLED2Handle;用双斜线取消了,但是显示..\STM32FLib\USER\main.c(50): error:  #20: identifier "xLED2Handle" is undefined,放在MAIN中的话,两个都显示未定义,请问怎样算是把 xLED2Handle设为全局变量?

出0入0汤圆

发表于 2014-8-27 11:03:07 | 显示全部楼层
    #include "includes.h"
    #include "sys.h"
    #include "delay.h"
    #include "usart.h"
    #include "freertos.h"
    #include "task.h"
    #include "queue.h"
    #include "led.h"

    static void led1_task(void *pdata);
    static void led2_task(void *pdata);

    xTaskHandle xLED2Handle;
    int main(void)
    {
          .....
    }
其他地方的xTaskHandle xLED2Handle;,都注释掉

出0入0汤圆

发表于 2014-8-27 11:12:14 | 显示全部楼层
首先我指出一个重要的错误,都用RTOS了,怎么还有这种delay_ms(80)延迟函数,任务都没有办法切换,要有系统自带的延迟函数。

出0入0汤圆

 楼主| 发表于 2014-8-27 11:20:26 | 显示全部楼层
太感谢各位了,修改了两处地方:1. xLED2Handle修改为全局变量;2.删除delay()函数,使用系统自带延时函数vTaskDelay(100/portTICK_RATE_MS);
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 08:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表