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

 
 
 
Reply to this topicStart new topic
> Помогите с прерываниями
RedPlanet
сообщение Mar 20 2008, 20:12
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 20-02-08
Пользователь №: 35 232



Необходимо написать проект на Си, в котором прерывания будут полностью написаны на ассемблере. В "Mixing C and Assembly Code with IAR.pdf" приведен пример:
Код
NAME EXT_INT1
#include "iom128.h"
extern c_int1
COMMON INTVEC(1)
ORG INT1_vect
RJMP c_int1
ENDMOD

NAME c_int1
#include "iom128.h"
PUBLIC c_int1
RSEG CODE

c_int1:
    st -Y,R16
    in R16,SREG
    st -Y,R16
    in R16,PIND
    com R16  
    out PORTB,R16
    out SREG,R16
    ld R16,Y+
    reti
END

но при компиляции ИАР выдает ошибку на строке RJMP c_int1:
Код
Error[40]: Bad instruction
не могу понять в чем проблема.
Также непонятна строка "COMMON INTVEC(1)", какой у нее параметр.
Подскажите пожалуйста.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 20 2008, 20:32
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(RedPlanet @ Mar 20 2008, 23:12) *
но при компиляции ИАР выдает ошибку на строке RJMP c_int1:
Код
Error[40]: Bad instruction

не могу понять в чем проблема.

А что, там, откуда Вы сие брали rjmp тоже начинается БЕЗ ОТСТУПА С НАЧАЛА СТРОКИ? Прикол такой у этого ассемблера sad.gif
Цитата
Также непонятна строка "COMMON INTVEC(1)", какой у нее параметр.

Ну и что конкретно в документации Вам не понятно?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
RedPlanet
сообщение Mar 20 2008, 20:54
Сообщение #3





Группа: Новичок
Сообщений: 2
Регистрация: 20-02-08
Пользователь №: 35 232



И все мои мучения были из-за пробела?!?! Большое спасибо, все компилируется, я даже и подумать не мог, что пробел в том месте может быть настолько важным.
А по поводу "COMMON INTVEC(1) ; Code in interrupt vector segment" - код в сегменте прерывания, так что-ли... пока ничего не понятно...

Сообщение отредактировал RedPlanet - Mar 20 2008, 20:55
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 20 2008, 21:08
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(RedPlanet @ Mar 20 2008, 23:54) *
А по поводу "COMMON INTVEC(1) ; Code in interrupt vector segment" - код в сегменте прерывания, так что-ли... пока ничего не понятно...

А чего это Вы вольным переводом слов решили заняться? Это ведь не комментарии - это инструкции Ассемблера - читайте Assembler Reference про COMMON. Что Вам про выравнивание сегмента не понятно?



Цитата(RedPlanet @ Mar 20 2008, 23:54) *
..я даже и подумать не мог, что пробел в том месте может быть настолько важным.

Я и говорю - прикол такой. Писать в таком стиле, конечно моветон, но я со своей привычкой временные вставочки исходниках начинать с первой позиции сильно такими шутками был не обрадован.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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