Каждый проект разбивается на функционально обособленные модули. Но пока нас интересуют только ассемблерные. Например, для данного проекта можно выделить 4 модуля:
main.s — весь алгоритм программы сидит здесь.
led.s — весь код работы со светодиодами (инициализация, поджиг, тушение).
button.s — код работы с кнопкой (инициализация, опрос).
system.s — всякая дребедень (SystemInit и delay).
В каждом модуле нужно выделить экспортируемые процедуры. Это делается ключевым словом EXPORT:
EXPORT LedInit
EXPORT LedOn
EXPORT LedOff
После этого данные символы появятся в глобальной области видимости и могут быть использованы в других модулях. Подключается отдельный символ с помощью ключевого слова IMPORT:
IMPORT символ
Подключать в каждом файле эти функции тоже не удобно. Необходимо их объявить в одном файле и подключать только его. Как include в языке С.
Такой файл записывается таким образом (led.inc):
; Драйвер светодиодов
; Плата STM32F4-Discovery
; led.inc
AREA |.text|, CODE, READONLY
; Инициализация выводов, подключённых к светодиодам
; Аргументы: нет
; Результат: нет
IMPORT LedInit
; Зажечь светодиод по его номеру
; Аргументы: 1
; R0 - номер светодиода, от 0 до 3
; Результат: нет
IMPORT LedOn
; Погасить светодиод по его номеру
; Аргументы: 1
; R0 - номер светодиода, от 0 до 3
; Результат: нет
IMPORT LedOff
END
Подключается это просто:
AREA |.text|, CODE, READONLY
GET led.inc ; Драйвер светодиодов
GET button.inc ; Драйвер кнопки
GET system.inc ; Задержка
arm_structure
main.s — весь алгоритм программы сидит здесь.
led.s — весь код работы со светодиодами (инициализация, поджиг, тушение).
button.s — код работы с кнопкой (инициализация, опрос).
system.s — всякая дребедень (SystemInit и delay).
В каждом модуле нужно выделить экспортируемые процедуры. Это делается ключевым словом EXPORT:
EXPORT LedInit
EXPORT LedOn
EXPORT LedOff
После этого данные символы появятся в глобальной области видимости и могут быть использованы в других модулях. Подключается отдельный символ с помощью ключевого слова IMPORT:
IMPORT символ
Подключать в каждом файле эти функции тоже не удобно. Необходимо их объявить в одном файле и подключать только его. Как include в языке С.
Такой файл записывается таким образом (led.inc):
; Драйвер светодиодов
; Плата STM32F4-Discovery
; led.inc
AREA |.text|, CODE, READONLY
; Инициализация выводов, подключённых к светодиодам
; Аргументы: нет
; Результат: нет
IMPORT LedInit
; Зажечь светодиод по его номеру
; Аргументы: 1
; R0 - номер светодиода, от 0 до 3
; Результат: нет
IMPORT LedOn
; Погасить светодиод по его номеру
; Аргументы: 1
; R0 - номер светодиода, от 0 до 3
; Результат: нет
IMPORT LedOff
END
Подключается это просто:
AREA |.text|, CODE, READONLY
GET led.inc ; Драйвер светодиодов
GET button.inc ; Драйвер кнопки
GET system.inc ; Задержка
arm_structure
Комментариев нет:
Отправить комментарий