Сб авг 27, 2022 18:27:25
Сб авг 27, 2022 19:06:42
for(void(**fConstr)() = __preinit_array_start; fConstr < __preinit_array_end; (*fConstr++)());
for(void(**fConstr)() = __init_array_start; fConstr < __init_array_end; (*fConstr++)());
Сб авг 27, 2022 19:22:21
Размещает компилятор, а не МК.ddr4 писал(а):На деле МК размещает секции по адресам в адресном пространстве
В теории да но на практике, обычно скорость выполнения из флеша примерно такая же как из ОЗУ. Учтите что ОЗУ намного меньше чем флеша. Размещать в нем код без необходимости обычно не имеет смысла.ddr4 писал(а):желательно чтобы МК размещал секции в ОЗУ, так как во-первых ОЗУ быстрей FLASH'a, а значит скорость программы возрастает
Как это влияет на работу прошивки? Релизную все равно нужно шить во флеш потому что ОЗУ хранит данные только пока есть питание. А отладочные прошивки можно грузить в ОЗУ. В IDE выбираете цель сборки Debug RAM или подобную (зависит от IDE), компилируете и заливаете в МК.ddr4 писал(а):во-вторых FLASH имеет ограниченный ресурс на число записей.
Вы прошиваете МК 1500 раз за день? У флеша гарантированный ресурс перезаписи около 10 тысяч.ddr4 писал(а):То есть МК с размещением секций в ОЗУ проживёт дольше.
В МК переменные могут быть еще где-то кроме ОЗУ?ddr4 писал(а):В коде стартапа секция данных копируется по адресу (не факт что ОЗУ)
Дизассемблируйте прошивку и посмотрите как она устроена. Посмотрите map файл. Запустите отладку и по шагам проследите как выполняется программа, что и куда пишет/копирует и т. д.ddr4 писал(а):Остальные секции возможно размещает сам МК, может у него есть какие-то внутренние механизмы?
Нормально создавайте проект не добавляя то что не требуется.ddr4 писал(а):В коде целый файл sbrk.c под подготовку кучи, + в .map-файле heap'a навалено.
Вроде что-то связанное в объектами плюсов, но могу ошибаться.AVI-crak писал(а):С секциями init_array - даже у меня вопросы имеются.
Библиотеки HAL/LL/SPL/CMSIS в файлах проекта и там тысячи строк кода. Будете вручную выпиливать все что не используется?ddr4 писал(а):Во-первых библиотека на то и библиотека что скрывает от её пользователя всю реализацию, например это стандартная библиотека и она прикомпиливается при сборке и лежит в библах/компилятора, а не в файлах проекта.
А если флеша хватает?ddr4 писал(а):Когда флеша не хватает, то из библиотеки берётся одна функция, без подключения хедера зависимого от других хедеров. Иногда это экономит и память и флеш.
Отладчик освойте (купите ST-Link если его нет). Многие вопросы отпадут, потому что когда видно как работает программа что и где находится, не приходится догадываться о работе МК.ddr4 писал(а):Пока не знаю, хотел сначала с эмулятором поиграться, а после уже через uart-ttl через сериал.
Сб авг 27, 2022 19:40:48
__eeprom int x;
int main()
{
x++;
// LDI R20, LOW(`x`)
// LDI R21, (`x`) >> 8
// RCALL __eeget16_16
// SUBI R16, 255
// SBCI R17, 255
// LDI R20, LOW(`x`)
// LDI R21, (`x`) >> 8
// RCALL __eeput16_16
}
Сб авг 27, 2022 19:50:45
Сб авг 27, 2022 20:12:52
Ну мы тут обсуждаем STM32.VladislavS писал(а):В IAR для AVR можно переменные в EEPROM размещать.
ST-Link продается на каждом углу и стоит около 150 рублей.ddr4 писал(а):меня нет SWD-программатора
Это не отладка, а много зря потеряного времени!ddr4 писал(а):Там отлаживаю на коде для компа, или перепрошивкой с выводом значений printf().
Смысл?ddr4 писал(а):Из флеша во флеш, этакий недокументированый swap.
Если не потанцевать с бубном не разблокировав запись во флеш, и не стерев страницы, записать ничего не получится.ddr4 писал(а):незачем было указывать размещение во флеш)
Ага!ddr4 писал(а):Это я опять выдумываю).
Загружает если это явно заданно. Обычно применяется для отладки чтобы флеш не протирать.ddr4 писал(а):А зачем отладчик загружает программу в SRAM, если флеш настолько хорош?
Нет смысла. Программа нормально из флеша выполняется (в AVR разве не также?).ddr4 писал(а):И почему так не делают в рабочем режиме, если только не из экономии RAM?
Это вы все усложняете начав изучение не с той стороны.ddr4 писал(а):Но не всё так просто оказалось)
Сб авг 27, 2022 20:14:34
Я и ожидал что stm32 от Ардуины ничем принципиально отличатся не будет.
Сб авг 27, 2022 20:25:27
Сб авг 27, 2022 20:25:48
VladislavS писал(а):С секциями init_array - даже у меня вопросы имеются.
Так это, там хранятся адреса конструкторов глобальных объектов.
Сб авг 27, 2022 20:35:08
Сб авг 27, 2022 20:38:33
Сб авг 27, 2022 20:42:28
Сб авг 27, 2022 20:49:32
Сб авг 27, 2022 20:56:05
Сб авг 27, 2022 21:01:48
VladislavS писал(а):Намекаю второй раз уже в этой теме. В GCC конструкторы могут быть не только в С++, но и в православном С.
Мурик писал(а):ddr4 писал(а):
Там отлаживаю на коде для компа, или перепрошивкой с выводом значений printf().
Это не отладка, а много зря потеряного времени!
Вот смотрите просмотр регистров под отладчиком. Как это сделаете на printf()?
Сб авг 27, 2022 21:09:52
Вс авг 28, 2022 10:36:57
Вс авг 28, 2022 11:44:43
Вс авг 28, 2022 11:56:17
Вс авг 28, 2022 12:03:58
Это не так. Нет необходимости на начальном этапе разбираться со стартапом и скриптом линкера. Они добавляются в проект при его создании в IDE.ddr4 писал(а):но нет, в STM всё намного хуже.
Зачем вы полезли его настраивать?ddr4 писал(а):И когда после AVR человек пытается использовать STM, он получает отрицательные эмоции во-первых от настройки стартапа
Можно писать без HAL. Это одна из библиотек и никто не заставляет ее использовать.ddr4 писал(а):Но тут бах и - HAL.