|
STM32 Bootloader |
|
|
|
Apr 28 2016, 06:03
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Я написал отдельную программу - бутлоадер. Чтоб разместить ее во флеш нужно изменить стартап файл и линкер файл. и тут у меня трудности. может кто нибудь рассказать как это делать? под бутлоадер я хочу отвести первые две страницы. линкер и стартап в принципе изменять не надо. насчет главной программы. в линкере заменил Код MEMORY { FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K } На Код MEMORY { FLASH (rx) : ORIGIN = 0x08001000, LENGTH = 1024K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K MEMORY_B1 (rx) : ORIGIN = 0x60000000, LENGTH = 0K CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K } и в system_stm32f30x.c заменил Код #define VECT_TAB_OFFSET 0x0 На Код #define VECT_TAB_OFFSET 0x1000 а что еще надо поменять?
|
|
|
|
|
 |
Ответов
|
Apr 28 2016, 06:17
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (Jenya7 @ Apr 28 2016, 09:03)  CODE FLASH (rx) : ORIGIN = 0x08001000, LENGTH = 1024K Вы уехали за границу доступной памяти. Осетра-то урежте  , в смысле LENGTH укоротите на размер загрузчика. И в загрузчике аналогично, чтобы получить ошибку если он вдруг налезет на приложение. QUOTE (Jenya7 @ Apr 28 2016, 09:03)  а что еще надо поменять? Зависит от того, что и как вы наворотили в загрузчике. У меня линкер сразу после векторов добавляет размер прошивки в словах (чтобы загрузчик знал, до куда считать CRC), а также резервируется место под CRC.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Apr 28 2016, 06:42
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(Сергей Борщ @ Apr 28 2016, 12:17)  Вы уехали за границу доступной памяти. Осетра-то урежте  , в смысле LENGTH укоротите на размер загрузчика. И в загрузчике аналогично, чтобы получить ошибку если он вдруг налезет на приложение. Зависит от того, что и как вы наворотили в загрузчике. У меня линкер сразу после векторов добавляет размер прошивки в словах (чтобы загрузчик знал, до куда считать CRC), а также резервируется место под CRC. спасибо. укоротил. вроде бежит главная программа но как то странно. запускаю через дебагер – пишет no source file named main.c. и через 30 секунд - это у меня таймаут в бутлоудере - бежит главная программа. добавил в Startup Script Код # Reconfigure vector table offset register to match the application location set *0xe000ed08 = 0x1000
# Get the application stack pointer (First entry in the application vector table) set $sp = *(unsigned int*)0x1000
# Get the application entry point (Second entry in the application vector table) set $pc = *(unsigned int*)0x1004 ничего не изменилось. кстати а как линкер знает размер прошивки? Вы его изменяете после каждой копиляции? вроде решил проблему. вот полный код скрипта. Код # Set flash parallelism mode to 32, 16, or 8 bit when using STM32 F2/F4 microcontrollers # Uncomment next line, 2=32 bit, 1=16 bit and 0=8 bit parallelism mode #monitor flash set_parallelism_mode 2
# Set character encoding set host-charset CP1252 set target-charset CP1252
# Reset to known state monitor reset
# Load the program executable load
# Reconfigure vector table offset register to match the application location set *0xe000ed08 = 0x1000
# Get the application stack pointer (First entry in the application vector table) set $sp = *(unsigned int*)0x1000
# Get the application entry point (Second entry in the application vector table) set $pc = *(unsigned int*)0x1004
# Reset the chip to get to a known state. Remove "monitor reset" command # if the code is not located at default address and does not run by reset. #monitor reset
# Enable Debug connection in low power modes (DBGMCU->CR) set *0xE0042004 = (*0xE0042004) | 0x7
# Set a breakpoint at main(). tbreak main
# Run to the breakpoint. continue
Сообщение отредактировал Jenya7 - Apr 28 2016, 08:11
|
|
|
|
|
Apr 28 2016, 10:50
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (Jenya7 @ Apr 28 2016, 09:42)  кстати а как линкер знает размер прошивки? Он же сам ее собрал, кто же лучше него может знать? CODE .text : { _image_start = .; KEEP(*(.isr_vector))
LONG((_image_end - _image_start) / 4); /* application size, in 4-byte words */ ............. /* после всех text, romem и data: */ .text.crc : { . = . + 4; /* reserve space for CRC */ _image_end = .; } > TEXT
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Apr 28 2016, 15:50
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(Сергей Борщ @ Apr 28 2016, 15:50)  Он же сам ее собрал, кто же лучше него может знать? Код .text : { _image_start = .; KEEP(*(.isr_vector))
LONG((_image_end - _image_start) / 4); /* application size, in 4-byte words */ ............. /* после всех text, romem и data: */ .text.crc : { . = . + 4; /* reserve space for CRC */ _image_end = .; } > TEXT А у меня в линкере этого нет LONG((_image_end - _image_start) / 4); Вы сами добавили?
|
|
|
|
Сообщений в этой теме
Jenya7 STM32 Bootloader Apr 28 2016, 06:03    AleksBak Цитата(Jenya7 @ Apr 28 2016, 19:50) А у м... Apr 28 2016, 17:30     Jenya7 Цитата(AleksBak @ Apr 28 2016, 23:30) При... Apr 29 2016, 09:42      Сергей Борщ QUOTE (Jenya7 @ Apr 29 2016, 12:42) а как... Apr 29 2016, 10:04       Jenya7 Цитата(Сергей Борщ @ Apr 29 2016, 15:04) ... Apr 29 2016, 10:33 Jenya7 еще такой вопрос хотел задать.
мне надо принять по... May 2 2016, 06:48 AleksBak Цитата(Jenya7 @ May 2 2016, 10:48) еще та... May 2 2016, 07:15  Jenya7 Цитата(AleksBak @ May 2 2016, 13:15) А за... May 2 2016, 08:08
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|