电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
问答
ucosiii 堆栈检测函数运用的小疑问
已解决
73482
个问题
已帮助
5993
位优秀工程师
ucosiii 堆栈检测函数运用的小疑问
大伟
2019-09-10
浏览量:658
附上堆栈检测函数的代码
#define Usage_STK_SIZE 128u //统计任务
#define IWDG_STK_SIZE 64u //看门狗任务
m data-ke-on
click="copycode($('code_VQ7'));">复制代码
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);
}
}
m data-ke-on
click="copycode($('code_PFE'));">复制代码
代码就检测了喂狗任务的堆栈 和 检测任务的堆栈使用。
打印的地方 *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);
}
}
m data-ke-on
click="copycode($('code_QPc'));">复制代码
这是其中的两个打印的情况
mg id="aimg_149055" aid="149055" src="http://www.openedv.com/data/attachment/forum/201909/09/145308kf2lez53c32feif2.png" data-ke-src="http://www.openedv.com/data/attachment/forum/201909/09/145308kf2lez53c32feif2.png" zoomfile="data/attachment/forum/201909/09/145308kf2lez53c32feif2.png" file="data/attachment/forum/201909/09/145308kf2lez53c32feif2.png" class="zoom" data-ke-on
click="zoom(this this.src 0 0 0)" width="484">
1.png
(1.47 KB 下载次数: 0)
下载附件
昨天 14:53
上传
mg id="aimg_149056" aid="149056" src="http://www.openedv.com/data/attachment/forum/201909/09/145310x0stakznnzffsskn.png" data-ke-src="http://www.openedv.com/data/attachment/forum/201909/09/145310x0stakznnzffsskn.png" zoomfile="data/attachment/forum/201909/09/145310x0stakznnzffsskn.png" file="data/attachment/forum/201909/09/145310x0stakznnzffsskn.png" class="zoom" data-ke-on
click="zoom(this this.src 0 0 0)" width="456">
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字节增加。
请问这是咋回事,有知道的可以谈谈吗?
显示全部
单片机
关注问题
写回答
0
0
收起
我来回答
上传资料:
选择文件
文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答
数量:
0
相关问题
问题达人
换一批
文章
知识经验换现金
换一批
ucosiii 堆栈检测函数运用的小疑问
写回答
关注问题
×
我要举报该内容,理由是:
内容质量差:
内容太水、伸手党
垃圾广告信息:
广告、招聘、推广、测试内容等
偏离问答主题:
与技术无关、讨论类
与社区已有内容重复:
违规内容:
色情、暴力、血腥、敏感信息等
不友善内容:
人事攻击、挑衅辱骂、恶意行为
以上选项都不是: