最近闲着无聊移植了一下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能自动优化? 还有分配任务的时候分配的堆栈难道不是用来存储这些变量的么!那么局部变量的地址范围应该在这分配的堆栈里面才对吧? |   
     
  
 |