Столкнулся с проблемой оптимизации, при инкременте указателя когда 2 строчки подряд. Оптимизация макс. по скорости. IAR ARM 7.40.3. Мк STMF4
Код
static void _setup_resp_ready(uint8_t** ppData_rx, bool allow_addr, uint8_t** ppData_tx)
{
if(allow_addr != false)
*(*(volatile uint_setup_addr_t**)&(*ppData_tx))++ = setup_addr;
// !!! если NOP нет, то код будет оптимизирован
__ASM("NOP");
*((*ppData_tx)++) = *((*ppData_rx)++);
return;
}
Прим. uint_setup_addr_t - задаётся тип, на данный момент uint16_t
{
if(allow_addr != false)
*(*(volatile uint_setup_addr_t**)&(*ppData_tx))++ = setup_addr;
// !!! если NOP нет, то код будет оптимизирован
__ASM("NOP");
*((*ppData_tx)++) = *((*ppData_rx)++);
return;
}
Прим. uint_setup_addr_t - задаётся тип, на данный момент uint16_t
скрины ассемблера
без оптимизации

макс. оптимизация по скорости

макс. оптимизация по скорости + NOP

Вопрос, возможно ли сделать запись чтобы не оптимизировался инкремент указателя? NOP конечно не критичен, но костыль. Отключить оптимизацию только для ф-ции не рассматриваю, т.к. подобные записи оформил виде макросов и могут быть в разных участках кода