查看: 2594|回复: 0

freertos死机

[复制链接]

2

主题

8

帖子

76

积分

中级工程师

Rank: 2

积分
76
发表于 2023-1-20 12:28:17 | 显示全部楼层 |阅读模式
本帖最后由 yukezhe2008 于 2023-1-20 16:43 编辑

之前有遇到死机的情况是因为使用了GPTIM,这次使用2023最新的库例程(低功耗FREERTOS),没有别的计数器,仅仅创建了两个任务,一个跑LCD循环显示,一个把要显示的数字加1,结果又死了,真是要疯了。

  1. void display(void *pvParameters)
  2. {
  3.     pvParameters = pvParameters;

  4.     for(;;)
  5.     {
  6.         LcdLoop();
  7.         vTaskDelay(100);

  8.     }
  9. }

  10. void counter_loop(void *pvParameters)
  11. {
  12.     pvParameters = pvParameters;
  13.     for(;;)
  14.     {
  15.         TD.nCount_total++;
  16.         fSHOW=1;
  17.         vTaskDelay(10);

  18.     }
  19. }
复制代码
/*

先说明一下,stack肯定没溢出,heap管够。
任务里也不会出现FL_DelayMs函数。例程device是fm33lc04X,我用的025n。
简单粗暴去掉低功耗,注释掉sleepConfig函数,运行没问题。
编译器用的MDK v5,没有优化,如果把优化等级改成-O1以上就不会死,具体能活多久没试过。
*/

/*

两个延时函数,如果参数改成100,1,就没问题(至少一晚上都没死),如果是100,10必死,试过的参数情况如下:
一、100,10必死
二、10,100必死
三、100,11存活比前两种情况多几百毫秒后必死
四、100,1必活(至少10H)
五、1,100必活(至少10H)
六、1000,100必死,但是可以看出每次都死在1000的任务循环10次时
七、再创建第三个任务,三个任务参数为100,10,1,必活
八、再创建第三个任务,三个任务参数为10,100,1,必活
*/

请原厂大佬帮忙看看,要被他搞崩溃了!有需要的话我发源码上来!


刚刚试了下,只创建一个任务,也会死,每次都是计数到10002死机。


  1. void display(void *pvParameters)
  2. {
  3.     pvParameters = pvParameters;
  4.     for(;;)
  5.     {
  6.      TD.nCount_total++;
  7.      fSHOW=1;
  8.      LcdLoop();
  9.      vTaskDelay(10);
  10.     }
  11. }
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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