OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4906|回复: 4

Keil C51 编译器大BUG!!!

[复制链接]

6

主题

14

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2016-10-22
在线时间
11 小时
发表于 2016-12-25 01:03:09 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 7682297ab 于 2016-12-25 01:04 编辑

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];

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

14

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2016-10-22
在线时间
11 小时
 楼主| 发表于 2016-12-25 01:55:37 | 显示全部楼层
已查明,C51不支持函数指针
回复

使用道具 举报

0

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2016-1-5
在线时间
9 小时
发表于 2016-12-29 11:56:29 | 显示全部楼层
C51支持函数指针,前几天才用过。你写法不对,完全不用这么复杂的。
回复

使用道具 举报

3

主题

144

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7342
金钱
7342
注册时间
2016-2-6
在线时间
1863 小时
发表于 2016-12-29 12:01:04 | 显示全部楼层
自己的错误还没查出来就断言编译器bug?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165378
金钱
165378
注册时间
2010-12-1
在线时间
2111 小时
发表于 2017-1-2 21:58:15 | 显示全部楼层
不要轻易怀疑编译器bug。。。多从代码上面找问题吧,编译器有些用法可能不支持,但不是bug
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-3-13 10:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表