硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5746|回复: 2
收起左侧

[ThreadX全家桶] ThreadX任务栈溢出检测机制实现流程,并打印出那个任务栈溢出

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115811
QQ
发表于 2021-4-21 08:50:41 | 显示全部楼层 |阅读模式

1、使能栈检测
  1. #define TX_ENABLE_STACK_CHECKING
复制代码


2、注册回调:
  1. tx_thread_stack_error_notify(my_stack_error_handler);
复制代码


3、回调实现:
  1. void my_stack_error_handler(TX_THREAD *thread_ptr)
  2. {
  3.         App_Printf("===============================================================\r\n");
  4.         App_Printf("如下任务被检测出栈溢出\r\n");
  5.         App_Printf("===============================================================\r\n");
  6.         App_Printf(" 任务优先级 任务栈大小 当前使用栈  最大栈使用   任务名\r\n");
  7.         App_Printf("   Prio     StackSize   CurStack    MaxStack   Taskname\r\n");
  8.         
  9.         TX_THREAD      *p_tcb;                /* 定义一个任务控制块指针 */

  10.     p_tcb = &AppTaskStartTCB;
  11.         
  12.         /* 遍历任务控制列表TCB list),打印所有的任务的优先级和名称 */
  13.         do
  14.         {
  15.                 if(p_tcb != (TX_THREAD *)thread_ptr)
  16.                 {
  17.                         p_tcb = p_tcb->tx_thread_created_next;
  18.                 }
  19.                 else
  20.                 {
  21.                                        
  22.                         App_Printf("   %2d        %5d      %5d       %5d      %s\r\n",
  23.                                                 p_tcb->tx_thread_priority,
  24.                                                 p_tcb->tx_thread_stack_size,
  25.                                                 (int)p_tcb->tx_thread_stack_end - (int)p_tcb->tx_thread_stack_ptr,
  26.                                                 (int)p_tcb->tx_thread_stack_end - (int)p_tcb->tx_thread_stack_highest_ptr,
  27.                                                 p_tcb->tx_thread_name);
  28.                         
  29. //                        tx_thread_terminate(thread_ptr);
  30. //                        tx_thread_reset(thread_ptr);        
  31. //                        tx_thread_resume(thread_ptr);
  32.                         while(1);
  33.                 }
  34.         }while(1);
  35. }
复制代码


打印栈溢出的任务
QQ截图20210421085030.png

回复

使用道具 举报

23

主题

1443

回帖

1512

积分

至尊会员

积分
1512
发表于 2021-4-21 10:31:57 | 显示全部楼层
这个任务异常后,可以恢复任务吗
代码不规范,亲人两行泪!
回复

使用道具 举报

681

主题

3487

回帖

5555

积分

论坛元老

积分
5555
发表于 2021-4-21 11:14:39 | 显示全部楼层
这个功能不错哟
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-20 11:16 , Processed in 0.264194 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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