打印

keil问题

[复制链接]
1095|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 | 只看该作者
可能是优化没了吧

使用特权

评论回复
5
baidudz| | 2014-1-30 15:53 | 只看该作者
可能是优化选型设置问题吧

使用特权

评论回复
6
comeon201208| | 2014-2-24 16:35 | 只看该作者
这个问题的我也存在的,我每次仿真的时候也必须这样的啊,不知道为啥

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

304

主题

2313

帖子

0

粉丝