首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

关于C51奇怪的有关问题

2012-02-28 
关于C51奇怪的问题我用keil的软件仿真运行如下代码voidmain{unsignedinttt0x8000+0x5555*(unsignedchar

关于C51奇怪的问题
我用keil的软件仿真运行如下代码

void   main
{
    unsigned   int   t;

    t   =   0x8000   +   0x5555;
    *(unsigned   char   *)t   =   0xaa;
}

t   =   0x8000   +   0x5555这条语句不执行。只能执行*(unsigned   char   *)t   =   0xaa;
这是为什么?谢谢!

[解决办法]
被编译器优化掉了。
[解决办法]
void main
{
unsigned int t;

t = 0x8000 + 0x5555;
*(unsigned char *)t = 0xaa;
}

应该不是优化的问题吧
若被优化了,0xaa写到什么地方了

[解决办法]
是语句t = 0x8000 + 0x5555;被优化了,不是t被优化掉了。
[解决办法]
我大概猜到了你的目的,建议用XDATA宏。
[解决办法]

用voliate 或者关闭优化...
[解决办法]
zhuoyuesky(卓越) ( ) 信誉:100 Blog 2007-03-23 12:17:46 得分: 0


voliate是什么,如何使用,初学51。谢谢!

............................................
这个是说告诉编译器,该变量是经常使用的,一般会为这个做特殊物理,比如说放入CPU的缓存,以减小访问的代价,增加执行效率

[解决办法]
volatile是告诉编译器不要试图优化该变量。
[解决办法]
zhuoyuesky(卓越) ( ) 信誉:100 Blog 2007-03-23 12:17:46 得分: 0


voliate是什么,如何使用,初学51。谢谢!

............................................


这个是说告诉编译器,该变量是经常使用的,一般会为这个做特殊物理,比如说放入CPU的缓存,以减小访问的代价,增加执行效率

==================================================================

不要误导新网友!

[解决办法]
> > t = 0x8000 + 0x5555这条语句不执行。只能执行*(unsigned char *)t = 0xaa;
这是为什么?谢谢!

编译器能将这一条语句优化掉!可能吗,智能到将一条正确而且并不是冗余的一条语句删掉.建议你看看程序其他地方有没有问题,或者关掉编译器重启试一下,这个问题最简单的办法是查看生成的对应汇编语言,看看有没有这条语句,没有那就是被优化掉了
[解决办法]
voliate 不是常用量,是易变量,如端口。处理时不做一些默认优化。

热点排行