У меня есть этот кусок кода C (для платформ MSP430, cl430
компилятор):
void function(uint8_t * x){
// This variable is defined in the linker file as "X_ADDR = 0xE000;"
extern uint32_t X_ADDR;
uint16_t i = 0;
uint16_t size = 10;
uint32_t dst_addr = (uint32_t) &X_ADDR;
for (i=0; i < size; i++){
*((uint8_t *) (dst_addr+i)) = *(x+i); // <-- This line shows the warning
}
Я понимаю, что это так, но вот где я, наверное, ошибаюсь:
*((uint8_t *) (dst_addr+i)) = *(x + i);
| | | |
V V V V
*((uint8_t *) (u32 + u16)) = *(u8*+u16);
*((uint8_t *) (u32)) = *(u8*);
*(u8*) = u8;
u8 = u8;
Эта платформа 16-разрядная, но она поддерживает расширенный режим адресации 20-разрядных.
Есть ли намеки на это? и как это сделать вместо этого? Заранее спасибо