Миро Самек. Построение простых систем на ARM-контроллерах с использованием инструментов GNU (перевод)
- переводы |
- Miro Samek |
- GNU |
- Bare-Metal |
- arm
Часть 5
В этой части описываются опции тонкой настройки приложения через выбор набора инструкций ARM и THUMB и размещение "горячего" кода в оперативной памяти.
5.1 Компиляция под ARM/THUMB набор инструкций
Дополним предыдущее обсуждение рассмотрением опций компилятора, позволяющих выбрать набор инструкций ("-marm" для ARM и "-mthumb" для THUMB). Выбор производится в файле "Makefile" для каждого проектного модуля отдельно. Например, в следующем фрагменте кода модуль "low_level_init.c" компилируется под набор инструкций ARM а модуль "blinky.c" - под набор THUMB:
-
# choose the ARM or THUMB compilation for each module... $(BINDIR)/low_level_init.o: $(BLDDIR)/low_level_init.c $(APP_DEP) $(CC) -marm $(CCFLAGS) $(CCINC) $< $(BINDIR)/isr.o: $(BLDDIR)/isr.c $(APP_DEP) $(CC) -marm $(CCFLAGS) $(CCINC) $< $(BINDIR)/bsp.o: $(BLDDIR)/bsp.c $(APP_DEP) $(CC) -mthumb $(CCFLAGS) $(CCINC) $< $(BINDIR)/blinky.o: $(BLDDIR)/blinky.c $(APP_DEP) $(CC) -mthumb $(CCFLAGS) $(CCINC) $<
5.2 Размещение кода в оперативной памяти (RAM)
Как отмечалось в первой части статьи, размещение активно используемых ("горячих") фрагментов кода в оперативной памяти может существенно улучшить производительность и уменьшить потребление в большинстве ARM-контроллеров.
Стартовый код и директивы компоновщика, обсуждавшиеся во второй и третьей частях, поддерживают кодовую секцию ".fastcode", которая запускается в оперативной памяти. Код этой секции располагается в программной памяти и копируется в оперативную в процессе начальной загрузки.
Есть два пути для размещения конкретной функции в секции ".fastcode":
1. Тот факт, что каждая функция помещается в отдельную секцию (опция компилятора "-ffunction-sections"), позволяет явным образом указать размещение кода каждой функции в управляющем файле компоновщика. Например, "blinky.ld" для проекта "Blinky" предлагает образец возможного расположения функции "Blinky_dispatch()" в оперативной памяти.
2. Можно разместить код функции в секции ".fastcode.text", используя директиву "__attribute__ ((section (".text.fastcode")))". В модуле "isr.c" приводится пример для функции "BSP_fiq()".
-
__attribute__ ((section (".text.fastcode"))) void BSP_fiq(void) { /* FIQ ISR*/ ... }
- блог пользователя teap0t
- 148225 просмотров
Новые записи в блогах
- Устранение дребезга контактов на основе вертикальных счетчиков
- Диагностика Imprecise Bus Faults в микроконтроллерах Cortex-M3/M4/M4F
- Self-powered камера
- Фоновый модулятор: беспроводная связь из ничего (перевод)
- Texas Instruments Analog Applications Journal SLYT612 "Снижение искажений в аналоговых КМОП ключах" (перевод)
- USB MSD. Часть 6. Команды SCSI (перевод)
- USB MSD. Часть 3. USB класс накопителей данных (перевод)
- Texas Instruments Application Report SBAA042 "Кодовые схемы, используемые в аналогово-цифровых преобразователях" (перевод)
- 10 принципов правильного интерфейса
- Релиз SDK на русский микропроцессор КРОЛИК
Recent comments
5 лет 19 недель назад
5 лет 34 недели назад
5 лет 45 недель назад
5 лет 46 недель назад
6 лет 2 недели назад
6 лет 26 недель назад
6 лет 28 недель назад
6 лет 31 неделя назад
6 лет 42 недели назад
7 лет 21 неделя назад