keil问题

[复制链接]
1561|5
 楼主| sinadz 发表于 2014-1-30 09:48 | 显示全部楼层 |阅读模式
最近闲着无聊移植了一下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能自动优化? 还有分配任务的时候分配的堆栈难道不是用来存储这些变量的么!那么局部变量的地址范围应该在这分配的堆栈里面才对吧?
无冕之王 发表于 2014-1-30 10:09 | 显示全部楼层
如果在观察串口看不到变量值,那可能是优化没了,一般都会有 out of xxxx的提示的
火箭球迷 发表于 2014-1-30 10:24 | 显示全部楼层
怀疑优化就把优化选项去掉看看。
xsgy123 发表于 2014-1-30 15:12 | 显示全部楼层
可能是优化没了吧
baidudz 发表于 2014-1-30 15:53 | 显示全部楼层
可能是优化选型设置问题吧
comeon201208 发表于 2014-2-24 16:35 | 显示全部楼层
这个问题的我也存在的,我每次仿真的时候也必须这样的啊,不知道为啥
您需要登录后才可以回帖 登录 | 注册

本版积分规则

304

主题

2313

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部