|
Самозагрузчик |
|
|
|
 |
Ответов
|
Apr 12 2016, 12:44
|
Знающий
   
Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748

|
Сделал, но чего то не получается запустить основную программу в чем может быть проблема? утилитой ST Link проверяю - файл записался и лежит правильно в памяти Загрузчик у меня такой: CODE #define FILE_NAME "loader.bin" #define APP_ADDRESS (uint32_t)0x08008000
do { /* Монтируем. Если нет файла - выходим на загрузку */ if ((rc = f_mount(0, &fatfs)) == 0) { PRINTF("INFO: mount OK\r\n"); } else { PRINTF("ERROR: mount fs\n"); break; }
/* Открыть на чтение */ rc = f_open(&fil, FILE_NAME, FA_READ); if (rc == 0) { PRINTF("INFO: Loader file %s open OK\n", FILE_NAME); } else { PRINTF("INFO: Loader file %s doesn't exist. Continue booting", FILE_NAME); break; }
/* стираем секторы 2...4*/ FLASH_Unlock(); delay_ms(50);
if(FLASH_COMPLETE == FLASH_EraseSector(FLASH_Sector_2, VoltageRange_3)) { PRINTF("Erase sector OK\n"); led_toggle(LED3); } if(FLASH_COMPLETE == FLASH_EraseSector(FLASH_Sector_3, VoltageRange_3)) { PRINTF("Erase sector OK\n"); led_toggle(LED3); }
if(FLASH_COMPLETE == FLASH_EraseSector(FLASH_Sector_4, VoltageRange_3)) { PRINTF("Erase sector OK\n"); led_toggle(LED3); }
/* Читаем файл и записываем в секторы flash */ bytes = 0; addr = APP_ADDRESS; do { bw = 0; rc = f_read(&fil, buf, sizeof(buf), &bw); if (rc == 0 && bw > 0) { bytes += bw; for(i = 0; i < bw; i++) { FLASH_ProgramByte(addr, buf[i]); addr++; } PRINTF("%d bytes written\n", bytes); led_toggle(LED4); delay_ms(50); } } while (bw);
rc = f_close(&fil); // Стираем файл /* Если файл существует - удалим его */ // rc = f_unlink(FILE_NAME); } while (0);
/* Disable all interrupts */ RCC->CIR = 0x00000000; /* Делаем старт по адресу */ JumpAddr = *(__IO uint32_t*) (APP_ADDRESS + 4); Jump_To_App = (pFunction) JumpAddr;
/* Initialize application's Stack Pointer */ __set_MSP(*(__IO uint32_t*) APP_ADDRESS); Jump_To_App();
Я вижу отладчиком, что до джампа он доходит - а дальше аут основная прога использует такой скрипт линкера, где установлены адреса: define symbol __ICFEDIT_intvec_start__ = 0x08008000; define symbol __ICFEDIT_region_ROM_start__ = 0x08008000; + сделал коментарий в вызове из ассемблера SystenInit() - так это уже сделано в загрузчике компилю образ проги и получаю бинарник program.binCODE ;Reset_Handler
; LDR R0, =SystemInit ; BLX R0 LDR R0, =__iar_program_start BX R0
В чем может быть еще засада?
|
|
|
|
|
Apr 12 2016, 14:26
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(inventor @ Apr 12 2016, 15:44)  Код /* Disable all interrupts */ RCC->CIR = 0x00000000; /* Делаем старт по адресу */ JumpAddr = *(__IO uint32_t*) (APP_ADDRESS + 4); Jump_To_App = (pFunction) JumpAddr;
/* Initialize application's Stack Pointer */ __set_MSP(*(__IO uint32_t*) APP_ADDRESS); Jump_To_App(); Так делать некорректно! Во первых не устанавливается новый адрес таблицы векторов ( VTOR ) Во вторых указатель стека будет модифицирован и не будет соответствовать тому что лежит по APP_ADDRESS И если хотите отлаживать приложение без бутлоадера (если это разные проекты) то надо у IAR в макросах установить запись VTOR - тогда можно без проблем отлаживать.
|
|
|
|
|
Apr 12 2016, 14:49
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(KRS @ Apr 12 2016, 17:26)  Во первых не устанавливается новый адрес таблицы векторов ( VTOR ) По-моему, это все же дело приложения, а не загрузчика. Цитата(KRS @ Apr 12 2016, 17:26)  Во вторых указатель стека будет модифицирован и не будет соответствовать тому что лежит по APP_ADDRESS Где?
|
|
|
|
Сообщений в этой теме
inventor Самозагрузчик Apr 7 2016, 06:34 KRS Цитата(inventor @ Apr 7 2016, 09:34) посл... Apr 7 2016, 06:51 inventor Цитата(KRS @ Apr 7 2016, 10:51) Самый луч... Apr 7 2016, 07:05  Непомнящий Евгений Цитата(inventor @ Apr 7 2016, 10:05) у ме... Apr 7 2016, 07:11   inventor то есть я делаю в файле линкера для прошивки испра... Apr 7 2016, 07:46    KRS Цитата(inventor @ Apr 7 2016, 10:46) верн... Apr 7 2016, 08:09 jcxz Цитата(inventor @ Apr 7 2016, 12:34) саму... Apr 7 2016, 08:07 inventor Цитата(jcxz @ Apr 7 2016, 11:07) В 0x1000... Apr 7 2016, 10:13 KnightIgor Цитата(inventor @ Apr 7 2016, 07:34) имее... Apr 7 2016, 13:54 x893 Цитата(KnightIgor @ Apr 7 2016, 16:54) У ... Apr 7 2016, 20:01  KnightIgor Цитата(x893 @ Apr 7 2016, 21:01) Вот бы е... Apr 8 2016, 09:26 kolobok0 Цитата(KnightIgor @ Apr 7 2016, 16:54) У ... Apr 7 2016, 21:06  Непомнящий Евгений Цитата(kolobok0 @ Apr 8 2016, 00:06) в св... Apr 8 2016, 05:37   kolobok0 Цитата(Непомнящий Евгений @ Apr 8 2016, 08... Apr 8 2016, 14:07    Kabdim Цитата(kolobok0 @ Apr 8 2016, 17:07) - за... Apr 12 2016, 13:11     kolobok0 Цитата(Kabdim @ Apr 12 2016, 16:11) А вот... Apr 12 2016, 14:26 romas2010 Цитата(inventor @ Apr 7 2016, 09:34) Подс... Apr 7 2016, 15:07 bugdesigner Вот мой скелет бутлоадераю Выделено под него 16К ф... Apr 8 2016, 09:55 scifi Цитата(inventor @ Apr 12 2016, 15:44) Я в... Apr 12 2016, 12:52  inventor Цитата(scifi @ Apr 12 2016, 15:52) А попо... Apr 12 2016, 13:12   scifi Цитата(inventor @ Apr 12 2016, 16:12) ток... Apr 12 2016, 13:37   scifi Цитата(aaarrr @ Apr 12 2016, 17:49) Где?
... Apr 12 2016, 15:03    zltigo QUOTE (scifi @ Apr 12 2016, 18:03) Ассемб... Apr 13 2016, 08:03     scifi Цитата(zltigo @ Apr 13 2016, 11:03) Ассем... Apr 13 2016, 08:10      KnightIgor Цитата(scifi @ Apr 13 2016, 09:10) Я ж не... Apr 13 2016, 09:00       scifi Цитата(KnightIgor @ Apr 13 2016, 12:00) О... Apr 13 2016, 09:41        zltigo QUOTE (scifi @ Apr 13 2016, 12:41) А, ну ... Apr 13 2016, 09:47         scifi Цитата(zltigo @ Apr 13 2016, 12:47) В дан... Apr 13 2016, 09:50          zltigo QUOTE (scifi @ Apr 13 2016, 12:50) Вы сво... Apr 13 2016, 10:03           scifi Цитата(zltigo @ Apr 13 2016, 13:03) Абсол... Apr 13 2016, 10:14          Сергей Борщ QUOTE (scifi @ Apr 13 2016, 11:50) Все уж... Apr 13 2016, 11:14    aaarrr Цитата(KRS @ Apr 12 2016, 18:41) Нет - за... Apr 12 2016, 16:49     scifi Цитата(aaarrr @ Apr 12 2016, 19:49) А я -... Apr 13 2016, 06:59 inventor Сделал самозагрузчик,
забыл вызвать функцию NVIC_... Apr 13 2016, 06:49 KnightIgor Цитата(inventor @ Apr 13 2016, 07:49) вот... Apr 13 2016, 07:54 ViKo Коль все предъявили, тогда и я...:
Код/* Адрес ... Apr 13 2016, 10:21 scifi Цитата(ViKo @ Apr 13 2016, 13:21) Коль вс... Apr 13 2016, 10:35  ViKo Цитата(scifi @ Apr 13 2016, 13:35) Выше б... Apr 13 2016, 10:43  aaarrr Цитата(scifi @ Apr 13 2016, 13:35) Выше б... Apr 13 2016, 16:28 inventor В догонку.
все работает, загрузчик загружает, с од... Apr 22 2016, 18:59 scifi Цитата(inventor @ Apr 22 2016, 21:59) есл... Apr 22 2016, 19:13
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|