Цитата(SasaVitebsk @ Mar 12 2018, 20:19)

Странно. Использовал _REV16 и аналогичные и в KEIL и в IAR - не замечал никаких глюков. Оптимизация максимальная по скорости.
В кейле я сейчас не работаю. Проект был на старом месте работы. Как меняет IAR эти макросы - могу посмотреть, если хотите.
С IAR-ом незнаком, смотреть лучше в любом случае, если критично по скорости.
Цитата(Kabdim @ Mar 13 2018, 09:02)

1) UB, либо выход за пределы массива - 99%. Вообще 99% случаев когда говорят об ошибках в компиляторе на самом деле ошибка в исходниках.

UB - undefined behavior (неопределенное поведение?). Вполне возможно, что вы правы, приходится много работать с чужими исходными кодами, в которых может быть всё что угодно.
Утечка памяти и выход за пределы массива с нечётко объявленными границами, например.
Вот недавно пришлось скрестить C + C++ + ASM

Потому что часть исходников написаны на плюсах, с объявлением классов, а часть обработки звука на Асме

Цитата(картошка @ Mar 15 2018, 20:19)

Думаю, если вы используете микроконтроллер - значит используете периферию. Если периферию - значит возможно прерывания. Если прерывания - то не забывайте VOLATILE ставить где надо.

Я очень ревностно слежу за волатайлами, чтоб они были объявлены должным образом!
Все регистры периферии, порты ввода-выводи и переменные в обработчиках прерываний, использующиеся внаружу - всё volatile

Чтоб небыть голословным:
Дано: Keil uVision 5.16a. Более старшие не идут в WinXP. Версии компилеров: 5.06(build 20) и 5.05 upd.2 (build 169).
Оптмизация: -O3, -oTime (максимальная по скорости). Установка глобальная. В сорцах прочих прагм оптимизации нет.
Фрагмент кода:
Код
*pL++=(__REV16(G)&0xFF0000FF)|(R&0x00FF0000)|(B&0x0000FF00);
В листинге выглядит так:
Код
...
RRS r0,r0,r1
STR r0,[r4],#4
MOV r0,r11
BL __asm___6_main_c_NEXT____REV16
BFC r0,#8,#16
AND r1,r7,#0xff0000
ORRS r0,r0,r1
...
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___6_main_c_NEXT____REV16|
#line 129 "C:\\Keil_v5\\ARM\\CMSIS\\Include\\core_cmInstr.h"
|__asm___6_main_c_NEXT____REV16| PROC
#line 130
rev16 r0, r0
bx lr
ENDP
...
Смешно и грустно одовременно. Пришлось с-инлайнить самостоятельно.
Сообщение отредактировал __inline__ - Mar 21 2018, 00:31