Jump to content

    
Sign in to follow this  
visht

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

Recommended Posts

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

MRKII.

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites
29 минут назад, visht сказал:

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

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

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

 

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

PUBLIC  ??handler_10

и метку

??handler_10:

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

handler_10

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

 

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

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

 

Share this post


Link to post
Share on other sites
15 hours ago, Xenia said:

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

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

 

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

 

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

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

Interrupts.s52

Share this post


Link to post
Share on other sites

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

В 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) эту возможность еще не планировали.

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this