Заливка прошивки в ОЗУ STM32 для отладки

Кто любит RISC в жизни, заходим, не стесняемся.
DENIS451
Прорезались зубы
Сообщения: 213
Зарегистрирован: Вт сен 09, 2008 18:17:27

Заливка прошивки в ОЗУ STM32 для отладки

Сообщение DENIS451 »

Кто пробовал заливать прошивку в ОЗУ чипов STM32 для экономии ресурса флэша, какие результаты?

Например, присматриваюсь к чипу STM32F105RBT6, там 64k оперативки - больше чем бесплатный лимит Keil.

Интересует мнение людей кто реально пробовал так делать, насколько это сложно сделать для ST-link v2 +
Keil 5.26?
Реклама
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение Мурик »

DENIS451 писал(а):STM32F105RBT6
USB хост нужен? Если нет, лучше взять STM32F103RET6.
Или STM32F407VGT6. Оперативки в нем 192 КБ.
Реклама
Аватара пользователя
AndTer
Поставщик валерьянки для Кота
Сообщения: 2406
Зарегистрирован: Ср фев 23, 2011 12:12:31

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение AndTer »

[uquote="Мурик",url="/forum/viewtopic.php?p=3517510#p3517510"]лучше взять[/uquote]
Ты забыл ещё написать, что взять какой то там битц. Ты везде это предлагаешь, даже когда вопрос про мигалку на аттини.

Но ничего что ТС хочет(перехочет) просто сэкономить ресурс флеша(как будто его мало) и заодно обойти ограничение бесплатного использования кейла в 32кб флеша(как будто нет других способов).
Спрашивает как сделать.
Глупый не задает вопросы. Глупый и так все знает.
DENIS451
Прорезались зубы
Сообщения: 213
Зарегистрирован: Вт сен 09, 2008 18:17:27

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение DENIS451 »

Я пока не придумал, куда девать 64k памяти прошивки, а просто так покупать -
в Чип-и-Дип
STM32F103RET6 - 300р.
STM32F407VGT6 - 620p.
дорого!
Реклама
Эиком - электронные компоненты и радиодетали
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение Reflector »

[uquote="DENIS451",url="/forum/viewtopic.php?p=3517535#p3517535"]STM32F103RET6 - 300р.[/uquote]
STM32F103RCT6 на ebay по $1.85, реально там тоже 64K RAM.
Реклама
DENIS451
Прорезались зубы
Сообщения: 213
Зарегистрирован: Вт сен 09, 2008 18:17:27

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение DENIS451 »

Насчёт Keil вы не поняли, я не ради этого делаю, и таким методом обойти ограничение всё равно не получиться!

Просто я осознал, что отладка заливкой в ресурсоограниченый флэш меня неприемлемо нервирует, и доводы типа
можно 2 года заливать по 14 раз в день не помогают!
Реклама
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение a5021 »

Серьезные проблемы у вас явно не технического характера.
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение 240265 »

:)))
IVL ex UA6PJ
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение VladislavS »

[uquote="DENIS451",url="/forum/viewtopic.php?p=3517438#p3517438"]Кто пробовал заливать прошивку в ОЗУ чипов STM32 для экономии ресурса флэша, какие результаты?[/uquote]Постоянно так делаю. Не для экономии флэшь, конечно же. Ветка debug в SRAM, а release во флэшь. Главное VTOR не забыть перенастроить (на cortex-m0 ремап сделать). Из подводных камней - скорость работы кода из SRAM отличается от работы из FLASH. А так, что-то быстро попробовать не убивая прошивку чипа - самое то.
Аватара пользователя
AlanDrakes
Прорезались зубы
Сообщения: 236
Зарегистрирован: Пн июл 04, 2016 16:51:22
Откуда: Россия, Омск

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение AlanDrakes »

Не совсем из Keil'а, но тем не менее, успешно работает.
Разве что в linux системах проще собрать проект через Makefile, или подсунуть его же в Eclipse для сборки.
Программирование - через утилиту st-flash. Загрузка почти мгновенная (во всяком случае, проект на 50+кБ кода загружается в RAM очень быстро).
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение Z_h_e »

DENIS451 писал(а):Кто пробовал заливать прошивку в ОЗУ чипов STM32 для экономии ресурса флэша, какие результаты?
В опициях таргета.
1. Target - выделить под флеш ОЗУ, например первую пловину и само собой тогда откусить размер RAM
2. На закладке LINKER сделать тоже самое, т.е. указать базовые новые адреса или создать свой скаттер-файл.
3. Создать ini файл
Спойлер

Код: Выделить всё

/*----------------------------------------------------------------------------
 * Name:    Dbg_RAM.ini
 * Purpose: RAM Debug Initialization File
 * Note(s):
 *----------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------
  Setup()  configure PC & SP for RAM Debug
 *----------------------------------------------------------------------------*/
FUNC void Setup (void) {
  SP = _RDWORD(0x20000000);          // Setup Stack Pointer
  PC = _RDWORD(0x20000004);          // Setup Program Counter
  _WDWORD(0xE000ED08, 0x20000000);   // Setup Vector Table Offset Register
}


load %L incremental

Setup();                             // Setup for Running

g, main
4. В закладке Debug подсунуть этот файл проггеру.
5. Там же нажимаем Setting
6. В закладке flash dnld добавляем программин алгоритм и правим у него адреса.
7. И там же указываем область ОЗУ RAM for algoritm например 0x20002800 0x2800 , т.е. область где нет программы.

Не забываем перенести вектора, но для пробы с банальнейшим кодом можно и этого не делать, если не используются прерывания и не делить на ноль ;).

У меня так работает, но такое ощущение не совсем корректно, например если нажать RESET что в IDE, что на реальном на МК, светодиод уже "не мигает". Типа второй раз прошивка не запускается в ОЗУ. Или где-то что-то не допонял или одно из двух.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение Myp3ik »

[uquote="DENIS451",url="/forum/viewtopic.php?p=3517438#p3517438"]там 64k оперативки - больше чем бесплатный лимит Keil.[/uquote]

Этот недуг излечим :)))
Иван Сусанин - первый полупроводник :solder:
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение Z_h_e »

Myp3ik писал(а):Этот недуг излечим
У меня анттивирус, собака такая, кейген дезитегрировал куда-то :)
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение VladislavS »

[uquote="Z_h_e",url="/forum/viewtopic.php?p=3517768#p3517768"]1. Target - выделить под флеш ОЗУ, например первую пловину и само собой тогда откусить размер RAM[/uquote]Зачем? У тебя есть один кусок памяти SRAM, просто скажи линкеру, что всё надо размешать в нём. Он всё сам сделает. Дальше. Когда у тебя классическая схема со стартом из FLASH, то глобальные инициализированные переменные инициализируются копированием из FLASH в RAM. Если у тебя всё в RAM, то копия этих данных не нужна, ты просто экономишь в размере прошивки, которая в SRAM и так лезет впритык.

Достаточно правильный скрипт линкера сделать
СпойлерВот классический скрипт линкера IAR для FLASH

Код: Выделить всё

define symbol __ICFEDIT_intvec_start__ = 0x08000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__   = 0x08000000;
define symbol __ICFEDIT_region_ROM_end__     = 0x0801FFFF;
define symbol __ICFEDIT_region_RAM_start__   = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__     = 0x20004FFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__   = 0x400;
define symbol __ICFEDIT_size_heap__     = 0x000;

define memory mem with size = 4G;
define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

place in ROM_region   { readonly };
place in RAM_region   { readwrite, block CSTACK, block HEAP };
А вот он же для SRAM

Код: Выделить всё

define symbol __ICFEDIT_intvec_start__ = 0x20000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__   = 0x08000000;
define symbol __ICFEDIT_region_ROM_end__     = 0x0801FFFF;
define symbol __ICFEDIT_region_RAM_start__   = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__     = 0x20004FFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__   = 0x400;
define symbol __ICFEDIT_size_heap__     = 0x000;

define memory mem with size = 4G;
//define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

//initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

place in RAM_region   { readonly, readwrite, block CSTACK, block HEAP };
Как говорится, найди 10 отличий. У других линкеров язык скриптов отличается, но смысл от этого не меняется.
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3517768#p3517768"]У меня так работает[/uquote]Как-то перемудрено.

[uquote="Z_h_e",url="/forum/viewtopic.php?p=3517768#p3517768"]например если нажать RESET что в IDE, что на реальном на МК, светодиод уже "не мигает".[/uquote]Ну а что бы ему мигать, если проц с FLASH стартует?
Последний раз редактировалось VladislavS Вс дек 02, 2018 13:07:48, всего редактировалось 1 раз.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение Z_h_e »

VladislavS писал(а):проц с FLASH стартует?
Нет.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение dosikus »

[uquote="Z_h_e",url="/forum/viewtopic.php?p=3517791#p3517791"]
Myp3ik писал(а):Этот недуг излечим
У меня анттивирус, собака такая, кейген дезитегрировал куда-то :)[/uquote]
Сообщи CID завтра сгенерю. И весьма странно дрвеб не ругаеться на кейген, хотя это еще тот параноик.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение Z_h_e »

dosikus писал(а):Сообщи CID завтра сгенерю.
Спасибо, не надо. Скачать не проблема вроде. Я так, поболтать... Если вдруг не найду при необходимости, обращусь.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
MikhailSh
Родился
Сообщения: 6
Зарегистрирован: Вт авг 02, 2016 22:21:42

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение MikhailSh »

DENIS451
Прорезались зубы
Сообщения: 213
Зарегистрирован: Вт сен 09, 2008 18:17:27

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение DENIS451 »

Спасибо за ответы, закажу STM32F105RBT6, дождусь с али макетные платы, попробую применить на практике.
Этот недуг излечим
Я знаю, лекарство от Keil 5.24a подходит для 5.26 :wink:

Я кстати, придумал ещё один повод научится отлаживать код в оперативке - можно же ведь забацать проект который загружает
c SDHC карточки хексы в память, и передаёт им управление.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Заливка прошивки в ОЗУ STM32 для отладки

Сообщение Мурик »

AndTer писал(а):Ты забыл ещё написать, что взять какой то там битц.
В теме пишут не про него, но он поддерживает отладку в ОЗУ.
СпойлерИзображение
DENIS451 писал(а):Я пока не придумал, куда девать 64k памяти прошивки, а просто так покупать -
в Чип-и-Дип
STM32F103RET6 - 300р.
В Китае стоит 115 рублей (1.7$). https://ru.aliexpress.com/item/1PCS-STM ... 93591.html
DENIS451 писал(а):забацать проект который загружает c SDHC карточки хексы в память
Отлаживать как собираетесь? Подключаясь к работающей программе?
Ответить

Вернуться в «ARM»