Нет, грубо говоря, никакой ячейки, хранящей переменную с константным значением "3", откуда значение в регистры копируется. Эта константа по всему коду размазывается. А код в принципе пишется в указанный блок flash, что-то при запуске может в ram копироваться при указании этого. Всякие обработчики частых прерываний нередко в ram пихают например

Комментарии: 28

  1. Tiny

    это тривиальные вещи. текст где хранить и как?

    • Sexst

      На флеше, где ещё его можно хранить? Это единственная энергонезависимая хранилка, не считая возможного наличия чуточки eeprom

      • Tiny

        ну вот я про то же))

  2. 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 тащить ибо флеш в это время нечитаем

Не нашли ответ?

Вам также может быть интересно