yelang1124 发表于 2014-4-29 08:37:11

读code区一个字节赋值传递时丢失?神奇的问题,有图有真相

---------这是一个读中文字符串的操作“气”
从数据上看*s确实拿到了正确的数据,但是在传给low_byte的时候发生丢失???怎么执行过赋值语句后,low_byte的值为0呢???

更奇怪的是,在另外一个文件中,我屏蔽几条不相干的语句,就没这个问题了。实际发现编译后“气”生成的两字节编码,在code区的存放位置发生了变化,变小了,但是这个地址为什么就不行呢???抓狂的很啊

yelang1124 发表于 2014-4-29 08:37:44

用的是C8051F040

root_007 发表于 2014-4-29 08:52:51

单步执行可能只是调试器的问题,用串口输出试试。

yelang1124 发表于 2014-4-29 09:27:57

root_007 发表于 2014-4-29 08:52
单步执行可能只是调试器的问题,用串口输出试试。

不是的,地址的问题,看汇编,难道我哪里没设置好?target选项卡的code xram on chip哪些地址范围我都没管,需要先设置一下吗,我都是默认的,就选一个040

maimaige 发表于 2014-4-29 09:39:41

会不会编译器给优化那个操作了

yelang1124 发表于 2014-4-29 09:50:12

DPTR------16位的数据指针,变址寻址范围可是0x0000----0xffff 啊,按说0x5880那个地址也没什么特殊的,怎么就是读不到呢?抓狂的很!!!!!{:mad:}

lusson 发表于 2014-4-29 09:58:08

最终结果对吗?
不用去关心这个局部变量,因为存在优化的可能。

xiaomu 发表于 2014-4-29 10:00:24

应该是优化问题, 你把 low_byte 定义 全局变量 再查看一下,

这个应当是优化问题,

你想要看是否读出对不对, 你把优化去掉,再来看,

优化级别高的时候,调试看局部变量是不准的,
一般用串口打印或者定义一些全局变量来观察数值,
验证结束后在改为局部变量!!

yelang1124 发表于 2014-4-29 11:39:48

lusson 发表于 2014-4-29 09:58
最终结果对吗?
不用去关心这个局部变量,因为存在优化的可能。

最终结果不对的, 之前是 c = c*256 + *s;   这样写的,为什么给我优化啊,后来发现液晶出现乱码了,才追踪到这里。后来加上了low_byte = *s;继续深入查找

lusson 发表于 2014-4-29 11:42:22

好奇你的putcharx输入参数是什么类型,char?int?

yelang1124 发表于 2014-4-29 11:43:08

xiaomu 发表于 2014-4-29 10:00
应该是优化问题, 你把 low_byte 定义 全局变量 再查看一下,

这个应当是优化问题,


首先不是全局变量的问题,


但改了编译级别,确实正常了,具体请看图片中的文字描述,根本问题还没弄明白哦,应该是那个默认的编译级别照成的问题,具体是照成的什么问题,我不知道,我不知道,我还是不知道

yelang1124 发表于 2014-4-29 11:46:32

lusson 发表于 2014-4-29 11:42
好奇你的putcharx输入参数是什么类型,char?int?

unsigned int 跟这个应该没关系吧,应该是默认的编译级别照成的问题,请继续看帖,我想能够搞清楚 reuse common entry code 是怎么回事,问题也就水落石出了
页: [1]
查看完整版本: 读code区一个字节赋值传递时丢失?神奇的问题,有图有真相