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

 
 
> IAR 7.5 STM32, Ограничения в именах констант?
DmitryTDF
сообщение Jan 24 2017, 15:32
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 24-01-17
Пользователь №: 95 140



Здравствуйте!
Пишу для 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, то есть, правильное.

Если кто-то сталкивался с подобным - как боролись?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Эдди
сообщение Jan 24 2017, 19:15
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



У вас комментарий тоже в #define лезет, вот всякая кака и получается!
Go to the top of the page
 
+Quote Post
DmitryTDF
сообщение Jan 25 2017, 07:44
Сообщение #3





Группа: Новичок
Сообщений: 4
Регистрация: 24-01-17
Пользователь №: 95 140



Цитата(Эдди @ Jan 24 2017, 22:15) *
У вас комментарий тоже в #define лезет, вот всякая кака и получается!

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

Господа АНТОХА и Эдди, большое спасибо вам за наводки. Все заработало, причина была действительно в комментариях, расположенных в одной строке с именами и значениями констант. Препроцессор немного глючный, писать строки с комментариями нужно всегда перед строкой с константой, но в любом случае, не на одной строке, даже после точки с запятой.
UPD:
Проверил: также объявления корректно работают с комментариями, оформленными в C-style. Будьте внимательны:
Код
#define constX  Y<Y..>     //Комментарий

- будет работать корректно,
Код
#define constX  Y<Y..>;Комментарий

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

Сообщение отредактировал DmitryTDF - Jan 25 2017, 07:46
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 26th August 2025 - 04:57
Рейтинг@Mail.ru


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