Цитата(k155la3 @ Jan 24 2017, 17:54)

(?) На сколько лучше-хуже для контроля границы индекса использовать операцию % ?
(для размеров буфера, кратных степени 2 можно использовать двоичную маску, это мы знаем. Но размеры заданы и не кратные 2).
Если таких операций - одна-две - то неважно как.
Но как правило операций контроля выхода индекса за пределы массива бывает очень много, тогда всё-же лучше писать оптимально.
Обычно на большинстве embedded-процессоров оптимальнее условный оператор if.
У меня обычно это выглядит так:
Код
#define ncell(m) (sizeof(m) / sizeof((m)[0])) //кол-во элементов массива m
int ix; //индекс
char buf[N];
if (--ix < 0) ix += ncell(buf);
На Cortex-M с оптимизацией как правило компилится в 3 команды.
На Classic-ARM - может быть всего 2 команды.
Да - как видно - оптимальнее декрементировать индекс. Хотя если хочется можно и в прямом направлении работать, с отрицательными индексами.
Так что даже вариант с размером кратным степени двойки и логическим AND в этом случае может быть не лучше.
Не помню уже как там на MSP430, но лучше можно сделать только на DSP где поддерживается аппаратная циклическая адресация - там вообще 0 команд будет.