Jump to content

    
Sign in to follow this  
Axel

Keil, таблица векторов прерываний

Recommended Posts

13 минут назад, Axel сказал:

У кейла в компиляторе С51 есть опция "Interrupt vectors at address". Это на самом деле работает? Если да, то как? 

Я использовал это для приложения с загрузчиком на Silabs-ах.

С 0-го адреса был загрузчик,но он работал без прерываний. На всех векторах стояла заглушка JMP $+0x2000

Приложение располагалось по адресу 0x2000 (как раз этой опцией + вкладка линкера убрать галку From Target Dialog и выставить CodeRange 0x2000 - и до конца флеши). Таким образом приложение становится независимо от загрузчика.

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

Share this post


Link to post
Share on other sites
13 minutes ago, Edit2007 said:

...На всех векторах стояла заглушка JMP $+0x2000...

Понял, спасибо. Похоже это то, что надо... С фрагментом кода расставления заглушек не поможете?

Share this post


Link to post
Share on other sites

В продолжение темы... Задача была приделать бутлоадер к стороннему проекту. Это получилось: бутлоадер разместился на начальных адресах, на адресах векторов - нужные переходы. Но получилось ... не совсем: В основной программе, сдвинутой выше, присутствует библиотека, использующая прерывания. Ну и, естественно, библиотечнуе вектора никуда не сдвинулись. Соответственно вопрос: есть ли возможность переместить библиотечные вектора вслед за программой (исходников библиотеки нет, дизассеблирование (IDA PRO) не одолел)?

Share this post


Link to post
Share on other sites

Проверьте в файле startup.a51 для верхнего приложения сегмент, определяющий расположение векторов прерывания.

В файле по умолчанию (для загрузчика)

                CSEG    AT      0
?C_STARTUP:     LJMP    STARTUP1

В файле для приложения

                CSEG    AT      0x2000
?C_STARTUP:     LJMP    STARTUP1

где 0x2000 это величина смещения. Подробности в описании CSEG AT (кодовый сегмент разместить по жесткому адресу). Возможно именно это переопределяет для линкера размещение данных. При сборке приложения в выходном файле (hex-bin) не должно быть ссылок на область загрузчика.

Share this post


Link to post
Share on other sites
27 minutes ago, Edit2007 said:

Проверьте в файле startup.a51...

С этого начинал, не помогает... Все двигается, кроме векторов... Решил проблему "в лоб": достучался до разработчиков и попросил перекомпилировать с нужным смещением. Спасибо...

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