Перейти к содержанию
    

IAR 7.5 STM32

Здравствуйте!

Пишу для STM32F4xx некоторые фрагменты кода на ассемблере. При объявлении в подключаемом файле констант, заметил, что маски по ИЛИ не всегда работают. Например:

...
#define OBJECT_CLASS_PIPE 1 << 16;Класс объекта - канал сообщений
...
#define OBJECT_SUBCLASS_PIPE_BYTE 1 << 24;Субкласс объекта - канал, работающий с байтами
...
#define RE 1;Флаг, символизирующий о том, что буфер пуст
...

 

Использую в коде:

 

...
LDR R0,=OBJECT_CLASS_PIPE|OBJECT_SUBCLASS_PIPE_BYTE|RE
...

 

В отладчике, в результате выполнения инструкции, в R0 оказывается 0x00010000, а должно быть 0x01010001

 

При перестановке некоторых масок местами:

...
LDR R0,=RE|OBJECT_CLASS_PIPE|OBJECT_SUBCLASS_PIPE_BYTE
...

 

R0 становится равным 0x00010001, что уже немного лучше, нежели первый результат.

Также заметил, что в случае присвоения этим же константам имен "const1", "const2", "const3" - в регистре R0 оказывается значение 0x01010001, то есть, правильное.

 

Если кто-то сталкивался с подобным - как боролись?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас комментарии тоже попадают в define. Уберите их на другую строку.

Прошу прощения, получилось так, что убрал табуляции, расположенные перед точкой с запятой. На самом деле там есть отступ (в виде табуляций)

...
#define OBJECT_CLASS_PIPE 1 << 16              ;Класс объекта - канал сообщений
...

Изменено пользователем DmitryTDF

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я уже тоже поправил своё сообщение:)

Спасибо вам, сейчас попробую и напишу результат!

UPD:

Поместил значения в скобки:

...
#define  OBJECT_CLASS_PIPE   (1 << 16)    ;Класс объекта - канал сообщений
...

Результат не изменился. Подозреваю, что все же что-то с ограничениями, накладываемыми на имена констант (подчеркивания, "длинные" имена и пр.)

Изменено пользователем DmitryTDF

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Результат не изменился. Подозреваю, что все же что-то с ограничениями, накладываемыми на имена констант (подчеркивания, "длинные" имена и пр.)

Тогда всё же попробуйте убрать комментарии.

--

Почитал повнимательнее первоначальный вопрос. Если при смене имён вы получаете правильный результат, то дело наверное в них. То есть, ваша теория насчёт каких-то ограничений на имена, скорее всего, верна.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас комментарий тоже в #define лезет, вот всякая кака и получается!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас комментарий тоже в #define лезет, вот всякая кака и получается!

Комментарий отделен от определения табуляциями, в первом посте табуляции не скопировались, дело точно не в этом.

Пока промежуточным решением использую короткие имена констант, но это, безусловно, не лучший вариант.

 

Господа АНТОХА и Эдди, большое спасибо вам за наводки. Все заработало, причина была действительно в комментариях, расположенных в одной строке с именами и значениями констант. Препроцессор немного глючный, писать строки с комментариями нужно всегда перед строкой с константой, но в любом случае, не на одной строке, даже после точки с запятой.

UPD:

Проверил: также объявления корректно работают с комментариями, оформленными в C-style. Будьте внимательны:

#define constX  Y<Y..>     //Комментарий

- будет работать корректно,

#define constX  Y<Y..>;Комментарий

- не будет работать корректно.

Изменено пользователем DmitryTDF

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...