Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Компилятор из Code Composer Studio и armv7
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
SM
Код (простенький тест памяти для первого запуска платы) :

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|
........


Чтобы это значило? CCS v4.2.1.00004, code generation tools пробовал 4.6.1, 4.6.3 и 4.6.4, опция выбора проца "-mv7A8".
.... c этим сразу в техподдержку? Если кто-то еще кроме меня компилирует этими компиляторами, проверьте плиз, может у меня глюк какой-то локальный из-за установленных десяти разных композеров?
MrAlex
Вместо: ram[a] = data;
писать *ram = ...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.