首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

CODEWARRIOR变量定义问题

CODEWARRIOR变量定义问题

本人初次使用CODEWARRIOR软件,写了一个很简单的子程序,如下Delay();COMPILE,MAKE,DEBUG通过,单步运行时,程序只在for(i=0;i<100;i++)来回执行,i的值会变化;不执行 x1=i+1;y1=i+1;在软件仿真和硬件仿真都是相同的现象; DATA窗口显示: i 10 unsigned char x1 < not allocated> unsigned char y1 < not allocated> unsigned char 如果把x1,y1定义成全局变量(放在Delay()外定义),程序运行正常,x1;y1的值会变化; 我有点头晕,开始怀疑自己;好歹也写过几年的C51;不知是什么问题;CODEWARRIOR在定义变量时有什么要求,和标准C不一样吗?为这个问题,我找了1天的资料,也没有解答!!! 本人使用的是:CodeWarrior3.1; 请指教!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! void main(void) { Delay(); } void Delay(void) { unsigned char i,x1,y1; for(i=0;i<100;i++) { x1=i+1; y1=i+1; } }
你把unsigned char 改成 UINT8 看看行不行
可能你的x1,y1没有在其他地方用到,编译器认为没有用处,被编译器优化掉了。
CodeWarrior对局部变量不会分配一个固定的地址,而是放在堆栈中操作。而在DATA窗口中只能看到全局变量。
海纳百川  有容乃大
谢谢大家!!,我认为deuafu2005说的对;对没有错误的语句,是应该执行的,为什么程序不运行x=i+1;y=i+1呢?唯一可解释的就是:该语句被编译器优化掉了。希望大家亲自在Codewarrior 下实验一下,共同讨论。

[此贴子已经被作者于2005-10-24 20:42:32编辑过]

确实是这样的,,你只要在后面加上两句话就可以了//
PORTA=x1;
PORTA=y1;
就可以看到编译器运行正确,,
返回列表