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

 
 
 
Reply to this topicStart new topic
> Вектора прерываний в .ASM STM8 IAR, Создание обработчика прерывания на ASM
AShurick
сообщение May 27 2011, 15:22
Сообщение #1





Группа: Участник
Сообщений: 5
Регистрация: 4-10-09
Из: Киев Украина
Пользователь №: 52 743



Суть проблемы: Есть обработчик прерывания написанный на ассемблере. Как прописать вектор прерывания на обработчик в ASM файле? В IAR трансляторе ассемблера для AVR можно было сделать так:
Код
        NAME IntTable
        extern switch_int
        COMMON INTVEC(1)
        ORG TIMER0_OVF_vect
        JMP switch_int
        ENDMOD


А вот под STM8 вектора прерывания вставляются перед векторами размещенными С компилятором по коду:
Код
        section   .intvec:CODE
;-------------------------------------------------------------------------------
        DS32    1;RESET
        DS32    1;TRAP
        DS32    1;NMI
        DC32    $82000000 + switch_int
       .........................


Или вектора прерываний затираются векторами определенными в С программе
Код
        section   .intvec:CODE:NOROOT(2)
;-------------------------------------------------------------------------------
        DS32    1;RESET
        DS32    1;TRAP
        DS32    1;NMI
        DC32    $82000000 + switch_int


Сразу поясняю что нужно мне именно на ассемблере, т.к. это процедура переключения контентов в своей кооперативной ОС.

Сообщение отредактировал IgorKossak - May 27 2011, 20:05
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 27 2011, 20:18
Сообщение #2


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Если я правильно понял, у IAR/STM8 таблицы векторов изначально заполнена weak-метками вида _interrupt_1
Достаточно в исходнике объявить метку с таким именем и линкер вместо адреса weak-затычки из библиотеки поставит адрес этой метки.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
AShurick
сообщение May 28 2011, 06:28
Сообщение #3





Группа: Участник
Сообщений: 5
Регистрация: 4-10-09
Из: Киев Украина
Пользователь №: 52 743



Цитата(ReAl @ May 27 2011, 23:18) *
Если я правильно понял, у IAR/STM8 таблицы векторов изначально заполнена weak-метками вида _interrupt_1
Достаточно в исходнике объявить метку с таким именем и линкер вместо адреса weak-затычки из библиотеки поставит адрес этой метки.

Пробовал в ASM вставлять метки типа _interrupt_3: или как на C AWU_vector: - результат полный игнор. Линкер вставляет в вектора прерываний заглушки, т.е. затирает таблицу векторами определенными в C файле.
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 28 2011, 06:52
Сообщение #4


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Странно... «Должно бы работать»™, судя по идеологии инструмента.
Ну до STM8 я доберусь через недели две (в понедельник уезжаю, а до этого дел много), когда опять буду ковырятья в порте scmRTOS для IAR/STM8 и как раз добавлять переключатель контекстов специально выделенным прерыванием. Тогда и посмотрю.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
AShurick
сообщение May 28 2011, 12:35
Сообщение #5





Группа: Участник
Сообщений: 5
Регистрация: 4-10-09
Из: Киев Украина
Пользователь №: 52 743



Действительно, немного протупил. Вектора прерываний объявлены как WEAK метки вида _interrupt_N. Но, чтобы прием сработал на ассемблере, необходимо метку сначала объявить видимой оператором public, например: public _interrupt_3. И о чудо, при сборке проекта в векторах прерывания появляется вектор на наш обработчик нарисованный на ASM, с меткой входа _interrupt_3:. Так что проблема решена.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 17:43
Рейтинг@Mail.ru


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