![]() |
|
Модераторы: PILOT, ManiaK, Mazzi |
![]()
|
|
| Ivan. |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 2.11.2004 Репутация: 1 Всего: 2 |
Доброе время суток.
Подскажите, можно ли создать интерфейс к ассемблерной функции, чтобы компилятор (в частности arv-g++) поместил входные параметры в указанные регистры? что-то вроде:
-------------------- Я могу ВСЁ, вопрос - сколько времени у меня это займет! |
|||
|
||||
| ФедосеевПавел |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 7.2.2009 Репутация: 1 Всего: 10 |
Для avr-gcc думаю - нет.
См. AVR-LIBC раздел "What registers are used by the C compiler?"
|
|||
|
||||
| Ivan. |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 2.11.2004 Репутация: 1 Всего: 2 |
теоретически это возможно, но у меня ни как не получается заставить 1 переменную поместить в конкретный регистр:
переменные Byte и Word2 помещяются в 0 и 30-31 регистры соответственно, а переменная Word ни в какую не хочет помещаться в r22-r23, хотя в GCC-AVR Inline Assembler Cookbook Version 1.6 есть четко описанное правило. Что я делаю не так? -------------------- Я могу ВСЁ, вопрос - сколько времени у меня это займет! |
|||
|
||||
| ФедосеевПавел |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 7.2.2009 Репутация: 1 Всего: 10 |
Не знаю.
А если asm функцию привести в соответствие с соглашением о передачи параметров? |
|||
|
||||
| Ivan. |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 2.11.2004 Репутация: 1 Всего: 2 |
asm функция - это часть модуля и я не имею возможности вносить в нее изменения
-------------------- Я могу ВСЁ, вопрос - сколько времени у меня это займет! |
|||
|
||||
| ФедосеевПавел |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 7.2.2009 Репутация: 1 Всего: 10 |
Жаль.
Сейчас у меня не установлен ни WinAVR ни AVRStudio - проверить не могу. Пока не подошли более опытные форумчане, могу посоветовать такие варианты: 1) может быть в r22-r23 невозможно одним движением записать 2 байта - а если попробовать отправить значение в r22-r23 через промежуточные регистры r28-r29 (y) или (x). 2) реализовать функцию-обёртку на асме (файл *.S) и в ней уже перераспределять данные по регистрам, вызывать RCALL AsmFunc, перераспределять результат. 3) в тексте программы каждый вызов AsmFunc переписать на встроенном асме (раз уж не получается через inline). Может быть, есть ещё способы... |
|||
|
||||
![]()
|
| Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |