单片机/MCUwilliam hill官网
直播中

刘军

7年用户 1426经验值
私信 关注
[问答]

ucosiii堆栈检测函数运用的小疑问求解

附上堆栈检测函数的代码

  • #define         Usage_STK_SIZE                                                                        128u                //统计任务
  • #define         IWDG_STK_SIZE                                                                        64u                        //看门狗任务

m data-ke->复制代码



  • void usage_task(void *p_arg)
  • {
  •         OS_ERR err;
  •         CPU_STK_SIZE freeused;
  •         p_arg = p_arg;
  • //        static u32 time = 0time1 = 0;

  •         while(DEF_TRUE)
  •         {
  • //                time = OSTimeGet( err);
  •                 debug("%d run in   app_usagern" OSTimeGet( err));

  •                 printf("rn");
  •                 OSTaskStkChk ( IwdgTaskTCB free used err);
  •                 printf("IwdgTaskTCB                        used/free:%d/%d                usage:%%%drn"used*4free*4(used*100)/(used+free));

  •                 OSTaskStkChk ( UsageTaskTCB free used err);
  •                 printf("UsageTaskTCB                        used/free:%d/%d                usage:%%%drn"used*4free*4(used*100)/(used+free));

  •                 printf("rn");

  •                 debug("%d end in   app_usagern" OSTimeGet( err));
  •                 OSTimeDlyHMSM(0030(OS_OPT)OS_OPT_TIME_DLY(OS_ERR*) err);
  •         }
  • }

代码就检测了喂狗任务的堆栈  和  检测任务的堆栈使用。
打印的地方 *4 是为了表示为字节。

然后在喂狗函数里面测试,申请的局部变量与打印出来的堆栈使用情况


  • #define num        21

  • void iwdg_task(void *p_arg)
  • {
  •         OS_ERR err;
  •         p_arg = p_arg;
  •         u8 i = 0;

  •         while(1)
  •         {
  •                 u8 count[num]={0};

  • //                for(i=0; i

更多回帖

发帖
×
20
完善资料,
赚取积分