[i] Расположение функций в ОЗУ в IDE Keil
В данной статье рассмотрено расположение функций в ОЗУ в IDE Keil на примере МК семейства К1986ВЕ9x. Для других МК настройки будут аналогичными (К1901ВЦ1QI, К1986ВК214, К1986ВК234, семейство К1986ВЕ1x).
Сначала в scatter-файл в область IRAM1 (для МК семейства К1986ВЕ1x - это область IRAM2, к которой есть доступ по шине AHB_Lite) необходимо добавить секцию, например, "EXECUTABLE_MEMORY_SECTION", как реализовано в SPL. Далее функции, которые требуется разместить в ОЗУ, необходимо объявить с атрибутом __attribute__((section("EXECUTABLE_MEMORY_SECTION"))), который сообщает компилятору, что данную функцию требуется разместить в секцию с именем "EXECUTABLE_MEMORY_SECTION".
Scatter-файлы с добавленной секцией "EXECUTABLE_MEMORY_SECTION" входят в состав Software Pack и располагаются в папке RTE\Device\"MCU" относительно проекта. Подключение scatter-файла к проекту выполняется в опциях проекта, вкладка Linker. Необходимо убрать опцию "Use Memory Layout from Target Dialog", и далее указать требуемый scatter-файл в поле "Scatter File", рисунок 1.
Рисунок 1 - Подключение scatter-файла к проекту для К1986ВЕ92x
Пример scatter-файла для МК семейства К1986ВЕ9x приведен во фрагменте кода 1.
Фрагмент кода 1 - Scatter-файл для МК семейства К1986ВЕ9x из состава Software Pack
; ******************************************************************************
; ************* Scatter-Loading Description File for K1986VE9xI ****************
; ******************************************************************************
LR_IROM1 0x08000000 0x00020000 { ; load region size_region
ER_IROM1 0x08000000 0x00020000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
.ANY (+XO)
}
RW_IRAM1 0x20000000 0x00008000 { ; RW data
*.o (EXECUTABLE_MEMORY_SECTION)
.ANY (+RW +ZI)
}
}
Более подробно про scatter-файл можно прочитать в документации на официальном сайте IDE Keil
Сохранить статью в PDFПрограммное обеспечение