реклама на сайте
подробности

 
 
> GNU as: как описать union?, Что-то не придумывается.
Сергей Борщ
сообщение Mar 27 2009, 17:48
Сообщение #1


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Итак, имеем union, описанный на С примерно так:
Код
union a_t
    {
        struct
        {
            uint16_t    a;
            uint8_t     b;
            uint16_t    c;
        };
        struct
        {
            uint8_t     d;
            uint16_t    e;
            uint8_t     f;
        };
    } A;
Для ИАРа делается просто:
Код
    RSEG MYDATA : DATA(0)
    A:
    a   DS  2
    b   DS  1
    c   DS  2
        ORG 0
    d   DS  1
    e   DS  2
    f   DS  1
    
    теперь
      LDI R30, LOW(A)
      LDI R31, HIGH(A)
      LD  R16, Z+ (a - A) + 0
      LD  R17, Z+ (a - A) + 1
      LD  R18, Z+ (b - A)
А у гнутого асма .org работает иначе, им нельзя сдвинуть location counter назад и как мне организовать что-то эквивалентное - не могу придумать. Делать
Код
A:
      .skip 4,0
      .set  a, A + 0
      .set  b, a + 2
      .set  c, b + 1
      .set  d, A + 0
      .set  e, d + 1
      .set  f, e + 2
не хочется, ибо и размеры переменных неочевидны и нет автоматического резервирования места (если добавить переменную и забыть исправить .skip - будут неприятности). Возможно есть все же какое-то красивое решение?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 14:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01337 секунд с 7
ELECTRONIX ©2004-2016