arm-gcc-none-eabi-gcc выбрасывает присвоение указателя со включенной оптимизацией
используется следующая функция:
SimpleBUSFrame_TypeDef* GetFrame (const uint8_t* buffer)
{
SimpleBUSFrame_TypeDef* frame;
frame = (SimpleBUSFrame_TypeDef*) buffer;
frame->DataFrame = buffer + sizeof(SimpleBUSFrameHeader_TypeDef);
frame->CRCFrame = *((uint16_t*)(frame->DataFrame+frame->FrameHeader.DataLength));
return frame;
}
При включенной оптимизации -Og, да и любой другой, кроме -O0, первое присвоение выкидывается:
GetFrame:
0800323c: adds r2, r0, #7
0800323e: str r2, [r0, #8]
73 frame->CRCFrame = *((uint16_t*)(frame->DataFrame+frame->FrameHeader.DataLength));
08003240: ldrb r1, [r0, #6]
08003242: ldrh r2, [r2, r1]
08003244: strh r2, [r0, #12]
При отключенной оптимизации все проходит, как и должно быть. В чем ошибка?