小谦· 2023-03-22 09:06 采纳率: 100%
浏览 139
已结题

FreeRTOS有任务卡死

FreeRTOS在单片机上长时间运行后,有任务卡死
是构建了四个任务,然后长时间运行后,按键根本不响应了,但是显示还在刷新,显示的数据来源于HT7036_task_function,数据是正确的,说明只有按键任务没有被2执行,这个现象只发生在长时间运行后,刚上电的第一天没有问题。

//创建按键扫描任务
xTaskCreate((TaskFunction_t )key_task_function,
                (const char*    )"key_task",
                (uint16_t       )128,
                (void*          )NULL,
                (UBaseType_t    )2,
                (TaskHandle_t*  )&keytask_handler);

    //创建显示任务
    xTaskCreate((TaskFunction_t )display_task_function,
                (const char*    )"display_task",
                (uint16_t       )128,
                (void*          )NULL,
                (UBaseType_t    )3,
                (TaskHandle_t*  )&display_handler);

    //创建HT7036运行任务,读取电能数据 
    xTaskCreate((TaskFunction_t )HT7036_task_function,
                (const char*    )"HT7036_task",
                (uint16_t       )128,
                (void*          )NULL,
                (UBaseType_t    )2,
                (TaskHandle_t*  )&HT7036_handler);
    
    //485数据接收超时检测 
    xTaskCreate((TaskFunction_t ) receiver_task_function,
                (const char*    ) "receiver_task",
                (uint16_t       ) 128,
                (void*          ) NULL,
                (UBaseType_t    ) 2,
                (TaskHandle_t*  ) &receiver_handler);

  • 写回答

7条回答 默认 最新

  • 社区专家-Monster-XH 2023-03-22 09:43
    关注

    基于Monster 组和GPT的调写:

    • 可能跟任务优先级、资源争用或任务阻塞等问题导致的。

    问题以及解决方案:

    • 1.任务优先级设置不正确:要按键任务的优先级比其他任务都要高。这样,当按键被按下时,它将立即响应。
    • 2.资源争用:如果按键任务和其他任务正在争用某些共享资源(例如,IO口、共享内存等),则会出现任务阻塞的情况。在访问共享资源时用适当的同步机制,例如信号量、互斥量等。
    • 3.任务阻塞:任务可能会由于等待事件而阻塞。例如,如果按键任务在等待队列中的数据,则它可能会一直阻塞,直到队列中有新数据。考虑用超时机制,保证任务不会一直阻塞。
    • 4.堆栈溢出:如果任务的堆栈空间不足,可能会任务卡死。保证每个任务都有足够的堆栈空间,根据需要增加堆栈大小。
    • 5.任务死循环:如果任务处于死循环中,则它将无法响应其他任务或中断。保证任务的代码中没有死循环。
    • 另外,考虑在FreeRTOS中启用任务监视器来检测任务阻塞的情况,以便能够及时发现问题并进行调试。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 4月3日
  • 已采纳回答 3月26日
  • 赞助了问题酬金15元 3月22日
  • 创建了问题 3月22日

悬赏问题

  • ¥15 用PLC设计纸袋糊底机送料系统
  • ¥15 simulink仿真中dtc控制永磁同步电机如何控制开关频率
  • ¥15 用C语言输入方程怎么
  • ¥15 网站显示不安全连接问题
  • ¥15 github训练的模型参数无法下载
  • ¥15 51单片机显示器问题
  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案
  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页