Board logo

标题: [求助]局部变量不能更改 [打印本页]

作者: wkx11    时间: 2008-7-5 09:49     标题: [求助]局部变量不能更改

下面的变量type本来是在函数里边的可是发现不能修改它的值导致了赋值不成功。后来发现把它提函数外边就好了不知道怎么回事。类似的问题以前也碰到过不知道怎么回事反正就是把它提到函数外边就能用了。我用的是codewarrior4.6

for hcs12 芯片是dg128.

byte type;//类型标示用来区分通信接口是can还是串口。0为串口,1can?
byte Rec(byte a[156])
{
int i;
byte sta;
dword s; /*存储地址*/

maddr PAddress;
// byte ad;
byte *p; /*临时指针*/
byte a8; //word
p=a;
if ( Next_Addr==(dword)NULL )
{/*需解析的模块文件*/
type=0;
if ( *(p+1)=='1' )
{//S1类型
FCNFG_BKSEL=0;
PAddress.paddr.ppage=0;
PAddress.paddr.addrh=Hex2Dec(p, 4);
PAddress.paddr.addrl=Hex2Dec(p, 6);
s=(word)PAddress.aaddr;
if (0xff80<=s<=0xffff )
{
s=s-0x8000;
}
p=p+8;


作者: 康桥人    时间: 2008-7-5 11:52

不可能的,你还是查查程序,有一点可以确定的是局部变量不分配内存,可能是你在查看此变量的时候,其所占的内存已经释放了,


作者: wkx11    时间: 2008-7-6 15:45

应该是分配了内存的,因为查看的时候可以看到他的初始化的值。但是在运行过程中不会发生变化。郁闷,以前搞单片机没遇到过这样的问题。上一次出现这问题是个临时变量i,看着它一遍又一遍的循环可是就是值不变。不知道怎么回事,后来把几个变量提到函数外边就好了。


作者: 康桥人    时间: 2008-7-7 17:27

局部变量是不给内存的,以椎栈的形式分配,用完后释放,你能看到这个局部变量是因为程序走到了那个地方,此局部变量已经占用了内存,椎栈的形式给的。


作者: lw362811022    时间: 2009-2-11 22:31

我也碰到这样的问题,就譬如INT8U i; for(i=0;i<5;i++){}

这样的程序单步执行i一直是灰的,<not allocated>


作者: fayefayehoo    时间: 2009-2-12 09:03

你们说的变量不能改变,是指在hiwave里data窗口里值没有变化吧


作者: fjczd    时间: 2009-2-12 16:27

QUOTE:
以下是引用康桥人在2008-7-7 17:27:00的发言:

局部变量是不给内存的,以椎栈的形式分配,用完后释放,你能看到这个局部变量是因为程序走到了那个地方,此局部变量已经占用了内存,椎栈的形式给的。

原来是这样的






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