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

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

  
楼 主:pauljoe 2006年11月14日10:02
 [求助] 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没多久

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

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

不甚感激~

  
2楼:同为人类 2006年12月6日18:10
 我也想知道
我也想知道啊,高手快来啊

>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:[求助]关于429信号发生器上的DS1239Y/AB的问题

[下一篇主题]:Proteus和keil联调