导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[求助] ARM编程:关于IAR编译结果的问题

* 99585: [求助] ARM编程:关于IAR编译结果的问题

   pauljoe 
pauljoe发表的帖子 

 [求助] ARM编程:关于IAR编译结果的问题

struct TIME {
    unsigned char uu;
    unsigned char nn;
};
struct AAA {
    unsigned char a;
    struct TIME aa;
    struct TIME bb;
    unsigned char buf[100];
};
……
void test(struct TIME a)
{
    //sys_trace("%04x, %04x, %04x", a.uu, b.uu, b.nn);
    sys_trace("%04x", sizeof(a.uu));
    sys_trace("%04x", a.nn);
    sys_trace("%04x", sizeof(a.uu));
    //sys_trace("%d, %d, %d, %d", c.uu, c.nn, d.uu, d.nn);
}
int xxxxx(……, struct AAA *stru)
{
……
    test(stru->    aa);

……
}

如上程序
在sys_trace("%04x", a.nn);这里
不管是a.uu还是a.nn都是unsigned char型才对
我用IAR 4.30A编译后的结果却是
   1051          void test(struct AAA a)
   1052          {
   \                     test:
   \   00000000   10B5               PUSH        {R4,LR}
   \   00000002   041C               MOV         R4,R0
   1053              //
   1054              sys_trace("%04x", sizeof(a.uu));
   \   00000004   0121               MOV         R1,#+0x1
   \   00000006   ....               LDR         R0,??DataTable65   ;; `?
    <Constant "%04x">    `
   \   00000008   ........           _BLF        sys_trace,sys_trace??rT
   1055              sys_trace("%04x", a.uu);
   \   0000000C   211C               MOV         R1,R4
   \   0000000E   ....               LDR         R0,??DataTable65   ;; `?
    <Constant "%04x">    `
   \   00000010   ........           _BLF        sys_trace,sys_trace??rT
   1056              sys_trace("%04x", sizeof(a.uu));
   \   00000014   0121               MOV         R1,#+0x1
   \   00000016   ....               LDR         R0,??DataTable65   ;; `?
    <Constant "%04x">    `
   \   00000018   ........           _BLF        sys_trace,sys_trace??rT
   1057              //
   1058          }

   1051          void test(struct AAA a)
   1052          {
   \                     test:
   \   00000000   01B5               PUSH        {R0,LR}
   1053              //
   1054              sys_trace("%04x", sizeof(a.uu));
   \   00000002   0121               MOV         R1,#+0x1
   \   00000004   ....               LDR         R0,??DataTable65   ;; `?
    <Constant "%04x">    `
   \   00000006   ........           _BLF        sys_trace,sys_trace??rT
   1055              sys_trace("%04x", a.nn);
   \   0000000A   6846               MOV         R0,SP
   \   0000000C   4178               LDRB        R1,[R0, #+0x1]
   \   0000000E   ....               LDR         R0,??DataTable65   ;; `?
    <Constant "%04x">    `
   \   00000010   ........           _BLF        sys_trace,sys_trace??rT
   1056              sys_trace("%04x", sizeof(a.uu));
   \   00000014   0121               MOV         R1,#+0x1
   \   00000016   ....               LDR         R0,??DataTable65   ;; `?
    <Constant "%04x">    `
   \   00000018   ........           _BLF        sys_trace,sys_trace??rT
   1057              //
   1058          }

 


   1055              sys_trace("%04x", a.nn);
   \   0000000A   6846               MOV         R0,SP
   \   0000000C   4178               LDRB        R1,[R0, #+0x1]
   \   0000000E   ....               LDR         R0,??DataTable65   ;; `?
    <Constant "%04x">    `
   \   00000010   ........           _BLF        sys_trace,sys_trace??rT
   
--------------------------------------------------------------------------------
----   
   1055              sys_trace("%04x", a.uu);
   \   0000000C   211C               MOV         R1,R4
   \   0000000E   ....               LDR         R0,??DataTable65   ;; `?
    <Constant "%04x">    `
   \   00000010   ........           _BLF        sys_trace,sys_trace??rT

注意看加粗部分

如果test函数只用到了a.uu则sys_trace的第二参数(R1)  LDR test的第一参数(R0)

如果test函数用到了a.nn则sys_trace的第二参数(R1) LDRB 操作

小弟用ARM没多久

今天干活的时候出现错误才找到这个问题

不知道哪位兄台可以指点一下

不甚感激~



发表时间:2006年11月14日10:02:22

  
回复该帖

本主题共有 2 帖,分页:>>>>>该主题的所有内容[2]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  100340.[详细]我也想知道
摘要:我也想知道啊,高手快来啊......(23字)
- [同为人类][687次] 2006年12月6日

[上一篇帖子]:能不能给我发一个能不能给我发一个 a283912829@126.com 谢谢!!!!
[下一篇帖子]:look能不能给我发一个 a283912829@126.com