Зачем stm32 требует самостоятельно настраивать startup.s ?

Кто любит RISC в жизни, заходим, не стесняемся.
Up2805
Встал на лапы
Сообщения: 148
Зарегистрирован: Сб июн 04, 2022 05:21:07

Re: Зачем stm32 требует самостоятельно настраивать startup.s

Сообщение Up2805 »

"Говорят, в Москве кур доЯт". ... Есть стандартный SWD-интерфейс отладки и загрузки, зачем мучиться с UART-загрузчиком? Загрузчики через иные интерфейсы нужны для перепрошивки или первичной заливки в готовые устройства.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Зачем stm32 требует самостоятельно настраивать startup.s

Сообщение VladislavS »

[uquote="ddr4",url="/forum/viewtopic.php?p=4279205#p4279205"]Я же не знаю как оно в реальности запускается[/uquote]Точно так же как в AVR. Включаете питание и код начинает выполняться с Reset_Handler.

[uquote="ddr4",url="/forum/viewtopic.php?p=4279205#p4279205"]возможно в линкере указывается куда МК (операционная система) должна разместить секции программы после её запуска.[/uquote]Не придумывайте, какая ещё операционная система? Всё то же самое как в AVR.

[uquote="ddr4",url="/forum/viewtopic.php?p=4279205#p4279205"]На деле МК размещает секции по адресам в адресном пространстве, желательно чтобы МК размещал секции в ОЗУ, так как во-первых ОЗУ быстрей FLASH'a, а значит скорость программы возрастает,[/uquote]Это заблуждение. К флэш у контроллера широкая шина с предвыборкой и кэшами. При расположении кода во флэш, а данных в SRAM программа работает частенько даже быстрее чем чисто из SRAM.

[uquote="ddr4",url="/forum/viewtopic.php?p=4279205#p4279205"]а во-вторых FLASH имеет ограниченный ресурс на число записей. То есть МК с размещением секций в ОЗУ проживёт дольше.[/uquote]Как вы себе это представляете? Вот включили вы питания контроллера, флэш девственно чистая (экономите ресурс). Откуда код и данные появятся в ОЗУ? В ОЗУ размещаются переменные (нулевые занулением, ненулевые копированием из флэш в стартапе), а во флэш лежит код. Лежит себе, положенный туда один раз при программировании.

Экономят флэш когда занимаются постоянно отладкой. Тогда с помощью отладчика (ST-Link, J-Link и др.) загружают код в SRAM. Тогда флэш и правда не используется. Именно при таком сценарии использования нужен скрипт линкера с перенаправленными в SRAM секциями. Для штатной прошивки, которая должна работать в контроллере при включении питания это всё не работает.

[uquote="ddr4",url="/forum/viewtopic.php?p=4279205#p4279205"]Но видимо указание линкеру разместить секцию в >RAM, ещё не является гарантией что она будет находится именно в ОЗУ ..? Так как нельзя сказать точно на какое устройство отражается кусок адресного пространства.[/uquote]У контроллера в документации написано по каким адресам какая память находится. У вашего контроллера по адресу 0x08000000 всегда флэш, а по адресу 0x20000000 всегда SRAM. Так устроен чип. Если сказано разместить в SRAM (0x20000000), то ничем иным это не будет.

[uquote="ddr4",url="/forum/viewtopic.php?p=4279205#p4279205"]В коде стартапа секция данных копируется по адресу (не факт что ОЗУ),[/uquote]Подумайте и ответьте на два вопроса. Откуда копируется секция данных? Куда кроме ОЗУ она может копироваться?

[uquote="ddr4",url="/forum/viewtopic.php?p=4279205#p4279205"]Возможно сам МК и размещает секции в адресном пространстве, может у него есть какие-то внутренние механизмы?[/uquote]Сам МК ничего поместить не может. Есть три основных механизма загрузки кода:
1. Программа программатором прошивается во флэш и лежит там постоянно. При включении питания из него и стартует.
2. Отладчиком программа загружается в SRAM и работает оттуда до выключения питания.
3. С помощью перемычки в МК запускается программа-загрузчик, находящаяся в системной памяти. Эта программа-загрузчик позволяет прошить флэш через UART, USB и т.д. без программатора. После прошивки перемычка снимается и работает всё как в п.1.

[uquote="ddr4",url="/forum/viewtopic.php?p=4279205#p4279205"]В коде целый файл sbrk.c под подготовку кучи, + в .map-файле heap'a навалено. Вроде оно всё не мешает, но когда этого всего "не мешает" - много, оно как-то начинает мешать.[/uquote]Поверьте, проблема не в скрипте линкера, а в том что пример своего блинка вы на какой-то помойке нашли. Оставьте в проекте скрипт, который я выкладывал и больше в него не заглядывайте. Поверьте, там проблем нет.

Когда вы работали с Ардуино, то "под капотом" было всё то же самое. Просто IDE всё от вас прятала и дурные мысли не приходили.

Совет - создайте чистый проект руками. В него включите:
1. Стартап файл.
2. Линкерскрипт.
3. Заголовочный файл от вашего микроконтроллера.
4. Папку CMSIS. Заголовочные файлы из неё понадобятся для пункта 3.
5. Один файл программы с функцией SystemInit. В ней включите тактирование GPIO-порта, на котором висит диод.
6. Второй файл программы, в котором в main мигайте себе светодиодом.

Так и разберётесь как что работает, и с "лишним" бороться не надо будет.

Добавлено after 15 minutes 38 seconds:
[uquote="ddr4",url="/forum/viewtopic.php?p=4279220#p4279220"]Возможно это сложно понять, но мне не хочется видеть лишнего кода при вхождении в новую тему.[/uquote]Ну так не собирайте его на всяких помойках. Самому, конечно, трудно с нуля проект сделать. Но можно же на форуме попросить. Минимальный проект без всякого мусора. IDE нормальную используйте, с нормальной отладкой. Тогда никакие симуляторы не понадобятся.

[uquote="ddr4",url="/forum/viewtopic.php?p=4279220#p4279220"]Пока не знаю, хотел сначала с эмулятором поиграться, а после уже через uart-ttl через сериал. Говорят в F4 есть встроенный загрузчик он это позволяет.[/uquote]ST-Link самый дорогой $3. Зажали и будете без отладки через загрузчик шить? Ну-ну. Чем тогда это от ардуины будет отличаться?

[uquote="ddr4",url="/forum/viewtopic.php?p=4279220#p4279220"]Иначе всё в 2 кБ не впихнуть.[/uquote]А чё, прикольно. Купить контроллер с 256к на борту и впихнуть всё в 2к. Занятная цель. :)

Добавлено after 20 minutes 10 seconds:
[uquote="AVI-crak",url="/forum/viewtopic.php?p=4279216#p4279216"]С секциями init_array - даже у меня вопросы имеются.[/uquote]Так это, там хранятся адреса конструкторов глобальных объектов.
В стартапе для их использования вот такое пишут

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

for(void(**fConstr)() = __preinit_array_start; fConstr < __preinit_array_end; (*fConstr++)());
for(void(**fConstr)() = __init_array_start;    fConstr < __init_array_end;    (*fConstr++)());
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Зачем stm32 требует самостоятельно настраивать startup.s

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

ddr4 писал(а):На деле МК размещает секции по адресам в адресном пространстве
Размещает компилятор, а не МК.
МК в стартапе может скопировать что-то из флеша в ОЗУ, но к размещению секций это отношения не имеет.
ddr4 писал(а):желательно чтобы МК размещал секции в ОЗУ, так как во-первых ОЗУ быстрей FLASH'a, а значит скорость программы возрастает
В теории да но на практике, обычно скорость выполнения из флеша примерно такая же как из ОЗУ. Учтите что ОЗУ намного меньше чем флеша. Размещать в нем код без необходимости обычно не имеет смысла.
ddr4 писал(а):во-вторых FLASH имеет ограниченный ресурс на число записей.
Как это влияет на работу прошивки? Релизную все равно нужно шить во флеш потому что ОЗУ хранит данные только пока есть питание. А отладочные прошивки можно грузить в ОЗУ. В IDE выбираете цель сборки Debug RAM или подобную (зависит от IDE), компилируете и заливаете в МК.
ddr4 писал(а):То есть МК с размещением секций в ОЗУ проживёт дольше.
Вы прошиваете МК 1500 раз за день? У флеша гарантированный ресурс перезаписи около 10 тысяч.
ddr4 писал(а):В коде стартапа секция данных копируется по адресу (не факт что ОЗУ)
В МК переменные могут быть еще где-то кроме ОЗУ?
ddr4 писал(а):Остальные секции возможно размещает сам МК, может у него есть какие-то внутренние механизмы?
Дизассемблируйте прошивку и посмотрите как она устроена. Посмотрите map файл. Запустите отладку и по шагам проследите как выполняется программа, что и куда пишет/копирует и т. д.
ddr4 писал(а):В коде целый файл sbrk.c под подготовку кучи, + в .map-файле heap'a навалено.
Нормально создавайте проект не добавляя то что не требуется.
AVI-crak писал(а):С секциями init_array - даже у меня вопросы имеются.
Вроде что-то связанное в объектами плюсов, но могу ошибаться.
ddr4 писал(а):Во-первых библиотека на то и библиотека что скрывает от её пользователя всю реализацию, например это стандартная библиотека и она прикомпиливается при сборке и лежит в библах/компилятора, а не в файлах проекта.
Библиотеки HAL/LL/SPL/CMSIS в файлах проекта и там тысячи строк кода. Будете вручную выпиливать все что не используется?
А сколько подобного кода было ардуине, о котором вы похоже даже не знали.
ddr4 писал(а):Когда флеша не хватает, то из библиотеки берётся одна функция, без подключения хедера зависимого от других хедеров. Иногда это экономит и память и флеш.
А если флеша хватает?
Откуда столько заблуждений? Видимо негативное влияние ардуины!
ddr4 писал(а):Пока не знаю, хотел сначала с эмулятором поиграться, а после уже через uart-ttl через сериал.
Отладчик освойте (купите ST-Link если его нет). Многие вопросы отпадут, потому что когда видно как работает программа что и где находится, не приходится догадываться о работе МК.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Зачем stm32 требует самостоятельно настраивать startup.s

Сообщение VladislavS »

[uquote="Мурик",url="/forum/viewtopic.php?p=4279268#p4279268"]В МК переменные могут быть еще где-то кроме ОЗУ?[/uquote]Ну, как вам сказать... Да! В IAR для AVR можно переменные в EEPROM размещать.

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

__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
}
Аватара пользователя
ddr4
Потрогал лапой паяльник
Сообщения: 352
Зарегистрирован: Ср дек 30, 2020 23:05:29

Re: Зачем stm32 требует самостоятельно настраивать startup.s

Сообщение ddr4 »

[uquote="Up2805",url="/forum/viewtopic.php?p=4279222#p4279222"]"Говорят, в Москве кур доЯт". ... Есть стандартный SWD-интерфейс отладки и загрузки, зачем мучиться с UART-загрузчиком? Загрузчики через иные интерфейсы нужны для перепрошивки или первичной заливки в готовые устройства.[/uquote]Наверное есть, но у меня нет SWD-программатора, есть только usb-ttl. Если можно просто прошить меня это устраивает. Дебаг на работающей плате мне не особо нужен, в AVR мне это не потребовалось. Там отлаживаю на коде для компа, или перепрошивкой с выводом значений printf().

[uquote="VladislavS",url="/forum/viewtopic.php?p=4279223#p4279223"]Подумайте и ответьте на два вопроса. Откуда копируется секция данных? Куда кроме ОЗУ она может копироваться?[/uquote]Из флеша во флеш, этакий недокументированый swap. С одной стороны это бессмыслено, так как данные копируются из флеша во флеш. Но если это убьёт МК быстрей производитель только порадуется, а виноват программист, - незачем было указывать размещение во флеш). Таким образом мы ограничивает МК не только по числу перезаписей, но и по числу включений. Это я опять выдумываю).

[uquote="VladislavS",url="/forum/viewtopic.php?p=4279223#p4279223"]Сам МК ничего поместить не может. Есть три основных механизма загрузки кода:
1. Программа программатором прошивается во флэш и лежит там постоянно. При включении питания из него и стартует.
2. Отладчиком программа загружается в SRAM и работает оттуда до выключения питания.[/uquote]
А зачем отладчик загружает программу в SRAM, если флеш настолько хорош? И почему так не делают в рабочем режиме, если только не из экономии RAM?

[uquote="VladislavS",url="/forum/viewtopic.php?p=4279223#p4279223"]Поверьте, проблема не в скрипте линкера, а в том что пример своего блинка вы на какой-то помойке нашли. Оставьте в проекте скрипт, который я выкладывал и больше в него не заглядывайте. Поверьте, там проблем нет.

Когда вы работали с Ардуино, то "под капотом" было всё то же самое. Просто IDE всё от вас прятала и дурные мысли не приходили.[/uquote]
Я в vim'e писал, в том числе простой makefile с компиляцией каждого файла. Но вот avr-gcc действительно скрывало многое, что просто gcc для stm32f4 не скрывает.

[uquote="VladislavS",url="/forum/viewtopic.php?p=4279223#p4279223"]Совет - создайте чистый проект руками. В него включите:
1. Стартап файл.
2. Линкерскрипт.
3. Заголовочный файл от вашего микроконтроллера.
4. Папку CMSIS. Заголовочные файлы из неё понадобятся для пункта 3.
5. Один файл программы с функцией SystemInit. В ней включите тактирование GPIO-порта, на котором висит диод.
6. Второй файл программы, в котором в main мигайте себе светодиодом.

Так и разберётесь как что работает, и с "лишним" бороться не надо будет.[/uquote] Спасибо, примерно это я сейчас и пытаюсь сделать.

[uquote="VladislavS",url="/forum/viewtopic.php?p=4279223#p4279223"]Ну так не собирайте его на всяких помойках. Самому, конечно, трудно с нуля проект сделать. Но можно же на форуме попросить. Минимальный проект без всякого мусора. IDE нормальную используйте, с нормальной отладкой. Тогда никакие симуляторы не понадобятся.[/uquote]
Впринципе всё понятно, можно и на Эклипсе жить, отладчик gdb и printf(), если дойду до Хеллоу Ворлда.

[uquote="VladislavS",url="/forum/viewtopic.php?p=4279223#p4279223"]ST-Link самый дорогой $3. Зажали и будете без отладки через загрузчик шить? Ну-ну. Чем тогда это от ардуины будет отличаться?[/uquote]
Я и ожидал что работа с stm32 от Ардуины ничем принципиально отличаться не будет. Тем более что больший размер памяти упрощают алгоритмы, и приводит к уменьшению кода. А я и ардуину не отлаживал на чипе, только на компе куски кода и через printf(), с этим можно жить.

[uquote="VladislavS",url="/forum/viewtopic.php?p=4279223#p4279223"]А чё, прикольно. Купить контроллер с 256к на борту и впихнуть всё в 2к. Занятная цель. :)[/uquote]
Цель была упростить код, который на ардуине впритык расходует 2 кБ RAM, что приводит к усложнению алгоритмов. А хотелось их упростить, так как 64 кБ RAM на stm32 должны были развязать руки. Но не всё так просто оказалось)
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Зачем stm32 требует самостоятельно настраивать startup.s

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

VladislavS писал(а):В IAR для AVR можно переменные в EEPROM размещать.
Ну мы тут обсуждаем STM32. :)
И это не совсем переменная. Это скрытая запись в энергонезависимую память.
С таким же успехом можно разрешить запись во флеш и записывать вызовом FLASH_ProgramByte() или подобной. :)
ddr4 писал(а):меня нет SWD-программатора
ST-Link продается на каждом углу и стоит около 150 рублей.
СпойлерИзображение
Его можно самому собрать.
ddr4 писал(а):Там отлаживаю на коде для компа, или перепрошивкой с выводом значений printf().
Это не отладка, а много зря потеряного времени!
Вот смотрите просмотр регистров под отладчиком. Как это сделаете на printf()?
СпойлерИзображение
Выводить все регистры? Представляете сколько это текста и как неудобно и утомительно анализировать выхлоп?
ddr4 писал(а):Из флеша во флеш, этакий недокументированый swap.
Смысл?
ddr4 писал(а):незачем было указывать размещение во флеш)
Если не потанцевать с бубном не разблокировав запись во флеш, и не стерев страницы, записать ничего не получится.
ddr4 писал(а):Это я опять выдумываю).
Ага! :) :facepalm:
ddr4 писал(а):А зачем отладчик загружает программу в SRAM, если флеш настолько хорош?
Загружает если это явно заданно. Обычно применяется для отладки чтобы флеш не протирать.
ddr4 писал(а):И почему так не делают в рабочем режиме, если только не из экономии RAM?
Нет смысла. Программа нормально из флеша выполняется (в AVR разве не также?).
ddr4 писал(а):Но не всё так просто оказалось)
Это вы все усложняете начав изучение не с той стороны.
Последний раз редактировалось Мурик Сб авг 27, 2022 20:14:55, всего редактировалось 2 раза.
Up2805
Встал на лапы
Сообщения: 148
Зарегистрирован: Сб июн 04, 2022 05:21:07

Re: Зачем stm32 требует самостоятельно настраивать startup.s

Сообщение Up2805 »

Я и ожидал что stm32 от Ардуины ничем принципиально отличатся не будет.

Странное ожидание. Лет пять назад вас за такие слова помидорами бы закидали :) Дело в том, что STM32 это принципиальная и диаметральная противоположность Ардуины. А то, что появились некоторые адруиноподобные шилды на STM32 и в Ардуино-IDE добавили младший STM32, это еще не говорит о принципиальной схожести.

Исполнение не из флеша может быть нужно в очень старших семействах STM32 с выделенной специальной областью SRAM (ITCM RAM), в которую загружаются некоторые небольшие части кода. Своего рода кэш второго уровня.
Так же исполнение из SRAM может использоваться при перепрошивке флеша в готовом устройстве. Однако, оно небезопасно при неожиданном прекращении питания во время перепрошивки - опасность окирпичивания.

Исполнение из общей SRAM чревато снижением скорости, потому как SRAM однопортовая и если нет второго отдельного блока SRAM с отдельным портом, обращения к SRAM будут делиться между исполняемым кодом и данными.
Последний раз редактировалось Up2805 Сб авг 27, 2022 20:24:46, всего редактировалось 2 раза.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Зачем stm32 требует самостоятельно настраивать startup.s

Сообщение VladislavS »

[uquote="ddr4",url="/forum/viewtopic.php?p=4279288#p4279288"]Это я опять выдумываю).[/uquote]Такое выдумать можно только под воздействием чего-то запрещённого. :)

[uquote="ddr4",url="/forum/viewtopic.php?p=4279288#p4279288"]А зачем отладчик загружает программу в SRAM, если флеш настолько хорош?[/uquote]Во-первых, это просто быстрее. Время цикла изменения кода и проверки как он работает очень важно при профессиональной работе. Во-вторых, та самая экономия ресурса флэш. При профессиональном использовании макетные платы могут годами использоваться на столе программиста.

[uquote="ddr4",url="/forum/viewtopic.php?p=4279288#p4279288"]И почему так не делают в рабочем режиме, если только не из экономии RAM?[/uquote]А как вы себе это представляете? К каждому серийному изделию по программатору и программисту запускающему его в коробку класть? :) А экономия RAM и флэш вообще бессмысленная вещь до тех пор пока код помещается в микроконтроллер и работает с необходимой скоростью. Конечно, когда пишешь какие-то библиотеки или тот же стартап, то надо писать оптимально, ибо использоваться будет в разных проектах и это не станет узким местом в будущем. Но если надо на F4 написать мигалку светодиодом, то нет никакого смысла тратить время на "утаптывание" кода. Спасть лучше от осознания, что прошивка занимает всего 1 кБ из 1 МБ я точно не буду.

[uquote="ddr4",url="/forum/viewtopic.php?p=4279288#p4279288"]А я и ардуину не отлаживал на чипе, только на компе куски кода и через printf(), с этим можно жить.[/uquote]Одно дело когда подруцгому никак, то довольствуешься тем что есть. Но когда есть возможность отладки, это совершенно другой стиль разработки.

[uquote="ddr4",url="/forum/viewtopic.php?p=4279288#p4279288"]Но не всё так просто оказалось[/uquote]Ерунда, всё реально. Было бы желание.

Добавлено after 8 minutes 48 seconds:
[uquote="Мурик",url="/forum/viewtopic.php?p=4279302#p4279302"]И это не совсем переменная. Это скрытая запись в энергонезависимую память.[/uquote]В терминах языка программирования, на котором написан код, это именно переменная и есть. Я могу с ней работать как с любой другой - присваивать значения, копировать, выполнять арифметические операции, передавать значения в функции и т.д. Во что это компилируется вообще не имеет никакого значения. Например, при копировании структур или массивов компилятор частенько вызывает незаметно для программиста функцию memcpy. Вы же не отказываете из-за этого им в праве называться переменными?

[uquote="Мурик",url="/forum/viewtopic.php?p=4279302#p4279302"]С таким же успехом можно разрешить запись во флеш и записывать вызовом FLASH_ProgramByte() или подобной. :)[/uquote]А вот это совсем другое. Если бы компилятор сделал всё это незаметно для программиста, как в приведённом мной примере, то да. А так НЕТ!
Аватара пользователя
AVI-crak
Прорезались зубы
Сообщения: 202
Зарегистрирован: Сб янв 09, 2016 15:51:17
Контактная информация:

Re: Зачем stm32 требует самостоятельно настраивать startup.s

Сообщение AVI-crak »

VladislavS писал(а):С секциями init_array - даже у меня вопросы имеются.
Так это, там хранятся адреса конструкторов глобальных объектов.
Вот только сейчас додумался как правильно сформировать запрос для гугла, и за 5 минут узнал всё что хотел.
И таки да, всё связанное с С++, С#, всем тем зоопарком что выше. К функции SystemInit() вообще ни как не относится. Даже сами авторы GCC считают _array некрасивым, уродливым решением. Но ничего лучше предложить не могут.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Зачем stm32 требует самостоятельно настраивать startup.s

Сообщение VladislavS »

[uquote="AVI-crak",url="/forum/viewtopic.php?p=4279316#p4279316"]И таки да, всё связанное с С++, С#, всем тем зоопарком что выше.[/uquote]Намекаю второй раз уже в этой теме. В GCC конструкторы могут быть не только в С++, но и в православном С. Как бы странно это не звучало.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Зачем stm32 требует самостоятельно настраивать startup.s

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

Намекаете что в проекте могут быть вперемешку *.c и *.cpp файлы или о чем-то другом?
В описании языка Си не встречал упоминаний о конструкторах в структурах или о классах.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Зачем stm32 требует самостоятельно настраивать startup.s

Сообщение VladislavS »

Это расширение GCC, стандарт С такого не предусматривает. Тык!
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Зачем stm32 требует самостоятельно настраивать startup.s

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

Тогда понятно.
В GCC есть много чего не входящего в стандарт, например вложенные функции.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Зачем stm32 требует самостоятельно настраивать startup.s

Сообщение VladislavS »

Однако, стартап написан для GCC и должен поддерживать все его возможности. Просто так выкинуть из стартапа вызов конструкторов из-за того что вы не используете С++ можно только из-за великой жадности.
Аватара пользователя
AVI-crak
Прорезались зубы
Сообщения: 202
Зарегистрирован: Сб янв 09, 2016 15:51:17
Контактная информация:

Re: Зачем stm32 требует самостоятельно настраивать startup.s

Сообщение AVI-crak »

VladislavS писал(а):Намекаю второй раз уже в этой теме. В GCC конструкторы могут быть не только в С++, но и в православном С.
Спасибо, я уже наступил на эту лепёшку. Мне всегда подобный код казался странным и непонятным. После глубоко_копания в разные стороны - ощущение укрепилось, мне этого не надо.
Гораздо проще работать с памятью явно и прямо здесь, а не ожидать что память выделится магическим образом через вызов функции из исполняемого файла в другом каталоге проекта.
Ну да, С++ у меня не очень, точнее вообще никак.
Мурик писал(а):ddr4 писал(а):
Там отлаживаю на коде для компа, или перепрошивкой с выводом значений printf().
Это не отладка, а много зря потеряного времени!
Вот смотрите просмотр регистров под отладчиком. Как это сделаете на printf()?
Я уже неоднократно замечал - человек не в состоянии принять и понять информацию, если она имеет базовый конфликт с его опытом.
Кхм, думаю если ему показать левую колонку видимых функций и переменных - он вообще ничего не поймёт. Как например я не понимаю, откуда аурдинщики берут имена функций: без встроенной подсказки, без автоматического дополнения, без динамической фильтрации типов, без той самой левой колонки любой нормальной IDE. Наверное по старинке, из бумажной книжки.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Зачем stm32 требует самостоятельно настраивать startup.s

Сообщение VladislavS »

[uquote="AVI-crak",url="/forum/viewtopic.php?p=4279359#p4279359"]Как например я не понимаю, откуда аурдинщики берут имена функций:[/uquote]Копипастят друг у друга... Ардуина, кмк, сильна сообществом.
Аватара пользователя
ddr4
Потрогал лапой паяльник
Сообщения: 352
Зарегистрирован: Ср дек 30, 2020 23:05:29

Re: Зачем stm32 требует самостоятельно настраивать startup.s

Сообщение ddr4 »

[uquote="AVI-crak",url="/forum/viewtopic.php?p=4279359#p4279359"]Я уже неоднократно замечал - человек не в состоянии принять и понять информацию, если она имеет базовый конфликт с его опытом.[/uquote]Да именно так. Так как большинство ожидает от STM32 уровня программирования даже не Ардуино-IDE, а хотя бы AVR (avr-gcc), но нет, в STM всё намного хуже. И когда после AVR человек пытается использовать STM, он получает отрицательные эмоции во-первых от настройки стартапа, которого в AVR нет. И утешает себя ну мол ладно, стартап переварю и дальше всё пойдёт. Но тут бах и - HAL. И первая реакция, ну ладно, в AVR тоже были библиотеки абстракций, и здесь я избавлюсь от HAL. И чел пытается смотреть примеры без HAL, а там тоже какой-то ужас, и получает ещё отрицательных эмоций с попыткой разбить BluePill об стену :twisted: . После чего говорит, ну ладно буду использовать этот ужасный HAL. Берёт пример с hal-uart - print "Hello World" ковыряется в библиотеке включая нужные дефайны. Запускает и ..... облом :evil: . Копаясь в куче ошибок компилятора :dont_know: ... понимает. Что в этом примере "Hello World" - другая версия HAL и тут терпению приходит конец, как и BluePill'у :twisted:.
И после таких приключений :facepalm: , кто-то пишет ещё один отрицательный отзыв о STM32, что это ужас-ужас. (и это отзывы не Арудинщиков начального уровня ).
Что вы уже "неоднократно замечали". :)

[uquote="AVI-crak",url="/forum/viewtopic.php?p=4279359#p4279359"]Кхм, думаю если ему показать левую колонку видимых функций и переменных - он вообще ничего не поймёт. Как например я не понимаю, откуда аурдинщики берут имена функций: без встроенной подсказки, без автоматического дополнения, без динамической фильтрации типов, без той самой левой колонки любой нормальной IDE. Наверное по старинке, из бумажной книжки.[/uquote]
В AVR для выполнения реальной задачи оперируют 10 функциями в 2-3 файлах, а в STM32 чтобы вывести строку "Hello World" надо оперировать 100 функций расположенной в двух библиотеках. И тогда потребуется IDE не для того чтобы удобно писать код, а для того чтобы исследовать код библиотек, стартапав и прочего. И вот когда вы с этим разберётесь (с помощью IDE - которую вам тоже придётся изучить) - добро пожаловать в STM32. :)
И какое сообщество может быть у STM32 с такими граблями?
Цены на AVR подтверждают всё вышесказанное. )
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

Re: Зачем stm32 требует самостоятельно настраивать startup.s

Сообщение JackSmith »

[uquote="ddr4",url="/forum/viewtopic.php?p=4279507#p4279507"]И чел пытается смотреть примеры без HAL, а там тоже какой-то ужас, и получает ещё отрицательных эмоций с попыткой разбить BluePill об стену :twisted: .[/uquote]

Ой, а можно посмотреть эти "ужасные" примеры? Просто как раз пишу на CMSIS и оч. любопытно чего вы такого ужасного там нашли?
Аватара пользователя
MLX90640
Опытный кот
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Re: Зачем stm32 требует самостоятельно настраивать startup.s

Сообщение MLX90640 »

А что ужасного в STM32? Это просто гораздо более мощный микроконтроллер с гораздо более высоким порогом вхождения, для более умных и опытных программистов. Документация - да, на порядок объемнее. Про стартап линкерскрипт уже сто раз объяснили. Автор вопроса либо тупит, либо капризничает. Ну да, STM32 гораздо сложнее, это вы ещё не видели системы тактирования в каком-нибудь STM32H743. Но это просто совершенно иной уровень. Если программист не тянет мозгом, то незачем и начинать. А то как в басне про обезьяну и очки.

Автору - не волокешь, не хватает соображаловки, мозги не проворачивают объем информации - просто не лезь в эти дебри, сдохнешь. STM не виноват, что он сложный. Виноват программист, недостаточно подготовленный и не понимающий. А ведь есть и гораздо более сложные системы, для весьма подготовленных специалистов.
Последний раз редактировалось MLX90640 Вс авг 28, 2022 12:05:21, всего редактировалось 1 раз.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Зачем stm32 требует самостоятельно настраивать startup.s

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

ddr4 писал(а):но нет, в STM всё намного хуже.
Это не так. Нет необходимости на начальном этапе разбираться со стартапом и скриптом линкера. Они добавляются в проект при его создании в IDE.
Ваша задача, создать проект и писать код. Но вы решили все усложнить. :dont_know:
Смотрите, проект создается и все сразу готово к компиляции прошивки без необходимости править стартап и скрипт линкера.
СпойлерИзображение
Зачем вы решили все усложнить, непонятно. :dont_know:
ddr4 писал(а):И когда после AVR человек пытается использовать STM, он получает отрицательные эмоции во-первых от настройки стартапа
Зачем вы полезли его настраивать? :facepalm:
В этом нет необходимости. Сами себе создали сложности! :dont_know:
ddr4 писал(а):Но тут бах и - HAL.
Можно писать без HAL. Это одна из библиотек и никто не заставляет ее использовать.
Ответить

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