j = i&MAX_LEN_CMD;
дальше работай только с j, не трогая i
Как я понимаю, обрабатывается кольцевой буфер размером двойка в степени N. А MAX_LEN_CMD нужно,чтобы не вылететь за его пределы.
Второй вариант (не факт что работает) - брать остаток от деления
i = i \ MAX_LEN_CMD;
или
i = i % MAX_LEN_CMD;
С IAR не работал - точно не знаю