使用uc/os的任务生成函数OSTaskCreate()生成一个任务时,它会给这个任务传递一个地址(一般是一个数组的地址)作为此任务的“堆栈”。其实这个“堆栈”是不是应该理解成“栈”?因为它是SP的值,保存着任务切换时的上下文和函数调用的PC返回地址。 现在假设生成了两个任务: void task1(void *pdata) { int data1[100]; while(1) { ... } } void task2(void *pdata) { int data2[100]; while(1) { ... } } 现在我想问一下:这两个任务的局部变量data1,data2是保存在那里,是各自任务的“堆栈”里面(也就是任务生成是传递的“堆栈”)吗?如果是这样好像有点问题:有些编译器是可以随时生成局部变量的,或者使用malloc()申请内存,会不会把这个“堆栈”给搞乱了?
表达得不是很清楚,希望得到大家可以看懂并回答!
|