代码如下,就是先打印一下任务信息,调用函数,再打印任务信息
extern long list_thread(void);
void test(void)
{
rt_uint8_t array[256] = {0};
rt_memcpy(array,"goodbadtool",12);
list_thread();
}
void screen_fresh(void *parameter)
{
uint16_t i,j;
RUN_PAGE = 1;
while (1)
{
list_thread();
test();
#if 1
rt_event_send(&feed_dog_event, EVENT_FLAG1);
此时任务栈指针是0x46,十进制70,1023-70=953 此时栈顶应该在堆栈数组953这里吧
最大使用是43%,但是sp是在0x46也不符合43%的比例
但是看着不像啊
然后调用函数,在函数里局部变量,显示用了66%,sp是0x2ae 686,除法结果是0.6699,这个算准吧
查看keil,发现字符串是从下标762开始的,我只是申请了256个字节是数组,结果sp变化了686-70=616这么多,为什么会是从762开始呢?
另外,list_thread这个功能不是显示最大的栈使用率,随着程序的进行,它会变,那用list_thread看栈使用率的时候,会不会输入命令的时刻,占用率低,感觉没问题,然后下一秒到一个分支里,一个大的局部变量数组,导致栈不够用呢,用这个阵容率来设置任务栈的空间大小,会不会有问题
更多回帖