大伟
获得 4 次赞
帮助过206人
附上堆栈检测函数的代码 #define Usage_STK_SIZE 128u //统计任务 #define IWDG_STK_SIZE 64u //看门狗任务复制代码 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_usage\r\n" OSTimeGet(&err)); printf("\r\n"); OSTaskStkChk (&IwdgTaskTCB&free&used&err); printf("IwdgTaskTCB used/free:%d/%d usage:%%%d\r\n"used*4free*4(used*100)/(used+free)); OSTaskStkChk (&UsageTaskTCB&free&used&err); printf("UsageTaskTCB used/free:%d/%d usage:%%%d\r\n"used*4free*4(used*100)/(used+free)); printf("\r\n"); debug("%d end in app_usage\r\n" 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<num; i++) // { // count[i] = i; // } IWDG_Feed(); //喂狗 OSTimeDlyHMSM(000500OS_OPT_TIME_HMSM_STRICT&err); } }复制代码 这是其中的两个打印的情况 1.png (1.47 KB 下载次数: 0) 下载附件 昨天 14:53 上传 2.png (1.49 KB 下载次数: 0) 下载附件 昨天 14:53 上传 总结出来的结果是: 当count 数组的类型是 u8 时, num 大小 0 -12 打印的used 为 156 num 大小 13 -20 打印的used 为 164 num 大小 21 -28 打印的used 为 172 num 大小 29 -36 打印的used 为 180 num 大小 37 -45 打印的used 为 188 num 大小 45 打印的used 为 196 当count 数组的类型是 u32 时, num 大小 0 - 3 打印的used 为 156 num 大小 4 - 5 打印的used 为 164 num 大小 6 - 7 打印的used 为 172 num 大小 8 - 9 打印的used 为 180 num 大小 10 -11 打印的used 为 188 num 大小 12 打印的used 为 196 打印出来的数据怎么是8个字节进行的跳变? 然后刚开始定义数组的时候,都超多了8字节也不会跳变,到后面才有规律的8字节增加。 请问这是咋回事,有知道的可以谈谈吗?
INN3268 做适配器,输出电压要求是3.4V-5.5V,副边BSP需要添加什么电路?
比如在TQ2440上做了一个东西以后然后怎么才能把它变成好像手机一样的成品的东西?====还是说只能用开发板来做实验要想做成品必须先做硬件出来然后再硬件上开发?