最近闲着无聊移植了一下ucos到stc的单片机里面,发现如下问题
void Taska(void *aa) reentrant
{
char a=0;
char b=0;
a++;
b++;
OSTimeDly(2);
}
void Taskb(void *bb) reentrant
{
char a=0;
char b=0;
a++;
b++;
OSTimeDly(2);
}
在keil中仿真都不会得到 a和b累加的结果
观察得到的结论是两个task中的a和b地址被ucos中的其它变量使用了(分配的地址不在任务堆栈范围内)
只有将a和b变量定义为static 才能正常工作
但是我观察别人移植的ucos任务里面定义局部变量时没有加static限制一样正常使用 请问是什么问题? 我以前理解的都是keil中局部变量都作为静态变量分配地址的 。。。 难道局部变量keil能自动优化? 还有分配任务的时候分配的堆栈难道不是用来存储这些变量的么!那么局部变量的地址范围应该在这分配的堆栈里面才对吧? |