|
|
 |
Ответов
|
Jan 4 2009, 13:50
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 19-12-08
Пользователь №: 42 616

|
нашел я где собачка порылась.
при инициализации локальных переменных (а именно массивов) компилятор использует функцию memcpy32, при этом вызов memcpy32 делает через таблицу векторов.
Решение проблемы : Поставил в опциях Library Calls -> Direct
P.S. однако рано радовался. функция atoi не хочет отказываться от вызовов через таблицу векторов. как быть?
Сообщение отредактировал yuragv - Jan 4 2009, 14:26
|
|
|
|
|
Jan 4 2009, 16:32
|

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

|
Цитата(yuragv @ Jan 4 2009, 15:50)  функция atoi не хочет отказываться от вызовов через таблицу векторов. как быть? Функция уже скомпилирована в библиотеку, значит надо подключить другой вариант библиотеки (если таковой имеется) или обеспечить работоспособность вызовов через векторы. Не знаком с архитектурой H8S, не могли бы вы кратенько изложить ее особенности, как физически реализуются вызовы через таблицу векторов и для чего используется именно такой механизм? По аналогии с AVR и MSP430 могу предположить, что вам надо было таблицу векторов расположить в файле линкера с адреса 0x6200, а в загрузчике сделать перенаправление свободных векторов из таблицы загрузчика на таблицу приложения. Таким образом приложение будет менее всего завязано на загрузчик и переход с варианта "с загрузчиком" на вариант "без загрузчика" сведется к замене _..X_ROM_START_ с 0x6200 на 0x0000: Код -D_..X_ROM_START_=0x6200 /* * The '_..X_' prefix is used by C-SPY as an indication that the label should * not be displayed in the dissassembly window. */ -P(CONST)INTVEC=_..X_ROM_START_-(_..X_ROM_START_+3FF) -P(CONST)FLIST=(_..X_ROM_START_+40)-(_..X_ROM_START_+FF) -P(CODE)CODE24=_..X_ROM_START_-1FFFF -P(CONST)DATA32_ID,DATA32_C=_..X_ROM_START_-1FFFF -Z(CONST)DIFUNCT,CHECKSUM=_..X_ROM_START_-1FFFF
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 5 2009, 10:23
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 19-12-08
Пользователь №: 42 616

|
в загрузчике все вектора перенаправлены на адрес 0x6000+addr_vector. изначально я свои прерывания в программе так и прописал Код org 6000H jmp @__start_program
org 6080H jmp @int_sys_timer
и т.д. но какие функции используються в библиотеках я не знаю. а перенести таблицу FLIST на адрес 0x6000 компилятор не дает. пишет Range Error. Да и не поможет это. Дело в том что в таблице векторов прописаны адреса. а нужна команда jmp @addr. Поэтому пока пришлось сделать некрасиво. В готовом бинарнике внешней программой переношу таблицу векторов на адрес 0x6000, преобразовывая адрес в команду jmp @addr. p.s. через таблицу векторов как я понимаю - более быстрый вызов фунцкии. процессор работает в расширенно режиме с 24-битной адресацией. а так короткий восьмибитный адрес получаеться.сильно честно говоря не вникал.
Сообщение отредактировал yuragv - Jan 5 2009, 10:23
|
|
|
|
Сообщений в этой теме
yuragv Не могу включить оптимизацию, иниализировать переменные Dec 19 2008, 22:01 yuragv IAR 2.10 проц Hitachi H8. модель памяти HUGE.
Потр... Dec 20 2008, 16:57 yuragv модератор собрал два мои сообщения в одну тему, но... Dec 20 2008, 19:10 Сергей Борщ Цитата(yuragv @ Dec 20 2008, 18:57) Не пр... Dec 22 2008, 22:25  yuragv xcl-файл полностью
-ch8
-P(CONST)INTVEC=0-3FF
-P(... Dec 23 2008, 09:15   yuragv вопрос с оптимизацией решен.
осталось только разо... Dec 25 2008, 12:32 sergik_vrn Цитата(yuragv @ Dec 20 2008, 01:01) Иар 2... Dec 22 2008, 06:46 yuragv ссылка на листинг
http://upload.com.ua/get/9006126... Dec 22 2008, 20:44 Сергей Борщ Цитата(yuragv @ Dec 23 2008, 11:15) отлад... Dec 25 2008, 14:05 yuragv Спасибо большое за ответы.
Я прошу прощения за сум... Dec 28 2008, 15:50  Сергей Борщ Цитата(yuragv @ Dec 28 2008, 17:50) я соо... Dec 28 2008, 18:51   yuragv org 6000H
jmp @__program_start
; ... Dec 28 2008, 19:24    Сергей Борщ Цитата(yuragv @ Dec 28 2008, 21:24) org 6... Dec 28 2008, 19:45    yuragv может подскажите еще такую вещь:
процессор 16-ти ... Dec 28 2008, 20:01     HARMHARM Цитата(yuragv @ Dec 28 2008, 22:01) как с... Dec 28 2008, 20:16      yuragv Кодvoid FuncTest(void)
{
byte buf[... Dec 28 2008, 20:40       Сергей Борщ А что показывает листинг? Dec 29 2008, 06:08     yuragv спасибо. пока оставлю так как есть. тем более что ... Jan 5 2009, 13:26
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|