Нет, грубо говоря, никакой ячейки, хранящей переменную с константным значением "3", откуда значение в регистры копируется. Эта константа по всему коду размазывается. А код в принципе пишется в указанный блок flash, что-то при запуске может в ram копироваться при указании этого. Всякие обработчики частых прерываний нередко в ram пихают например
Комментарии: 28
Tiny
это тривиальные вещи. текст где хранить и как?
Sexst
На флеше, где ещё его можно хранить? Это единственная энергонезависимая хранилка, не считая возможного наличия чуточки eeprom
Tiny
ну вот я про то же))
Dmitriy
Не всякие мк могут код в рам выполнять. Поэтому это сильно зависит от железа
Sexst
Но при старте из флеша указанные функции могут в ram копироваться, а переменные с некоторым изначально указанным значением, аллоцируются и инициализируются значением из flash.
Tiny
не понял. а зачем функции копировать в ram? и что с ними потом делать? исполнять код же из ram нельзя
Dmitriy
На многих мк старшего семейства можно... Для того чтобы ускорить код. Или перенести вектора прерываний
Tiny
воу)) не знал) И то есть я могу сделать jmp из флеша в ram?
Alexander
Electrically Erasable Programmable Read Only Memory И обычно имеет прямой побайтовый доступ. В то время как Flash очищается, например, постранично. Хз как на мегах/тиньках. На других архитектурах это достаточно часто применяется )
Dmitriy
Ну, с такой точки зрения может я и не правильно еепром называю флешкой... Я ассоциировал с электростиранем
Sexst
Доступ к ram быстрее доступа к flash, вот зачем. Если в ядре нет конвейера толкового, если у тебя функция часто вызывается, если у тебя такой участок с ветвлениями, что любой предсказатель ветвлений охуевает и регулярно пайплайн дропает, а этот участок критичен к скорости выполнения, то сунуть в ram - вполне выход
Tiny
Ну хз. То есть исполнение инструкций зависит от того где они располагаются? И даташите будет это указано? Сколько тактов будет занимать инструкция в завимости от расположения
Sexst
Доступ к данным по адресу занимает разное время, обычно всё это указано. А дальше всё сложно и зависит от архитектуры ядра: пайплайны, кэши, спекулятивное выполнение, вот это всё
Tiny
Блин. Это уже десктопные дебри... Я думал в мк попроще) но видимо с развитием технологий границы будут стираться
Sexst
Не обязательно, в cortex m4 уже подобие кэша инструкций есть
Tiny
Столько нового от вас узнал)
Alexander
А в M7 полноценный. И для данных и для программ.
Alexander
Да. На многих микроконтроллерах есть регион TCM (tightly coupled memory), откуда код исполняется за один такт процессора. Из других регионов - дольше. Но есть кэши данных и программ, которые подкачивают данные и код из медленных регионов, увеличивая быстродействие.
Dmitriy
Ребята вот есть вопрос такой Альтернатива использования DLL заключается в том, чтобы статически компоновать каждую программу точно с теми библиотечными процедурами, к которым она обращается. Если бы нужно было внедрить эту схему, где бы это имело больший смысл, на клиентах или на серверах?
Tiny
Зависит от типа программы. Что она из себя представляет и как дальше будет развиваться. А еще от лицензии библиотек
Dmitriy
Хммм
Tiny
Qt например нельзя статически линковать если будет проприетарное приложение
Tiny
Если коротко. Старайся использовать статики. Меньше головной боли
Sexst
Вопрос лицензии - совершенно отдельная тема
Tiny
Какой вопрос такой ответ Это надо учитывать
Sexst
Везде. Я вообще недоумеваю какого черта те же линуксовые базовые утилиты хотя бы не собирают статически чтобы они тупо всегда работали, даже при побитой библиотеке
Tiny
Flash memory is a type of EEPROM designed for high speed and high density, at the expense of large erase blocks (typically 512 bytes or larger) вот из вики что нашел
Sexst
По разному Ещё, в случае записи на флеш из рантайма в stm32, нужно весь код, который требуется для записи и аесь код, который должен отрабатывать во время записи (те же прерывания) в ram тащить ибо флеш в это время нечитаем