Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2018-дек-14 07:50

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
СообщениеДобавлено: 2015-мар-01 21:58 
Не в сети

Зарегистрирован: 2011-янв-26 17:34
Сообщения: 38
Здравствуйте! Начинаю осваивать ассемблер для 1986ВЕx.
Скажите, пожалуйста, как можно вызвать в этом ассемблере функцию?
Т.е., как создать в Thumb структуру, аналогичную в ассемблере для PIC-контроллеров:

Function:
...
RETURN

Start:
...
CALL Function
...
GOTO Start
END

Какой командой заменяется CALL, RETURN? На стр.115 описания команд B, BL, BX и BLX в примерах нашёл команду BX LR ; возврат из функции.
Регистр связи LR R14
Link Register - это регистр R14. Регистр используется для сохранения информации об адресе
возврата при уходе на обработку прерываний, вызовах функций и обработке исключений.
Т.е., RETURN - это BX LR? А что соответствует CALL ?
Чему соответствует команда "возврат из прерывания RETFIE"


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-мар-02 16:09 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 407
Цитата:
А что соответствует CALL ?

стр 123 описания. Примеры команд
Цитата:
BL funC ; переход со связью (вызов функции) funC, адрес возврата будет
; записан в регистре LR

Но более правильная документация в описании на утилиту, которая будет обрабатывать ваш асм-файл. Мало ли каких плюшек они там напридумали.

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-мар-02 22:52 
Не в сети

Зарегистрирован: 2011-янв-26 17:34
Сообщения: 38
Уважаемый редактор. Спасибо за ответ. Странно, как я не заметил предложенную Вами команду, которая находится одной строкой выше той инструкции, которую нашёл я...
Цитата:
Но более правильная документация в описании на утилиту, которая будет обрабатывать ваш асм-файл. Мало ли каких плюшек они там напридумали.

Думаю над этой фразой и не понимаю, как поступать. Разве асм-команды не есть однозначное соответствие цифровому коду этой команды, а, значит, и однозначному её исполнению?
Какие утилиты Вы имеете ввиду? Их же "живьём" не видно в составе мощных громоздких компиляторов? Согласен с Вами, что в этих джунглях напридумать и спрятать можно очень многое.
И тем более, где взять на них (утилиты) "правильную документацию"?

Хочу отметить, что в интернете очень мало информации (примеров ассемблерного кода) для этих контроллеров. По-видимому, все пишут на Си и не спешат влиться в ряды сумасшедших...Шутка.
Хотелось бы узнать Ваше мнение и отношение к этому ассемблеру.
Из имеющейся у меня информации, я выписал все команды, которые встречались в собранных примерах и в листингах. Получилось менее одной страницы (всего в руководстве - 4 неполных страницы). Что Вы скажете по этому поводу?.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-мар-03 11:57 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 407
Цитата:
Какие утилиты Вы имеете ввиду?

например GCC использует свой обработчик асм-файлов, Keil - свой. Возможно есть другие, менее популярные наборы компиляции. Соответственно документация по синтаксису и командной строке у разработчиков.
Цитата:
Разве асм-команды не есть однозначное соответствие цифровому коду этой команды, а, значит, и однозначному её исполнению?

асм команды, определенные разработчиком есть однозначное соответствие цифровому коду этой команды. Но кроме этого файл может содержать метки, объявление переменных, макроподстановки. Вот вся эта шелуха может отличатся.
Для избежания ошибок и рекомендовано обращаться к документации, где описывается применение тех или иных методов.
Цитата:
Хочу отметить, что в интернете очень мало информации (примеров ассемблерного кода) для этих контроллеров. По-видимому, все пишут на Си и не спешат влиться в ряды сумасшедших...Шутка.
Хотелось бы узнать Ваше мнение и отношение к этому ассемблеру.

Отношение к ассемблеру - нейтральное.Просто инструмент для работы. все пишут на Си (Си++) потому, что есть ряд преимуществ.
1. Более простое сопровождение и отладка.
2. Возможность переносить ко между платформами. Даже заголовочные файлы для прошивки МК и проверчной поги под Win(Lin) могут быть одни и те же, что позволяет минимизировать ошибки в определении полей структур или enum.
3. Удобочитаемость. Математические выражения на Си выглядят более наглядными, чем асм-конструкции.
На асм в основном пишут стартап файлы (настройка стека, инициализация памяти), или критичные куски кода (когда уверены, что сделают это лучше компилятора).

Отговаривать от изучения асм не буду, знать (хотябы в общих чертах) надо.Иногда помогает. Но работать только в асм - не для меня.
Поставте для себя эксперимент: реализуйте небольшой алгоритм на Си и на Асм - это позволит сравнить время на разработку.
Потом сравните асм-листинг компилятора и свой - это позволит сравнить оптимальность кода.
Отложите этот проект. А через 2-3 месяца (или полгода) попробуйте вернуться, вспомнить что для чего делалось и внести небольшие коррективы. Это об удобстве сопровождения.

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-мар-11 18:13 
Не в сети

Зарегистрирован: 2011-янв-26 17:34
Сообщения: 38
Ещё вопрос.
При компиляции в Кейле пробной asm программы выдаётся ошибка:
Код:
\Objects\proj01.sct(7): error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.

Указатель ошибки указывает на sct-файл (четвёртая строка кода с учётом первой строки-комментария):
Код:
*.o (RESET, +First)

в файле:
Код:
; *** Scatter-Loading Description File generated by μVision ***
LR_IROM1 0x08000000     0x00020000  {    ; load region size_region
  ER_IROM1 0x08000000   0x00020000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00008000  {  ; RW data
   .ANY (+RW +ZI)
  }
}

Я, конечно, смотрел в Help-е, что означает её код, но ничего не понял. Смутно представляю, что линковщик располагает различные типы кода по "ареалам" и ареалам даёт названия... Синтаксис этого файла совсем непонятен. А файл, кажется, самостоятельно генерируется Кейлом.
Подскажите, пожалуйста, как исправить ошибку.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-мар-17 07:15 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 407
Цитата:
Смутно представляю, что линковщик располагает различные типы кода по "ареалам" и ареалам даёт названия... Синтаксис этого файла совсем непонятен. А файл, кажется, самостоятельно генерируется Кейлом.

Совершенно верно. *sct - это файл для линкера.По умолчанию генерится системой, но в настройках есть галочка - она позволяет задать свой sct-файл.
Названия секций (AREA) указываются в *.s файлах. Секция FERST описана в стартап-файле, там располагается таблица векторов. и она имеет приоритет размещения.
если надо побыстрее (не вникая в доки) рекомендую сделать заготовку на *.с (пустую функцию) скомпилировать с получением асм исходника, затем откорректировать асм-файл и добавить его в проект вместо первоначального *.с файла.
Либо читать документацию на ассемблер и линкер.

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-апр-02 20:36 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 254
Неплохая информации по асму (с примерами ассемблеров Keil, GNU) и смешанным проектам асм/Cи (в частности вызов функций) есть у Джозефа Ю. в 20 главе книги The Definitive Guide to the ARM Cortex-M3 and Cortex-M4 Processors; 3rd Edition; Joseph Yiu; Newnes; 600 pages; 2013; ISBN 978-0124080829. http://www.twirpx.com/file/1451220 http://www.twirpx.com/file/1136949/ (глава 10.5)
Также есть апноут перехода с PIC на ARM http://infocenter.arm.com/help/index.js ... index.html
Есть книга Assembly Language Programming : ARM Cortex-M3; 1st Edition; Vincent Mahout; Wiley-ISTE; 256 pages; 2012; ISBN 978-1848213296. http://www.twirpx.com/file/1340265/
Но конечно в ARM-ассемблер лучше не влезать, потому как архитектура ARM уже заточена на нормальную генерацию компиляторами машинных команд с языка Си (причём на ARM код Си исполнятся достаточно быстро, если код Си писать, грамотно понимая архитектуру микроконтроллера и не использовать левые библиотеки, а только свой наработанный код), а на асме оптимизировать если уж очень критичные ко времени или коду места (а так можно набить программу на Си, включить листинг с Си, включить оптимизацию -O0 и посмотреть для примера, какие инструкции асма использует компилятор для тех или иных задач и поэкспериментировать с написанием кода на Си).
Вообще для асссемблера ARM есть определённые соглашения относительно использования регистров, стека и компоновки файла асм-кода - это описано у Джозефа Ю.
Startup файл (его достаточно для нормальной работы микросхемы - вызова прерываний и т.п.) лучше взять готовый из библиотеки Миландр - благо он ассемблерный .s - ну а потом уже катать код в main.s - настройка тактирования ФАПЧ, периферии и т.п.
Ассемблерный кусок я использовал в Си, когда писал свой бутлоадер и связывал два проекта кода вместе в Keil (и нужно читать доки на ассемблер среды, в которой пишешь ассемблерный код) - пример нашёл в интернете опять же на форуме http://www.arm.com за авторством Дж. Ю http://community.arm.com/message/6578:
Открыть
#define MainVectorTableAddr 0x08001000

__asm void JumpMainProgr(void)
{
NOP
LDR R0, =MainVectorTableAddr ; Starting address of MainProgr
LDR R1, [R0] ; Get initial MSP value
MOV SP, R1 ; Set SP value
LDR R1, [R0, #4] ; Get initial PC value
BX R1
}

int main(void)
{...
SCB->VTOR = MainVectorTableAddr;
__DSB();

JumpMainProgr();
...
}
Закрыть

И кстати ARM стандартизирует библиотеку-ядро CMSIS http://www.arm.com/products/processors/ ... andard.php - написана на Си, а компания Keil входит в состав компании ARM, к слову говоря http://en.wikipedia.org/wiki/Keil_(company)
Открыть
In October 2005, Keil (Keil Elektronik GmbH in Munich, Germany, and Keil Software, Inc. in Plano, Texas) were acquired by ARM.[4]
Закрыть

_________________
Hack the Planet!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-май-15 19:31 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 254
http://we.easyelectronics.ru/psv/zapisk ... u-asm.html
http://we.easyelectronics.ru/sasha85ru/ ... -keil.html

http://gimmor.blogspot.ru/2013/03/mdr32 ... ample.html

_________________
Hack the Planet!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB