Ты забыл ещё написать, что взять какой то там битц. Ты везде это предлагаешь, даже когда вопрос про мигалку на аттини.
Но ничего что ТС хочет(перехочет) просто сэкономить ресурс флеша(как будто его мало) и заодно обойти ограничение бесплатного использования кейла в 32кб флеша(как будто нет других способов). Спрашивает как сделать.
_________________ Глупый не задает вопросы. Глупый и так все знает.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Насчёт Keil вы не поняли, я не ради этого делаю, и таким методом обойти ограничение всё равно не получиться!
Просто я осознал, что отладка заливкой в ресурсоограниченый флэш меня неприемлемо нервирует, и доводы типа можно 2 года заливать по 14 раз в день не помогают!
Кто пробовал заливать прошивку в ОЗУ чипов STM32 для экономии ресурса флэша, какие результаты?
Постоянно так делаю. Не для экономии флэшь, конечно же. Ветка debug в SRAM, а release во флэшь. Главное VTOR не забыть перенастроить (на cortex-m0 ремап сделать). Из подводных камней - скорость работы кода из SRAM отличается от работы из FLASH. А так, что-то быстро попробовать не убивая прошивку чипа - самое то.
Не совсем из Keil'а, но тем не менее, успешно работает. Разве что в linux системах проще собрать проект через Makefile, или подсунуть его же в Eclipse для сборки. Программирование - через утилиту st-flash. Загрузка почти мгновенная (во всяком случае, проект на 50+кБ кода загружается в RAM очень быстро).
Заголовок сообщения: Re: Заливка прошивки в ОЗУ STM32 для отладки
Добавлено: Вс дек 02, 2018 12:13:16
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
DENIS451 писал(а):
Кто пробовал заливать прошивку в ОЗУ чипов STM32 для экономии ресурса флэша, какие результаты?
В опициях таргета. 1. Target - выделить под флеш ОЗУ, например первую пловину и само собой тогда откусить размер RAM 2. На закладке LINKER сделать тоже самое, т.е. указать базовые новые адреса или создать свой скаттер-файл. 3. Создать ini файл Спойлер
/*---------- 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, что на реальном на МК, светодиод уже "не мигает". Типа второй раз прошивка не запускается в ОЗУ. Или где-то что-то не допонял или одно из двух.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
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__];
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__];
Спасибо за ответы, закажу STM32F105RBT6, дождусь с али макетные платы, попробую применить на практике.
Цитата:
Этот недуг излечим
Я знаю, лекарство от Keil 5.24a подходит для 5.26
Я кстати, придумал ещё один повод научится отлаживать код в оперативке - можно же ведь забацать проект который загружает c SDHC карточки хексы в память, и передаёт им управление.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 36
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения