Board logo

标题: CODEWARRIOR变量定义问题 [打印本页]

作者: hgwangweilin    时间: 2005-9-19 11:19     标题: 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; } }
作者: lijin_as    时间: 2005-9-20 09:03

你把unsigned char 改成 UINT8 看看行不行
作者: seuafu2005    时间: 2005-9-20 09:57

可能你的x1,y1没有在其他地方用到,编译器认为没有用处,被编译器优化掉了。
作者: strongchen    时间: 2005-9-20 11:11

CodeWarrior对局部变量不会分配一个固定的地址,而是放在堆栈中操作。而在DATA窗口中只能看到全局变量。
作者: hgwangweilin    时间: 2005-9-21 08:36

谢谢大家!!,我认为deuafu2005说的对;对没有错误的语句,是应该执行的,为什么程序不运行x=i+1;y=i+1呢?唯一可解释的就是:该语句被编译器优化掉了。希望大家亲自在Codewarrior 下实验一下,共同讨论。
作者: tianwailk    时间: 2005-10-24 20:42

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


作者: tianwailk    时间: 2005-10-24 20:47

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




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0