|
Конец таблицы векторов прерываний, Как определить? |
|
|
|
 |
Ответов
|
Jul 16 2006, 17:52
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(prottoss @ Jul 16 2006, 19:58)  Собственно, суть вопроса в названии темы. Есть ли в ИАРЕ какие нибудь нормальные способы определить конец таблицы векторов. Необходимо именно после таблицы загнать некоторые константы. Я понимаю, что можно заглянуть в хедер МК, под который пишется проект, и с помощью #pragma location указать место компилятору, но хотелось бы узнать более грамотный способ, чтобы можно было портировать проект на другой МК, без лишних правок проекта...
Спасибо. Если узнать и разместить надо на этапе компиляции - то в .xcl определить свой сегмент сразу после определения INTVEC и до остальных кодовых сегментов. В этот сегмент и поместить нужное. Если на этапе выполнения - __segment_end("INTVEC") в С и SFB(INTVEC) в асм.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 17 2006, 08:15
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(prottoss @ Jul 16 2006, 21:14)  Цитата(Сергей Борщ @ Jul 17 2006, 01:52)  Если узнать и разместить надо на этапе компиляции - то в .xcl определить свой сегмент сразу после определения INTVEC и до остальных кодовых сегментов. В этот сегмент и поместить нужное. Если на этапе выполнения - __segment_end("INTVEC") в С и SFB(INTVEC) в асм. Да, это работает, спасибо. Но хотелось бы, чтобы конец сегмента, или начало требуемого массива в тексте модуля *.с, а не в *.xcl , и адрес вычислялся на этапе компиляции Стоп. Вычислялся адрес или размещались данные? Для вычисления адреса вполне работает intrinsic-функция __segment_end("INTVEC"). А рулить размещением из .C можно только в одном случае: размещение констант по абсолютному адресу. Во всех остальных случаях это невозможно, ибо С с адресами не работает. Он знает только смещения в пределах перемещаемого сегмента (участка сегмента), а абсолютные адреса взамен этих смещений проставляет линкер после размещения сегмента. Возможно имеет место неправильный подход к проблеме. Если программа не использует прерываний то INTVEC состоит из одного вектора (RESET). Далее возможны два варианта в зависимости от содержания .xcl: следующий за этим сегментом адрес будет равен двум(байтам) либо будет "дырка" на неиспользуемые вектора. Но опять же предугадать какой вариант будет в конкретном случае не смотря в .xcl невозможно. Может вы изложите задачу более подробно, с каким-нибудь примитивным примером?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
prottoss Конец таблицы векторов прерываний Jul 16 2006, 16:58  zltigo Цитата(prottoss @ Jul 16 2006, 21:14) Но ... Jul 17 2006, 06:46   prottoss Цитата(Сергей Борщ @ Jul 17 2006, 16:15) ... Jul 17 2006, 08:53    zltigo Цитата(prottoss @ Jul 17 2006, 11:53) ..а... Jul 17 2006, 09:44     prottoss Цитата(zltigo @ Jul 17 2006, 17:44) Цитат... Jul 17 2006, 10:13 arttab Можно написать сою библиотеку, которая по define ч... Jul 17 2006, 02:12 IgorKossak Простых через некоторое интересное место может и н... Jul 17 2006, 12:44 zltigo Цитата(IgorKossak @ Jul 17 2006, 15:44) Н... Jul 17 2006, 12:57 prottoss Цитата(IgorKossak @ Jul 17 2006, 20:44) Н... Jul 17 2006, 13:05 IgorKossak Цитата(prottoss @ Jul 16 2006, 19:58) ...... Jul 17 2006, 13:19
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|