реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> STM32. Свой загрузчик и прошивка через Mass storage
drozel
сообщение Oct 5 2015, 10:42
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650



А еще такой вот тупой вопрос:
правильно я понимаю, что вызовы функций в слинкованном коде не относительные и линкер, который собирает прошивку, заливаемую через такой бутлоадер, должен знать смещение? Не получится сделать один файл, который будет шиться как самостостоятельно, через программатор, так и с подобным бутлоадером по другому адресу?

Цитата(KnightIgor @ Oct 5 2015, 14:58) *
Именно так, собственно говоря, работает перепрошивка ST/Link'ов, которые там на всяких Discovery платах сидят.

У меня STM32F4discovery, ничего такого не видел, поясните?

Сообщение отредактировал drozel - Oct 5 2015, 10:44
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Oct 5 2015, 13:12
Сообщение #17


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(drozel @ Oct 5 2015, 11:42) *
Не получится сделать один файл, который будет шиться как самостостоятельно, через программатор, так и с подобным бутлоадером по другому адресу?

Без титанических усилий - вряд ли. В KEIL, например, есть опция трансляции с перемещаемым кодом, что на мысль наводит. Ни разу не пробовал, но предполагаю, что написать всю программу перемещаемой будет очень сложно: неясным остаются предкомпилированные С-шные библиотеки.

Цитата
У меня STM32F4discovery, ничего такого не видел, поясните?

Я специально ничего не делал, чтобы увидеть MassStorage-проявление, но наблюдал: когда новый драйвер решает актуализировать прошивку в ST/Link, он чего-то там делает, после чего РС характерно трезвонит по причине пересоединения USB устройств, и я подглядел, что появляется и через некоторое время снова пропадает Mass Storage.

Сообщение отредактировал KnightIgor - Oct 5 2015, 13:13
Go to the top of the page
 
+Quote Post
YAM
сообщение Oct 5 2015, 14:49
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 7-07-04
Из: Ukraine
Пользователь №: 291



Цитата(drozel @ Oct 5 2015, 13:42) *
А еще такой вот тупой вопрос:
правильно я понимаю, что вызовы функций в слинкованном коде не относительные и линкер, который собирает прошивку, заливаемую через такой бутлоадер, должен знать смещение? Не получится сделать один файл, который будет шиться как самостостоятельно, через программатор, так и с подобным бутлоадером по другому адресу?


Я все собираю в IAR-e, в workspace 2 проекта - boot и appl которые совершенно независимо компилируются.
Они имеют общий файл flash_config.h в котором задаются их адреса расположения...
Код
#ifndef _FLASH_CONFIG_H_
#define _FLASH_CONFIG_H_

#define BOOT_START_ADDR   0x08000000UL
#define BOOT_END_ADDR     0x08002FFFUL

#define DATA_START_ADDR   0x08003000UL
#define DATA_END_ADDR     0x080033FFUL

#define APPL_START_ADDR   0x08003400UL
#define APPL_END_ADDR     0x0800FFFFUL

#endif


Ну и общий файл описания назначения ног...
Отдельно на Builder-е написан собиратель прошивки в bin виде с подсчетом CRC загрузчика и приложения для программатора и в криптованом виде для загрузки через mass storage (только приложение).

DATA у меня для сохранения настроек и т.д.


--------------------
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Oct 5 2015, 18:36
Сообщение #19


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(drozel @ Oct 5 2015, 11:42) *
А еще такой вот тупой вопрос:

Присоединюсь к YAM в части, как собирается совместный проект загрузчика и приложения. Я делаю так же. Я бы даже так переформулировал: прикиньте к носу, сколько может занять загрузчик (по опыту в 16К можно вложиться), и размещайте приложение всегда с фиксированного адреса выше загрузчика. Этот адрес забейте и в загрузчик. Аминь, ибо распространяться на тему перемещения таблицы векторов я не буду.

Сообщение отредактировал KnightIgor - Oct 5 2015, 18:37
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Oct 5 2015, 21:34
Сообщение #20


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(drozel @ Oct 5 2015, 13:42) *
.. что вызовы функций в слинкованном коде не относительные и линкер...


Вы можете и в динамике связывать, что хотите по какому хотите закону без проблем. Только всю логику придётся в рукопашную делать
ну типа аля DLL

например удалённое перепрограммирование самой логики приёма по разным каналам, ведение версий, подъём именно рабочей копии - т.е. кирпич
получить вообще маловероятно. При этом ядро будет занимать код подъёма версии и обёртки над обработчиками прерываний.

Сообщение отредактировал kolobok0 - Oct 6 2015, 09:29
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 6 2015, 00:11
Сообщение #21


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(KnightIgor @ Oct 5 2015, 16:12) *
Без титанических усилий - вряд ли. В KEIL, например, есть опция трансляции с перемещаемым кодом, что на мысль наводит. Ни разу не пробовал, но предполагаю, что написать всю программу перемещаемой будет очень сложно: неясным остаются предкомпилированные С-шные библиотеки.

Титаническое - это оверлеи.
По остальным вариантам - можно компилить в секции с такими адресами, которых нет в железе.
а потом по разбору инструкций вычитать смещения рабочих относительно нерабочих


Цитата(drozel @ Oct 2 2015, 14:42) *
1) Нужна ФС. Или ее эмуляция. FATFS, которую STM поставляет с Cube занимает около 20кб флеша, что для загрузчика многовато. Хотя, можно и пережить

read only файлы - 6кб на libopencm3
эмулируется boot sector, корневой каталог и fat16
Go to the top of the page
 
+Quote Post
drozel
сообщение Oct 6 2015, 03:43
Сообщение #22


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650



Цитата(KnightIgor @ Oct 6 2015, 00:36) *
по опыту в 16К можно вложиться

С стшным HAL не уложишься - много весит USB. Еле до 20 ужал, выкинув отладочный UART.

Сообщение отредактировал drozel - Oct 6 2015, 03:46
Go to the top of the page
 
+Quote Post
YAM
сообщение Oct 6 2015, 09:44
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 7-07-04
Из: Ukraine
Пользователь №: 291



Что-то Вы плохо ужимаетесь, как я писал, под boot выделено 0x3000, т.е. 12288 байт.
Реально же он занимает:
9 030 bytes of readonly code memory
502 bytes of readonly data memory
5 614 bytes of readwrite data memory
т.е. всего 9532 байт... Остальное используется когда включаю отладку.
При включенной консольной отладке:
10 852 bytes of readonly code memory
484 bytes of readonly data memory
13 642 bytes of readwrite data memory
для boot в IAR максимальная оптимизация по размеру.

Пока приложение лезет в свой диапазон всегда максимальная по скорости.


--------------------
Go to the top of the page
 
+Quote Post
drozel
сообщение Oct 6 2015, 09:49
Сообщение #24


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650



Цитата(YAM @ Oct 6 2015, 15:44) *
как я писал

Как я понял, исходники Вы не выкладываете.
Какую библиотеку USB Вы используете?
Go to the top of the page
 
+Quote Post
YAM
сообщение Oct 6 2015, 09:56
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 7-07-04
Из: Ukraine
Пользователь №: 291



Цитата(drozel @ Oct 6 2015, 12:49) *
Как я понял, исходники Вы не выкладываете.
Какую библиотеку USB Вы используете?


Нет, не выкладываю.
USB библиотека: Mass_Storage из stm32_usb-fs-device_lib или stm32_f105-07_f2_f4_usb-host-device_lib на сайте st.com
если это можно назвать библиотекой.


--------------------
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 14th July 2025 - 09:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01472 секунд с 7
ELECTRONIX ©2004-2016