Скачал я набор компилятора GCC 4.1 с проекта GNUARM (http://www.gnuarm.com/)
Базовые файлы нашёл на at91.com:
http://www.at91.com/www/phpBB2_mirror/download.php4?id=211
И скомпилил протенький приерчик (мигает свтодиодом, под 91SAM7S128)
... инклуды и всё такое
#define SPEED (MCKKHz/10)
unsigned int LedSpeed = SPEED *50;
void wait ( void )
{
unsigned int waiting_time ;
change_speed () ;
for(waiting_time = 0; waiting_time < LedSpeed; waiting_time++) ;
}
int main()
{
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;
AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, LED2 ) ;
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED2 ) ;
for (;;) {
AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED2) ;
wait();
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED2 ) ;
wait();
wait();
}
}
всё прошло хорошо на на этапе генерации бинарника
arm-elf-objcopy --output-target=binary a.out BasicGNU.bin
он из a.out (71кб) сгенерил бинарник на 2mb + 4bytes!!!
открыв в hex редакторе увидил что первые ~900 байт ненулевые далее идут 0 и по смечению 2mb записано чило, очень похожее на SPEED *50.
Объявив эту переменную просто глобально, без инициализации, и проделав инициализацую в mian бинарник стал 924байта, успешно залился и на платке мигает диод..
На IAR первоначальный код генерирует нормальный бинарник.
Может кто-то работал с GNUARM и знает в чём дело? (даже если кто-то и не работа, всё равно интересно мнения =)