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

 
 
 
Reply to this topicStart new topic
> обработчик прерывания в ассемблерном файле
forever failure
сообщение Mar 29 2007, 10:23
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 256
Регистрация: 6-03-05
Из: Екатеринбург
Пользователь №: 3 112



Возможно, вопрос простейший, но однако ответ мне не попался ни в документации по компилятору, ни в поиске.
Как правильно объявить функцию-обработчик прерывания, определённую в ассемблерном исходнике?
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 29 2007, 10:26
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Все же вопрос про Си или про ASM? Где объявлять-то нужно?
Go to the top of the page
 
+Quote Post
forever failure
сообщение Mar 29 2007, 10:43
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 256
Регистрация: 6-03-05
Из: Екатеринбург
Пользователь №: 3 112



Вопрос по асму. Есть асмовский исходник, в котором опрделена функция - обработчик, скажем

;interrupt.S:

intr0_handler:
push r16
; ...
pop r16
reti

Как объявить эту фукцию (intr0_handler), чтобы она стала обработчиком прерывания INT0 ?
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 29 2007, 10:58
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(forever failure @ Mar 29 2007, 13:43) *
Как объявить эту фукцию (intr0_handler), чтобы она стала обработчиком прерывания INT0 ?

C IAR для AVR я не работал, а в IAR для MSP430 подобное объявление выглядит так
Код
ORG 0FFECh
DW TA0_ISR_HANDLER
Go to the top of the page
 
+Quote Post
forever failure
сообщение Mar 29 2007, 11:04
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 256
Регистрация: 6-03-05
Из: Екатеринбург
Пользователь №: 3 112



Что это значит:

ORG 0FFECh
DW TA0_ISR_HANDLER

и где это всё надо размещать ? Почему 0FFECh ?
Go to the top of the page
 
+Quote Post
_Bill
сообщение Mar 29 2007, 12:34
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(forever failure @ Mar 29 2007, 10:43) *
Вопрос по асму. Есть асмовский исходник, в котором опрделена функция - обработчик, скажем

;interrupt.S:

intr0_handler:
push r16
; ...
pop r16
reti

Как объявить эту фукцию (intr0_handler), чтобы она стала обработчиком прерывания INT0 ?

Например, так:
Код
        COMMON  INTVEC

        ORG     TIMER1_OVF_vect        ;;; Timer1 Overflow interrupt handler
        rjmp    Timer1Ov_Int           ;;;

;;;        ORG     TIMER0_OVF_vect        ;;; Timer0 Overflow interrupt handler
;;;        reti                           ;;;

;;        ORG     UART_RX_vect           ;;; UART receiver interrupt handler
;;       rjmp    UART_RX_Int            ;;;

        RSEG    CODE           ;;; Handlers code start

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Timer1Ov_Int:           ;;; Timer1 Overflow interrupt handler
        st      -Y, r30        ; Save used register on stack
        st      -Y,R19         ;
        in      R19,SREG       ; Save status register
        st      -Y,R19         ;

        ldi     r30, Flags             ;
        ld      r19, Z                 ; Set OFF LINE mode flag
        ori     r19, OFF_LINE_MODE     ;
        st      Z, r19                 ;

        ld      R19,Y+         ; Restore status register
        out     SREG,R19       ;
        ld      R19,Y+         ;
        ld      r30, Y+        ;
        reti
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 29 2007, 12:43
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(forever failure @ Mar 29 2007, 09:43) *
Как объявить эту фукцию (intr0_handler), чтобы она стала обработчиком прерывания INT0 ?

Код
    COMMON    INTVEC:CODE:ROOT(1); Align at an even address
    ORG        INT0_vect
    RJMP    intr0_handler


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
forever failure
сообщение Mar 29 2007, 12:58
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 256
Регистрация: 6-03-05
Из: Екатеринбург
Пользователь №: 3 112



Ага, вроде получается то, что надо.
Thanxx!

Всё равно надо будет более детально курнуть матчасть.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 29 2007, 17:38
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



В продолжение темы...
А как передать в asm-файл имена переменных объяеленных в других C-файлах?
Ведь не напишешь
#include "somefile.h"
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 29 2007, 22:21
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(_Артём_ @ Mar 29 2007, 16:38) *
А как передать в asm-файл имена переменных объяеленных в других C-файлах?
Код
если somefile.h:
extern char variable1
extern int variable2
extern struct mytype variable3
extern float variable4
то somefile.inc:
   EXTERN variable1, variable2
   EXTERN variable3
   EXTERN variable4
otherfile.asm:
#include "somefile.inc"


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_Bill
сообщение Mar 30 2007, 10:24
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(Сергей Борщ @ Mar 29 2007, 22:21) *
Код
если somefile.h:
extern char variable1
extern int variable2
extern struct mytype variable3
extern float variable4
то somefile.inc:
   EXTERN variable1, variable2
   EXTERN variable3
   EXTERN variable4
otherfile.asm:
#include "somefile.inc"

Предвижу следующий вопрос: "Как передать в Си файлы имена переменных, объявленных в асм файлах?".
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 30 2007, 12:24
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(_Bill @ Mar 30 2007, 09:24) *
Предвижу следующий вопрос: "Как передать в Си файлы имена переменных, объявленных в асм файлах?".
Отвечать? biggrin.gif
Код
если otherfile.asm
   PUBLIC variable1, variable2
   PUBLIC variable3
   PUBLIC variable4

то somefile.h:
extern char variable1;
extern int variable2;
extern struct mytype variable3;
extern float variable4;
Да, если С++, то extern "C" char variable1; и т.д.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 30 2007, 17:05
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Правильно предвидите.
Спасибо за ответы...
Go to the top of the page
 
+Quote Post
forever failure
сообщение Mar 31 2007, 14:29
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 256
Регистрация: 6-03-05
Из: Екатеринбург
Пользователь №: 3 112



Ув. модераторы, раз уж тему перенесли из первоначального контекста, отметьте где-нить сверху, что речь идёт про IARовский компилятор для AVR.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 31 2007, 15:01
Сообщение #15


Гуру
******

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



Цитата(forever failure @ Mar 31 2007, 13:29) *
речь идёт про IARовский компилятор для AVR.

Компилятор и уж тем более контроллер совершенно не принципиальны.
Буде существуют нюансы - просите компилятор сгененрить ASM текст из него за совершенно спокойно черпаете всю необходимую информацию по сути задаваемых вопросов.
Это, конечно, если совсем лень с документаций ознакомиться.


--------------------
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 Текстовая версия Сейчас: 18th July 2025 - 18:01
Рейтинг@Mail.ru


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