MDK编译器BUG求证!!!

2019-07-20 23:29发布



写了个函数:
void test(s8 x,s8 y,s8 z)
{
  u32 data,datb,datc,datm,datn;
  u32 *scp;
  u8 i,a,b,c,n,k,s,t;

  if(z<50)
  {
    scp=datbuf;    //数组名datbuf
    a=x<<1;
    a--;
    b=z<<1;
    b++;
    scp+=a;
    data=*scp++;
    datb=*scp++;
   ....
  }
}

1.问题点:
   编译后打开汇编发现 data=*scp++编译错误,运行数据完全不对头。
2.多次重新排列语句顺序会有不同的错误出现,如datb=*scp++该语句编译错误
3.如果把data=*scp++拆成两句 data=*scp;scp++;编译又正常了。

编译错误图片如附件,搞不懂这是怎么了,求大神指点。
[img]file:///C:Documents and SettingsAdministratorApplication DataTencentUsers1661864269QQWinTempRichOle[56FX@Y95HKDBVTX19KN@1U.png[/img]

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
jermy_z
1楼-- · 2019-07-21 02:15
好好学学指针吧,这种低级问题,keil还不至于犯
xkwy
2楼-- · 2019-07-21 03:09
话说刚开始学习那会儿,也总是认为keil编译器有问题,我的代码并没有达到想要的要求,
但等学会C语言并懂点儿汇编后,再一一跟踪代码发现,keil从C语言翻译到汇编并没有错误,是自己写的代码不是自己真实希望表达的意思。

楼主没有贴全部的代码,也没有贴完全的汇编指令结果,所以无法判断你代码哪里有问题。

但几乎可以肯定的是,你代码有问题。

如果方便的话,请贴一下全部的代码或这个函数整个的汇编结果,我们来帮你分析分析。
幼儿园学长
3楼-- · 2019-07-21 03:37
xkwy 发表于 2016-3-10 09:10
话说刚开始学习那会儿,也总是认为keil编译器有问题,我的代码并没有达到想要的要求,
但等学会C语言并懂 ...

谢谢你们的提点!
  我把函数简化了,并汇编一起剪图附上。说明:Middatbuf是个二维数组。
幼儿园学长
4楼-- · 2019-07-21 03:40
 精彩回答 2  元偷偷看……
xkwy
5楼-- · 2019-07-21 03:51
 精彩回答 2  元偷偷看……
幼儿园学长
6楼-- · 2019-07-21 04:42
xkwy 发表于 2016-3-10 13:39
压栈
将传来的参数读取出来,以便可以使用r0-r2

现在的问题:data=*scp++;和datb=*scp++这两句运行的结果是不对的

一周热门 更多>