К сожалению, Firmware Package с сайта STM, я так и не смог запустить в IAR 5.40 (хотя в описании пакета сказано, что подходит версия IAR 5.40 or later...)
Но удалось найти в нете HEX файл с миганием светодиодов, а по нему определить - в чем было дело, и почему созданный и проверенный в IAR, ассемблерный файл не хочет работать самостоятельно на STM32VLDiscovery.
Оказалось, что при создании ассемблерного проекта IAR создает таблицу векторов, в которой ячейка вектора RESET содержит команду безусловного перехода "B main" - так принято в AT91SAMxxx например.
А должно быть (чтоб программа для Cortex запустилась) - абсолютный адрес перехода на старт программы "main", да еще и с младшим битом =1 (означает, что это вектор для режима THUMB).
Например, в созданном IAR BIN-файле:
Код
адрес: данные:
0x08000000 - 0xB800F000 ;начальное значение указателя стека SP
0x08000004 - 0xB800F000 ;вектор Reset содержит команду "B main"
0x08000008 - 0xxxxxxxxx ;здесь начало программы "main"
----------------------------------------------------------------------------------
а должно быть так:
0x08000000 - 0xB800F000 ;начальное значение указателя стека SP
0x08000004 - 0x08000009 ;вектор Reset содержит адрес начала программы "main", + установленный в 1 младший бит
0x08000008 - 0xxxxxxxxx ;здесь начало программы "main"
Если в таблице векторов должны быть еще адреса прерываний, то для Cortex M3 в этих векторах тоже должен быть указан абсолютный адрес подпрограммы обработчика прерывания, и установленный в 1 младший бит - чтоб процессор перешел в режим THUMB.
IAR 6.21 из ассемблера создает такой-же, не работающий самостоятельно файл прошивки, хотя успешно отлаживает и прошивает программу в Discovery...
Кстати, начальное значение указателя стека, тоже задается IAR-ом не по человечески - то копируется вектор RESET, то задается равным 0. Но из настроек "Linker/Config/Edit" все равно извлекать данные не хочет.
Сообщение отредактировал controller_m30 - Dec 30 2011, 23:22