Перейти к содержанию
    

maksimdag0

Участник
  • Постов

    29
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о maksimdag0

  • Звание
    Участник
    Участник

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. Понял. Спасибо большое! Один ответ ваш и все дошло!)
  2. Хорошо. А если регионов загрузки больше одного, например как в примере ниже: LR_IROM1 0x08000000 0x00040000 { ; load region size_region ER_IROM1 0x08000000 0x00040000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) startup_stm32f4.o } RW_IRAM1 0x20000000 0x00020000 { ; RW data .ANY (+RW +ZI) } } LR_IROM1 0x08040000 0x00020000 { ER_IROM1 0x08040000 0x00020000 { ; load address = execution address .ANY (+RO) } } получается ,в таком примере, размер области для загрузки образа программы выделится равным 0x00040000+0x00020000=0x00060000? И программа по этим отдельным региона загрузки(0x08000000 и 0x08040000) будет как то длиться?
  3. Покурил, что вы написали.. В итоге я понял так: в Scatter-файле,когда мы в регионе загрузке(LR_IROM1) указываем адреса(в моем примере это LR_IROM1 0x08000000 0x00080000), то мы говорим что наша написанная программа(глобальные переменныe, код прослойки, в общем весь код) была загружена и хранилась там по этим адресам(начиная с адреса0x08000000). То есть весь код будет хранится начиная с адреса 0x08000000(то есть во flash). Далее мы записываем регион выполнения (ER_IROM1) и указываем адреса(в моем примере это ER_IROM1 0x08000000 0x00080000), это значит что мы говорим в какую область памяти мы должно скопировать данные из области загрузки. В моем примеры эти адреса равны, но если рассматривать такой пример(исправил адреса на абум для примера): LR_IROM1 0x08000000 0x00040000 { ; load region size_region ER_IROM1 0x00040000 0x00040000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x20000000 0x00020000 { ; RW data .ANY (+RW +ZI) } } в данном примере получается, что моя прошивка(весь код) загрузится(то есть прошьется) по адресу 0x08000000 размером 0x00040000, а выполнение кода начнется с адреса 0x00040000, так как адрес региона исполнения равен 0x00040000(ER_IROM1). То есть будет скопирован код из области памяти, адрес который 0x08000000(из региона загрузки LR_IROM1 ), в область памяти, адрес которой 0x00040000(в регион исполнения ER_IROM1), а именно будет скопирован то код, сегметы которыех указаны в теле региона исполнения(то есть: *.o (RESET, +First), *(InRoot$$Sections), .ANY (+RO) ). Правильно ли до меня дошло?
  4. Первое, что я сделал. Да там разжевано все, но если говорить о определении того что такое РЕГИОН ЗАГРУЗКИ и что такое РЕГИОН ВЫПОЛНЕНИЯ, то там написано об это минимально. Я никак не могу понять что такое "регион загрузки" и что такое такое "регион выполнения". Что это? В моем сложившимся представлении flash память является "регионом загрузки" и "регионом выполнения", но мне кажется, что это бред. Я не имею представление даже что это, если можете, обьясните пожалуста конкретно) Еще я нашел вроде хороший сайт где описано различие, но так написано не понятно для меня, либо просто я тугодум. Прикрепил во вложении скрин
  5. Это до меня дошло, но я никак не могу понять самое важное - что же такое РЕГИОН ЗАГРУЗКИ и что такое РЕГИОН ВЫПОЛНЕНИЯ? Что это? Я представляю это так, если говорить абстрактно: Написав программу(код), мы ее загружаем во flash микроконтроллера(МК), далее когда мы перезапускаем МК ядро начинает считывать инструкции программы с flash памяти начиная с 0x0 адреса(если, конечно, предварительно пинами BOOT установлена считывание с flash). Так вот, память flash получается это регион загрузки? И так как ядро выполняет программу из flash то она же считается и регионом выполнения? Мне кажется, что это бред.
  6. Доброго вечера, форумчане! Подскажите, я не могу разобраться с вопросом, связанным со Scatter-файлом, а именно как разместить какой либо код(функцию или переменную, например) по определенному адресу в Keil . Не хватает знаний. Сразу скажу, ответ на вопрос искал на просторах интернета долго, пишу сюда так как недоперло до конца. Есть Scatter-файл со следующим содержанием: LR_IROM1 0x08000000 0x00080000 { ; load region size_region ER_IROM1 0x08000000 0x00080000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x20000000 0x00020000 { ; RW data .ANY (+RW +ZI) } } погуглив, я узнал, что: LR_IROM1 – это регион(область) загрузки, ER_IROM1 – это регион(область) выполнения. Я понял так, что область загрузки это область памяти куда будет загружен нами указанный код , в данном примере код будет загружен в область, которая начинается с адреса 0x08000000 размером 0x00080000. 1) Ну что же такое регион(область) выполнения(ER_IROM1 0x08000000 0x00080000 )? Второй вопрос: 2) Если я дал правильное определение что такое "LR_IROM1", то почему в теле LR_IROM1 прописано RW_IRAM1 0x20000000 0x00020000, ведь эти адреса( 0x20000000 0x00020000) никак не входят в область 0x08000000 0x00080000 ?
  7. Доброго времени суток! У меня есть вопрос, той же тематики, но немного другой. Никак не могу разобраться что где как, вижу здесь много знатоков по этой теме. Подскажите, вопрос связанный со Scatter-файлом, а именно как разместить какой либо код(функцию или переменную, например) по определенному адресу в Keil . Не хватает знаний. Сразу скажу, ответ на вопрос искал на просторах интернета долго, пишу сюда так как недоперло до конца. Есть Scatter-файл со следующим содержанием: LR_IROM1 0x08000000 0x00080000 { ; load region size_region ER_IROM1 0x08000000 0x00080000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x20000000 0x00020000 { ; RW data .ANY (+RW +ZI) } } прогуглив, я узнал, что: LR_IROM1 – это регион(область) загрузки, ER_IROM1 – это регион(область) выполнения. Я понял так, что область загрузки это область памяти куда будет загружен нами указанный код , в данном примере код будет загружен в область, которая начинается с адреса 0x08000000 размером 0x00080000. 1) Ну что же такое регион(область) выполнения(ER_IROM1 0x08000000 0x00080000 )? Второй вопрос: 2) Если я дал правильное определение что такое "LR_IROM1", то почему в теле LR_IROM1 прописано RW_IRAM1 0x20000000 0x00020000, ведь эти адреса( 0x20000000 0x00020000) никак не входят в область 0x08000000 0x00080000 ? Кстати на не тоже натыкался, но до меня так и не доперло
  8. Приблизительно понял, спасибо!
  9. Значит тут мы настраиваем 1 - какая область ОЗУ будет задействована в процессе выполнения программы 2- в какой области флеш памяти будет храниться наша написанная программа правильно ли я понял?
  10. Я хочу понять, что имено эти настройки делают. Программироваия флеш? Не совсем понял.
  11. Всем доброго дня! Никак не могу понять, что значит вот эти настройки в keil (см. фото). Тут нужно указывать всю область оперативной памяти(1), а здесь всю область флеш памяти(2)? Если да, для чего это нужно? В общем и целом что мы этими настройками настраиваем подскажите пожалуйста? В документации читал, но там мало информации для меня, а в интернете про это практически нигде не описано.
  12. Пакеты в keil

    это никогда не умрёт)
  13. Пакеты в keil

    Дело в том, что я уже программирую МК. Есть даже проекты сделанные. И я частенько этим занимался, как вы выразились "не зависал на фигне". Ну, а теперь хочется знать даже в такой мелочевке все детали)
  14. Пакеты в keil

    Как вариант! Всем спасибо за ответы.
  15. Пакеты в keil

    Но возможность выбора ядра появится только тогда, когда ты скачаешь пакет для своего МК
×
×
  • Создать...