ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
30 июня
45143 Топик полностью
gcc-user (28.11.2005 14:15, просмотров: 1) ответил P_Igorek на GCC не поддерживает записи half word...
Как это не поддерживает? Вот две простых функции, скомпилированные GCC 3.33 
00000000 :
void wr_long (unsigned long addr, unsigned long val)
{
   0:   e1a0c00d        mov     ip, sp
   4:   e92dd800        stmdb   sp!, {fp, ip, lr, pc}
   8:   e24cb004        sub     fp, ip, #4      ; 0x4
   c:   e24dd008        sub     sp, sp, #8      ; 0x8
  10:   e50b0010        str     r0, [fp, -#16]
  14:   e50b1014        str     r1, [fp, -#20]
        *(volatile unsigned long*)(addr) = val;
  18:   e51b2010        ldr     r2, [fp, -#16]
  1c:   e51b3014        ldr     r3, [fp, -#20]
  20:   e5823000        str     r3, [r2]
}
  24:   e91ba800        ldmdb   fp, {fp, sp, pc}

00000028 :

void wr_short (unsigned long addr, unsigned short val)
{
  28:   e1a0c00d        mov     ip, sp
  2c:   e92dd800        stmdb   sp!, {fp, ip, lr, pc}
  30:   e24cb004        sub     fp, ip, #4      ; 0x4
  34:   e24dd008        sub     sp, sp, #8      ; 0x8
  38:   e50b0010        str     r0, [fp, -#16]
  3c:   e1a03001        mov     r3, r1
  40:   e14b31b2        strh    r3, [fp, -#18]
        *(volatile unsigned short*)(addr) = val;
  44:   e51b2010        ldr     r2, [fp, -#16]
  48:   e15b31b2        ldrh    r3, [fp, -#18]
  4c:   e1c230b0        strh    r3, [r2]
}
  50:   e91ba800        ldmdb   fp, {fp, sp, pc}