读code区一个字节赋值传递时丢失?神奇的问题,有图有真相
---------这是一个读中文字符串的操作“气”从数据上看*s确实拿到了正确的数据,但是在传给low_byte的时候发生丢失???怎么执行过赋值语句后,low_byte的值为0呢???
更奇怪的是,在另外一个文件中,我屏蔽几条不相干的语句,就没这个问题了。实际发现编译后“气”生成的两字节编码,在code区的存放位置发生了变化,变小了,但是这个地址为什么就不行呢???抓狂的很啊
用的是C8051F040 单步执行可能只是调试器的问题,用串口输出试试。 root_007 发表于 2014-4-29 08:52
单步执行可能只是调试器的问题,用串口输出试试。
不是的,地址的问题,看汇编,难道我哪里没设置好?target选项卡的code xram on chip哪些地址范围我都没管,需要先设置一下吗,我都是默认的,就选一个040
会不会编译器给优化那个操作了 DPTR------16位的数据指针,变址寻址范围可是0x0000----0xffff 啊,按说0x5880那个地址也没什么特殊的,怎么就是读不到呢?抓狂的很!!!!!{:mad:} 最终结果对吗?
不用去关心这个局部变量,因为存在优化的可能。 应该是优化问题, 你把 low_byte 定义 全局变量 再查看一下,
这个应当是优化问题,
你想要看是否读出对不对, 你把优化去掉,再来看,
优化级别高的时候,调试看局部变量是不准的,
一般用串口打印或者定义一些全局变量来观察数值,
验证结束后在改为局部变量!! lusson 发表于 2014-4-29 09:58
最终结果对吗?
不用去关心这个局部变量,因为存在优化的可能。
最终结果不对的, 之前是 c = c*256 + *s; 这样写的,为什么给我优化啊,后来发现液晶出现乱码了,才追踪到这里。后来加上了low_byte = *s;继续深入查找 好奇你的putcharx输入参数是什么类型,char?int? xiaomu 发表于 2014-4-29 10:00
应该是优化问题, 你把 low_byte 定义 全局变量 再查看一下,
这个应当是优化问题,
首先不是全局变量的问题,
但改了编译级别,确实正常了,具体请看图片中的文字描述,根本问题还没弄明白哦,应该是那个默认的编译级别照成的问题,具体是照成的什么问题,我不知道,我不知道,我还是不知道
lusson 发表于 2014-4-29 11:42
好奇你的putcharx输入参数是什么类型,char?int?
unsigned int 跟这个应该没关系吧,应该是默认的编译级别照成的问题,请继续看帖,我想能够搞清楚 reuse common entry code 是怎么回事,问题也就水落石出了
页:
[1]