附上堆栈检测函数的代码
- #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