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