Keil C51 编译器大BUG!!!

2019-10-15 21:55发布

本帖最后由 7682297ab 于 2016-12-25 01:54 编辑

numShow[0]=CMD_tmp[2];        //Before !!!!
res=(*(u8(*)(u32))cmd_device.funs[id].function)(U32DATA.x);  // SUPER  BUG!!! after (u8(*)(u32)) ,the RAM value shifted
numShow[1]=CMD_tmp[2];   //After !!! RAM VALUE shifting,total changed

1.第二步中没有对CMD_tmp做任何变化,
2.结果到第三步时CMD_tmp的值发生了偏移,把CMD_tmp-8 .... CMD_tmp-1 整片移入CMD_tmp。CMD_tmp原本的值也相应偏移了

以下为补充的信息
union{
        u8 c[4];
        u32 x;
}U32DATA;
U32DATA.c[3]=CMD_tmp[4];
U32DATA.c[2]=CMD_tmp[5];
U32DATA.c[1]=CMD_tmp[6];
U32DATA.c[0]=CMD_tmp[7];

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。