ChenXC1121 发表于 2021-4-8 16:47:44

请问UCOS系统中任务切换时是如何保护各局部变量的?


在UCOS的子任务中定义有各种类型的局部变量,有以下三种

1、u16 i=0;

2、u8 sample_data;

3、u8 *devicevalue;
   devicevalue=mymalloc(SRAMIN,4096);

在任务切换进行堆栈保护时,有3个问题:
1、系统是把以上变量的存放首地址保存到栈里面,参数值都保存到栈里面?
2、对于sample_data数组,系统是保存数组存放的首地址,还是100个值都存入栈里面?
3、对于devicevalue指针变量,程序在初始化时已经有为其申请内存空间,系统在任务切换时还需要对其进行堆栈保护吗?这种变量会占用栈的空间吗?

snic_k 发表于 2021-4-8 17:56:58

任务是一个死循环,所以一直在,任务内定义的局部变量就一直在。

saccapanna 发表于 2021-4-8 18:23:21

局部变量是在任务栈上保存的。切换任务,栈指针也切换了,任务栈数据不会丢失。

saccapanna 发表于 2021-4-8 18:26:16

要好好补一下基础,局部变量,只要不是 static 修饰的,都是栈上分配的,函数返回数据就释放了。栈空间有限时,尽量不要定义大数组,或者要注意栈空间溢出。malloc 是动态内存分配,是在堆上分配的。堆、栈是不同的概念。
页: [1]
查看完整版本: 请问UCOS系统中任务切换时是如何保护各局部变量的?