ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
1000611 Топик полностью
йцyкeн (01.05.2020 00:47, просмотров: 417) ответил SciFi на Без кода нещитово.
Кортексам специальный код не нужен, а для arm7, у которого невыровненное обращение к памяти вызывает bus fault, ИАР вставляет вызов функции __aeabi_uread4, которая читает побайтно, ну или __aeabi_uwrite4 для записи. 
     10          struct s5 {
     11            char c;
     12            int i;
     13          };
     14          
     15          __packed struct s5packed {
     16            char c;
     17            int i;
     18          };
     19          

   \                                 In section .text, align 2, keep-with-next
     20          int foo(struct s5 * p)
     21          {
     22            return p->i;
   \                     foo: (+1)
   \        0x0   0x6840             LDR      R0,[R0, #+4]
   \        0x2   0x4770             BX       LR               ;; return
     23          }
     24          

   \                                 In section .text, align 2, keep-with-next
     25          int foop(struct s5packed * p)
     26          {
   \                     foop: (+1)
   \        0x0   0xB500             PUSH     {LR}
     27            return p->i;
   \        0x2   0x1C40             ADDS     R0,R0,#+1
   \        0x4   0x....'....        BL       __aeabi_uread4
   \        0x8   0xBC08             POP      {R3}
   \        0xA   0x4718             BX       R3               ;; return
     28          }
     29          

   \                                 In section .text, align 2, keep-with-next
     30          int bar(int __packed * p)
     31          {
   \                     bar: (+1)
   \        0x0   0xB500             PUSH     {LR}
     32            return *p;
   \        0x2   0x....'....        BL       __aeabi_uread4
   \        0x6   0xBC08             POP      {R3}
   \        0x8   0x4718             BX       R3               ;; return
     33          }
     34          

   \                                 In section .text, align 2, keep-with-next
     35          int bar1(struct s5packed *p)
     36          {
   \                     bar1: (+1)
   \        0x0   0xB580             PUSH     {R7,LR}
     37            return bar(&p->i);
   \        0x2   0x1C40             ADDS     R0,R0,#+1
   \        0x4   0x....'....        BL       bar
   \        0x8   0xBC0A             POP      {R1,R3}
   \        0xA   0x4718             BX       R3               ;; return
     38          }