реклама на сайте
подробности

 
 
> С + ASM прерывание, простой вопрос
SasaVitebsk
сообщение May 21 2007, 12:38
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Касается IAR для AVR.
Как мне подключить ASM файл к проекту? Можно просто добавить его. Компилятор поймёт?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение May 21 2007, 18:45
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Спасибо за быстрый ответ. Хотелось бы ещё уточнений. Я перечитал документы и примеры приведённые на Atmel и в составе IAR и некоторые моменты всётаки не понял. Не бейте больно.

1) На сколько я понял соглашение о передаваемых параметрах (в смысле их привязки к регистрам) действует только на extern функции? Внутри одного файла сам компилятор может поступать как ему заблагорассудится?
2) В приведенных примерах написания функций на асме не видно чтобы сохранялись какие либо регистры. Компилятор что анализирует прогу асм на предмет использования регистров? Вроде бы так не должно быть, так как ассемблирование осуществляется после компиляции, а регистры должны быть определены до линковки? sad.gif Или, что более правдоподобно, определены регистры, которыми я могу пользоваться? Очень похоже, что это регистры R0-R3,R16-R23,R30,R31 вне зависимости от числа вызываемых параметров. Не пинайте пожалуйста, подтвердите или опровергните.

Да, здесь идёт речь не о прерывании, а о функции на ассемблере.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение May 21 2007, 18:58
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(SasaVitebsk @ May 21 2007, 21:45) *
Спасибо за быстрый ответ. Хотелось бы ещё уточнений. Я перечитал документы и примеры приведённые на Atmel и в составе IAR и некоторые моменты всётаки не понял. Не бейте больно.

1) На сколько я понял соглашение о передаваемых параметрах (в смысле их привязки к регистрам) действует только на extern функции? Внутри одного файла сам компилятор может поступать как ему заблагорассудится?
2) В приведенных примерах написания функций на асме не видно чтобы сохранялись какие либо регистры. Компилятор что анализирует прогу асм на предмет использования регистров? Вроде бы так не должно быть, так как ассемблирование осуществляется после компиляции, а регистры должны быть определены до линковки? sad.gif Или, что более правдоподобно, определены регистры, которыми я могу пользоваться? Очень похоже, что это регистры R0-R3,R16-R23,R30,R31 вне зависимости от числа вызываемых параметров. Не пинайте пожалуйста, подтвердите или опровергните.

Да, здесь идёт речь не о прерывании, а о функции на ассемблере.

1. И внутри одного файла компилятор следует указанному правилу.
2. Смотря какие регистры. Рабочие регистры (Вы их привели) не сохраняются, об этом заботится участок кода, вызывающий данную функцию. Остальные используемые регистры должны сохраняться в стеке данных. Параметры передаются через R16-R23, через пары X и Z(при вызове функций с аттрибутами __x_z) и через стек данных если регистров оказалось мало. Но если до этого уже дошло, то уж лучше на С писать.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 18:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01386 секунд с 7
ELECTRONIX ©2004-2016