Перейти к содержанию
    

перегрузка вектора прерывания в IAR

3 часа назад, visht сказал:
17 часов назад, visht сказал:

MRKII.

так написал же ... Уотсон:)

Сорри! Не был знаком с такой штукой, решил, что это очередной англицизм типа WTF или RTFM  :biggrin:

32 минуты назад, visht сказал:

Попробовал написать в него код - нет эффекта.

Написал в нем абракадабру - нет эффекта.

подключил cstartup к проекту, и ... то же самое.

cstartup файл, приведенный в папке исходников библиотек, в ИАРе нужно самостоятельно модифицировать и подключать к проекту в явном виде. Если и при этом результата не видно, нужно копать дальше разбираясь с настройками.
По главному вопросу, как вариант: обработчик прерывания handler_10 уже есть и используется в библиотеке СLIB. А можно ли его переопределить (помечен ли он в библиотеке как PUBWEAK или нет) нужно читать пресловутый RTFM :smile:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

явно к проекту тоже подключал, но в нем тоже можно писать все что угодно, реакции никакой.

И мысли, что оно где то там, в CLIB, меня тоже не покидают.

 Пошел читать.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К сожалению, сейчас сайт iar.com упал, и не отвечает, но в кэше Гугля есть статейка на How to override and redirect library modules without rebuilding the entire library
Можно попытаться использовать опцию линковцика --redirect __write=__write_own
или в старых версиях опция -e -enew=old [,old]
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, почитаю.

частично все таки cstartup используется, если подключить к проекту.

допускает написать несвязные буквы и при этом не ругается и компилит.

В области векторов поведение его пока логике не поддается, с утра попробую выстроить всю картину.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

29 минут назад, visht сказал:

частично все таки cstartup используется, если подключить к проекту.

допускает написать несвязные буквы и при этом не ругается и компилит.

В области векторов поведение его пока логике не поддается, с утра попробую выстроить всю картину.

 

Я тоже попыталась добавить в проект копию cstartup.s52 (это ассемблер), закомметарить в нем строку

PUBLIC  ??handler_10

и метку

??handler_10:

А собственную функцию обработки 16-го прерывания назвать

handler_10

Однако от этого появились другие ошибки в другом модуле.

 

Скажите, а на кой вам сдалось прерывание IVEC_RESET_TRANSPONDER ? Ведь со всеми другими векторами такой ошибки нет.

От какого-то хоть события это прерывание?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 hours ago, Xenia said:

Скажите, а на кой вам сдалось прерывание IVEC_RESET_TRANSPONDER ? Ведь со всеми другими векторами такой ошибки нет.

От какого-то хоть события это прерывание?

 

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

 

нашел файлик Interrupts.s52 в котором по идее и рождаются эти hundler_10 и прочие, но попытка присоединить его к проекту и закрыть в нем большую часть, все равно приводит к hundler_10. Вероятно все таки в CLIB ссылка на нее формируется. 

и пока продолжаю разбираться со статьей.

Interrupts.s52

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вроде получилось.

В Interrupts.s52 описано несколько сценариев поведения (модулей)

INTERRUPTS_RETI_10 INTERRUPTS_FUNC_10 INTERRUPTS_RETI_14 INTERRUPTS_FUNC_14

Вероятно сама библиотека использует 10 и 14 в зависимости от размера таблицы векторов.

В моем случае это будут INTERRUPTS_RETI_14 INTERRUPTS_FUNC_14

и тут, вероятно, если в библиотеке нет функции на обработчике то используется INTERRUPTS_RETI_14 иначе INTERRUPTS_FUNC_14;

и так в моем случае это INTERRUPTS_RETI_14, а именно:

        MODULE  ?INTERRUPTS_RETI_14
        REPTI   addr,02,04,06,08,0A,0C,0E,12,14
        ASEGN   INTVEC:CODE:ROOT,0x<addr>
        EXTERN  transponder_interrupt // добавил
        PUBWEAK ??handler_<addr>
??handler_<addr>:
        RETI
        ENDR
        RSEG    RESET2:CODE:ROOT(1)
        PUBWEAK ??handler_10
??handler_10:
        JMP     transponder_interrupt // добавил
        //RETI - закоментировал
        RSEG    CODE:CODE:NOROOT(1)
        PUBLIC  ??handle_ints_reti_14
??handle_ints_reti_14:
        ENDMOD

Ну и определяю себе в коде функцию 

Quote

__root __interrupt void transponder_interrupt(void)

По листингу видно что стек сохраняет, т.е. прерывание обрабатывает по феншую.

Вероятно решение не самое правильное, жду критику.

По поводу --redirect:

Quote

Fatal Error[e36]: Option --redirect does not exist 

Видимо на то время когда создавался этот IAR (последние апдейты 2010) эту возможность еще не планировали.

Всем Спасибо за помощь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...