ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 апреля
668982
misyachniy (21.04.2016 14:46, просмотров: 14581)
Можно ли на чистом ARM ассемблере писать под IAR  Поискал руководства, книжки, посмотрел интернет. Есть описание архитектуры, системы команд, простые и сложные примеры. Готовых проектов нет. Решил в рукопашную. Взял проект на С, поморгать светодиодом. Скомпилировал, выдрал asm. Создал проект из двух файлов asm и icf. Проект скомпилировался и работает. Как загружать константы в регистры понятно. Не нашел информации как описывать сегмент данных в RAM? По KEIL нашел пример. Как в классике метка, переменная и обращение к ней В IAR даже директива ORG отсутствует. Написал такую секцию данных SECTION .noinit : DATA(1) DATA membase first_lcd_string DS8 0x15 display_subfunction DS8 1 При компмиляции сразу вылезла ошибка
ExampleError[Lp001]: no definition for "__iar_data_init3" [needed to initialize Error[Lp001]: no definition for "__iar_data_init3" [needed to initialize
IAR пытается прикрутить функцию инициализации RAM. В наглую в конце программы поставил метку __iar_data_init3 Компилятор скомпилировал нормально, лишних байт не добавил Понятно что в RISC нету прямых команд чтения/записи RAM. Подсмотрел как в IAR. Загружают в регистр указатель на "базовый" адрес и относительно этого регистра читают пишут. Что-то типа такого LDRB R1, [R4,#display_subfunction] Пробовал '#', '=' и просто без знака - или не компилируется или компилируется не понятно что. Переписал сегмент данных так display_subfunction_offset DS8 1 #define display_subfunction (display_subfunction_offset - memstart) Все компилируется как надо. Но писанины слишком много. Как правильно работать с RAM?