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

 
 
 
Reply to this topicStart new topic
> 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
AHTOXA
сообщение Jan 24 2017, 15:37
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



В скобочки возьмите выражения в define.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
DmitryTDF
сообщение Jan 24 2017, 15:38
Сообщение #3





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



Цитата(AHTOXA @ Jan 24 2017, 18:37) *
У вас комментарии тоже попадают в define. Уберите их на другую строку.

Прошу прощения, получилось так, что убрал табуляции, расположенные перед точкой с запятой. На самом деле там есть отступ (в виде табуляций)
Код
...
#define OBJECT_CLASS_PIPE 1 << 16              ;Класс объекта - канал сообщений
...


Сообщение отредактировал DmitryTDF - Jan 24 2017, 15:40
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 24 2017, 15:40
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Я уже тоже поправил своё сообщениеsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
DmitryTDF
сообщение Jan 24 2017, 15:41
Сообщение #5





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



Цитата(AHTOXA @ Jan 24 2017, 18:40) *
Я уже тоже поправил своё сообщениеsm.gif

Спасибо вам, сейчас попробую и напишу результат!
UPD:
Поместил значения в скобки:
Код
...
#define  OBJECT_CLASS_PIPE   (1 << 16)    ;Класс объекта - канал сообщений
...

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

Сообщение отредактировал DmitryTDF - Jan 24 2017, 15:46
Go to the top of the page
 
+Quote Post
Lagman
сообщение Jan 24 2017, 15:53
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Проглядел, это asm
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 24 2017, 16:47
Сообщение #7


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(DmitryTDF @ Jan 24 2017, 20:41) *
Результат не изменился. Подозреваю, что все же что-то с ограничениями, накладываемыми на имена констант (подчеркивания, "длинные" имена и пр.)

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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Эдди
сообщение Jan 24 2017, 19:15
Сообщение #8


Знающий
****

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



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





Группа: Новичок
Сообщений: 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 Текстовая версия Сейчас: 15th June 2025 - 15:36
Рейтинг@Mail.ru


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