Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Сб дек 01, 2018 22:02:00

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

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

Интересует мнение людей кто реально пробовал так делать, насколько это сложно сделать для ST-link v2 +
Keil 5.26?

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

Сб дек 01, 2018 23:40:10

DENIS451 писал(а):STM32F105RBT6
USB хост нужен? Если нет, лучше взять STM32F103RET6.
Или STM32F407VGT6. Оперативки в нем 192 КБ.

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

Вс дек 02, 2018 00:08:40

лучше взять

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

Но ничего что ТС хочет(перехочет) просто сэкономить ресурс флеша(как будто его мало) и заодно обойти ограничение бесплатного использования кейла в 32кб флеша(как будто нет других способов).
Спрашивает как сделать.

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

Вс дек 02, 2018 00:12:59

Я пока не придумал, куда девать 64k памяти прошивки, а просто так покупать -
в Чип-и-Дип
STM32F103RET6 - 300р.
STM32F407VGT6 - 620p.
дорого!

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

Вс дек 02, 2018 00:16:18

STM32F103RET6 - 300р.

STM32F103RCT6 на ebay по $1.85, реально там тоже 64K RAM.

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

Вс дек 02, 2018 00:19:39

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

Просто я осознал, что отладка заливкой в ресурсоограниченый флэш меня неприемлемо нервирует, и доводы типа
можно 2 года заливать по 14 раз в день не помогают!

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

Вс дек 02, 2018 03:36:34

Серьезные проблемы у вас явно не технического характера.

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

Вс дек 02, 2018 05:25:09

:)))

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

Вс дек 02, 2018 05:50:35

Кто пробовал заливать прошивку в ОЗУ чипов STM32 для экономии ресурса флэша, какие результаты?
Постоянно так делаю. Не для экономии флэшь, конечно же. Ветка debug в SRAM, а release во флэшь. Главное VTOR не забыть перенастроить (на cortex-m0 ремап сделать). Из подводных камней - скорость работы кода из SRAM отличается от работы из FLASH. А так, что-то быстро попробовать не убивая прошивку чипа - самое то.

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

Вс дек 02, 2018 10:42:19

Не совсем из Keil'а, но тем не менее, успешно работает.
Разве что в linux системах проще собрать проект через Makefile, или подсунуть его же в Eclipse для сборки.
Программирование - через утилиту st-flash. Загрузка почти мгновенная (во всяком случае, проект на 50+кБ кода загружается в RAM очень быстро).

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

Вс дек 02, 2018 12:13:16

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, что на реальном на МК, светодиод уже "не мигает". Типа второй раз прошивка не запускается в ОЗУ. Или где-то что-то не допонял или одно из двух.

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

Вс дек 02, 2018 12:40:52

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


Этот недуг излечим :)))

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

Вс дек 02, 2018 12:45:19

Myp3ik писал(а):Этот недуг излечим
У меня анттивирус, собака такая, кейген дезитегрировал куда-то :)

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

Вс дек 02, 2018 13:04:19

1. Target - выделить под флеш ОЗУ, например первую пловину и само собой тогда откусить размер RAM
Зачем? У тебя есть один кусок памяти 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 отличий. У других линкеров язык скриптов отличается, но смысл от этого не меняется.

У меня так работает
Как-то перемудрено.

например если нажать RESET что в IDE, что на реальном на МК, светодиод уже "не мигает".
Ну а что бы ему мигать, если проц с FLASH стартует?
Последний раз редактировалось VladislavS Вс дек 02, 2018 13:07:48, всего редактировалось 1 раз.

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

Вс дек 02, 2018 13:06:45

VladislavS писал(а):проц с FLASH стартует?
Нет.

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

Вс дек 02, 2018 13:18:22

Myp3ik писал(а):Этот недуг излечим
У меня анттивирус, собака такая, кейген дезитегрировал куда-то :)

Сообщи CID завтра сгенерю. И весьма странно дрвеб не ругаеться на кейген, хотя это еще тот параноик.

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

Вс дек 02, 2018 13:23:50

dosikus писал(а):Сообщи CID завтра сгенерю.
Спасибо, не надо. Скачать не проблема вроде. Я так, поболтать... Если вдруг не найду при необходимости, обращусь.

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

Вс дек 02, 2018 16:28:29

Может чем поможет:
http://kazus.ru/forums/showthread.php?t ... %F3&page=4

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

Вс дек 02, 2018 17:09:36

Спасибо за ответы, закажу STM32F105RBT6, дождусь с али макетные платы, попробую применить на практике.

Этот недуг излечим

Я знаю, лекарство от Keil 5.24a подходит для 5.26 :wink:

Я кстати, придумал ещё один повод научится отлаживать код в оперативке - можно же ведь забацать проект который загружает
c SDHC карточки хексы в память, и передаёт им управление.

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

Вс дек 02, 2018 17:19:35

AndTer писал(а):Ты забыл ещё написать, что взять какой то там битц.
В теме пишут не про него, но он поддерживает отладку в ОЗУ.
СпойлерИзображение

DENIS451 писал(а):Я пока не придумал, куда девать 64k памяти прошивки, а просто так покупать -
в Чип-и-Дип
STM32F103RET6 - 300р.
В Китае стоит 115 рублей (1.7$). https://ru.aliexpress.com/item/1PCS-STM ... 93591.html

DENIS451 писал(а):забацать проект который загружает c SDHC карточки хексы в память
Отлаживать как собираетесь? Подключаясь к работающей программе?
Ответить