Axel 1 2 августа, 2019 Опубликовано 2 августа, 2019 · Жалоба У кейла в компиляторе С51 есть опция "Interrupt vectors at address". Это на самом деле работает? Если да, то как? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Edit2007 3 2 августа, 2019 Опубликовано 2 августа, 2019 · Жалоба 13 минут назад, Axel сказал: У кейла в компиляторе С51 есть опция "Interrupt vectors at address". Это на самом деле работает? Если да, то как? Я использовал это для приложения с загрузчиком на Silabs-ах. С 0-го адреса был загрузчик,но он работал без прерываний. На всех векторах стояла заглушка JMP $+0x2000 Приложение располагалось по адресу 0x2000 (как раз этой опцией + вкладка линкера убрать галку From Target Dialog и выставить CodeRange 0x2000 - и до конца флеши). Таким образом приложение становится независимо от загрузчика. В сухом остатке - Keil может разместить таблицу векторов по этому адресу, но физически прерывания будут срабатывать по фиксированным адресам. Переход с фиксированного адреса на перенесеный нужно обеспечивать ручками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 2 августа, 2019 Опубликовано 2 августа, 2019 · Жалоба 13 minutes ago, Edit2007 said: ...На всех векторах стояла заглушка JMP $+0x2000... Понял, спасибо. Похоже это то, что надо... С фрагментом кода расставления заглушек не поможете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mcheb 0 2 августа, 2019 Опубликовано 2 августа, 2019 · Жалоба На гитхабе есть * CC Bootloader от Fergus Noble. Посмотрите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 2 августа, 2019 Опубликовано 2 августа, 2019 · Жалоба 13 minutes ago, mcheb said: На гитхабе есть * CC Bootloader от Fergus Noble. Посмотрите. Посмотрел, идею понял, спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 4 августа, 2019 Опубликовано 4 августа, 2019 · Жалоба В продолжение темы... Задача была приделать бутлоадер к стороннему проекту. Это получилось: бутлоадер разместился на начальных адресах, на адресах векторов - нужные переходы. Но получилось ... не совсем: В основной программе, сдвинутой выше, присутствует библиотека, использующая прерывания. Ну и, естественно, библиотечнуе вектора никуда не сдвинулись. Соответственно вопрос: есть ли возможность переместить библиотечные вектора вслед за программой (исходников библиотеки нет, дизассеблирование (IDA PRO) не одолел)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Edit2007 3 5 августа, 2019 Опубликовано 5 августа, 2019 · Жалоба Проверьте в файле startup.a51 для верхнего приложения сегмент, определяющий расположение векторов прерывания. В файле по умолчанию (для загрузчика) CSEG AT 0 ?C_STARTUP: LJMP STARTUP1 В файле для приложения CSEG AT 0x2000 ?C_STARTUP: LJMP STARTUP1 где 0x2000 это величина смещения. Подробности в описании CSEG AT (кодовый сегмент разместить по жесткому адресу). Возможно именно это переопределяет для линкера размещение данных. При сборке приложения в выходном файле (hex-bin) не должно быть ссылок на область загрузчика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 5 августа, 2019 Опубликовано 5 августа, 2019 · Жалоба 27 minutes ago, Edit2007 said: Проверьте в файле startup.a51... С этого начинал, не помогает... Все двигается, кроме векторов... Решил проблему "в лоб": достучался до разработчиков и попросил перекомпилировать с нужным смещением. Спасибо... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться