CODE
void main(void) {
volatile unsigned int *ram = (unsigned int*) 0x80000000;
unsigned int i, j, data, sh, a, tmp;
volatile unsigned int *wdt = (unsigned int*) 0x48314030;
(*(volatile int*)0x4831402C) = 0; // WDT reload value
a = 1;
data=0x12345678;
do {
ram[a] = data;
a = 0x3FFFFFF & ((a << 1) | (1 & ((a >> 25) ^ (a >> 24) ^ (a >> 6) ^ (a >> 2))));
data = ((data << 1) | (1 & ((data >> 31) ^ (data >> 28) ^ (data >> 5) ^ (data >> 3))));
*wdt = ~*wdt;
} while (a!=1);
a = 1;
data=0x12345678;
do {
tmp = ram[a];
if (data != tmp) while (1) { *wdt = ~*wdt; };
a = 0x3FFFFFF & ((a << 1) | (1 & ((a >> 25) ^ (a >> 24) ^ (a >> 6) ^ (a >> 2))));
data = ((data << 1) | (1 & ((data >> 31) ^ (data >> 28) ^ (data >> 5) ^ (data >> 3))));
*wdt = ~*wdt;
} while (a!=1);
for (j=0; j<7; j++) {
for (i=0; i<67108864; i++) {
sh = ((i^j) & 3) << 3;
data = (i << sh) | (i >> (32-sh));
if (j & 4) data = ~data;
a = (i >> 16) | ((i & 0xFFFF) << 10);
ram[a] = data;
*wdt = ~*wdt;
}
for (i=0; i<67108864; i++) {
sh = ((i^j) & 3) << 3;
data = (i << sh) | (i >> (32-sh));
if (j & 4) data = ~data;
a = (i >> 16) | ((i & 0xFFFF) << 10);
tmp = ram[a];
if (tmp != data)
while (1) { *wdt = ~*wdt; };
*wdt = ~*wdt;
}
}
}
Если компилюсь в дебаге, или с -O 1, то все ОК, и даже работает. А если включаю оптимизацию -O 2 или 3, то начинают лететь ошибки типа
Код
..........
"C:\DOCUME~1\s-markov\LOCALS~1\Temp\0518810", ERROR! at line 191:
[E0200]
Offset out of range, must be [-4095,4095]
STR A3, [A4, #-2147483648]; |17|
"C:\DOCUME~1\s-markov\LOCALS~1\Temp\0518810", ERROR! at line 234:
[E0200]
Offset out of range, must be [-4095,4095]
LDR A3, [A3, #-2147483648]; |28|
........
"C:\DOCUME~1\s-markov\LOCALS~1\Temp\0518810", ERROR! at line 191:
[E0200]
Offset out of range, must be [-4095,4095]
STR A3, [A4, #-2147483648]; |17|
"C:\DOCUME~1\s-markov\LOCALS~1\Temp\0518810", ERROR! at line 234:
[E0200]
Offset out of range, must be [-4095,4095]
LDR A3, [A3, #-2147483648]; |28|
........
Чтобы это значило? CCS v4.2.1.00004, code generation tools пробовал 4.6.1, 4.6.3 и 4.6.4, опция выбора проца "-mv7A8".
.... c этим сразу в техподдержку? Если кто-то еще кроме меня компилирует этими компиляторами, проверьте плиз, может у меня глюк какой-то локальный из-за установленных десяти разных композеров?