Так происходит когда смещение меньше 0.
Вот где это получается:
CODE
#include "io430.h"
float float_1;
float float_2;
typedef struct
{
short data[1000];
float coefficient[40];
} My_struct;
My_struct sA;
unsigned char channel;
float float_tmp[4];
int main( void )
{
channel = 0;
sA.coefficient[channel + 10] = float_tmp[0]; // <<<<<<<<
while(1);
}
где sA.coefficient[channel + 10] = float_tmp[0];
в ассемблере выглядит так:
\ 000006 ....5E42.... MOVX.B &channel, R14
\ 00000C 4E4E MOV.B R14, R14
\ 00000E 3E500A00 ADD.W #0xa, R14
\ 000012 3EE00080 XOR.W #0x8000, R14
\ 000016 4E06 RLAM.A #0x2, R14
\ 000018 ....9E42.... MOVX.W &float_tmp, sA - 129072(R14)
\ ....
\ 000020 ....9E42.... MOVX.W &float_tmp + 2, sA - 129070(R14)
\ ....
Явно "sA - 129072(R14)" выглядит странновато.
И это только при настройке в IAR Data model=Large, при котором можно использовать более 64k ram.