Перейти к содержанию
    

Как можно так хитро слинковать DLIB, чтобы

его код разместился в сегменте, отличном от CODE?

 

Пользую IAR 4.30.

 

В настройках проекта толком не могу найти, где он вообще эту библиотеку подключает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

его код разместился в сегменте, отличном от CODE?

Месье очевидно знает толк в извращениях? Я тоже иногда упражняюсь, но для чего это могло-бы

сгодится - не понял :-( Просветите?

 

Прямой путь один - пересобрать библиотеку :-) c явным указанием желаемого имени через

--segment

(кстати, она располагается не только в CODE сегменте - не помешает?)

Наглый - отпатчить, заменив CODE на другие 4 буквы.

Другие пути маловероятны, но можно и подумать, если ЦЕЛЬ ИНТЕРЕСНОЙ БУДЕТ.

 

В настройках проекта толком не могу найти, где он вообще эту библиотеку подключает.

Ну а с этим вопросом Вы меня очень разочаровали :-(

Кто-же такие дела "галочками в проекте" делает :-). Или все ручками, или отключить библиотеку

вообще и далее в "меню" линкера дожна быть и дополнительная командная строка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Месье очевидно знает толк в извращениях? Я тоже иногда упражняюсь, но для чего это могло-бы

сгодится - не понял :-( Просветите?

Прямой путь один - пересобрать библиотеку :-) c явным указанием желаемого имени через

--segment

(кстати, она располагается не только в CODE сегменте - не помешает?)

Наглый - отпатчить, заменив CODE на другие 4 буквы.

Другие пути маловероятны, но можно и подумать, если ЦЕЛЬ ИНТЕРЕСНОЙ БУДЕТ.

Ну а с этим вопросом Вы меня очень разочаровали :-(

Кто-же такие дела "галочками в проекте" делает :-). Или все ручками, или отключить библиотеку

вообще и далее в "меню" линкера дожна быть и дополнительная командная строка.

 

В общем мне надо было чтоб один кусок кода (неизменяемый) имел возможность прошивать другой кусок кода, для этого я их разнес в разные сегменты, и назвал свой сегмент, который неизменяемый своими буквами. Ну да ладно, сделал уже все-равно по-другому.

 

А по поводу пересобрать библиотеку - исходников у меня от нее нет.

 

 

Тогда еще вопрос в догонку - можно ли выплоняя код в одном участке флеша прошивать при этом другой?

А то у меня чего то процессор постоянно во всякие эксепшны проваливается, блин.

 

(Упреждая саркастические усмешки месье zltigo - я с армами только-только знакомлюсь)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Незачет обоим ;)

 

Пользуем xlib и

--------------------

RENAME-SEGMENT RENAME-SEGMENT objectfile old new [start] [end]

Use RENAME-SEGMENT to rename all occurrences of a segment from the name old to

new in the specified modules.

Examples

The following example renames all CODE segments to ROM in the file math.rnn:

RENAME-SEG math CODE ROM

--------------------------------------------

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Незачет обоим ;)

Пользуем xlib и

Так я и прямо писал, что не претендую на момент написания письма на полное перечисление вариантов. Функция интересная. Редкая. Буду иметь ввиду.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

(Упреждая саркастические усмешки месье zltigo - я с армами только-только знакомлюсь)

Ну так уже и поязвить нельзя в том числе и НАД САМИМ СОБОЙ! :-)

 

В общем мне надо было чтоб один кусок кода (неизменяемый) имел возможность прошивать другой кусок кода, для этого я их разнес в разные сегменты, и назвал свой сегмент, который неизменяемый своими буквами. Ну да ладно, сделал уже все-равно по-другому.

Ну то, что по-другому это абсолютно правильно, ибо даже запихивание библиотеки в другой

фиксированный сегмент приведет к лишним хлопотам по нарезке и ее перезакачке при не дай бог

изменениях связаных с количеством используемых функций. Тем более, что библиотечные функции и не нужны для решения поставленной задачи, разве только что-то типа memcpy() которую Вы несомненно замените 2 строчками на С и еще получите при этом более эффективный код :-)

 

Тогда еще вопрос в догонку - можно ли выплоняя код в одном участке флеша прошивать при этом другой?

А то у меня чего то процессор постоянно во всякие эксепшны проваливается, блин.

Если под "участком" подразумевается разные СЕГМЕНТЫ, то скорее да, чем нет.

Точный ответ зависит от конкретного чипа. В используемых мною LPC и STR можно. В ATMELовских - тоже.

Ну а вылеты, не сочтите за сарказм, для начала все прерывания-то запретили?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если под "участком" подразумевается разные СЕГМЕНТЫ, то скорее да, чем нет.

Точный ответ зависит от конкретного чипа. В используемых мною LPC и STR можно. В ATMELовских - тоже.

Ну а вылеты, не сочтите за сарказм, для начала все прерывания-то запретили?

 

Чип - AT91SAM7A3.

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

 

Про прерывания: мне же нужно чтобы код выполнялся верно, а не чтобы процессор не переходил на обработчик прерывания :)

 

 

Все прерывания от периферии я запретил, (Advanced Interrupt Controller регистр Iterrupt Disable Register установлен в 0xFFFFFFFF).

 

 

Интересно, что при трассировании в отладчике, операции выполняются корректно и память пишется, а если запустить просто на выполнение, то проц слетает в Prefetch Abort.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите плз, каким образом использовать нижеприведенные опции для XLIB

и куда их вставлять ? Если ставить в Extra options в закладке линкера IAR, то

линкер ругается, пишет что RENAME-SEG файл не найден.

 

Я так полагаю, что XLIB это не совсем линкер, (ведь линкер это XLINK), поэтому

научите плз чайника, как юзать эту функцию....

 

PS. Цель - необходимость такая же как и у автора поста (чтото вроде самопального бутлоадера)

 

Незачет обоим ;)

 

Пользуем xlib и

--------------------

RENAME-SEGMENT RENAME-SEGMENT objectfile old new [start] [end]

Use RENAME-SEGMENT to rename all occurrences of a segment from the name old to

new in the specified modules.

Examples

The following example renames all CODE segments to ROM in the file math.rnn:

RENAME-SEG math CODE ROM

--------------------------------------------

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите плз, каким образом использовать нижеприведенные опции для XLIB

и куда их вставлять ?

В командную строчку при запуске библиотекаря из консоли.

PS. Цель - необходимость такая же как и у автора поста (чтото вроде самопального бутлоадера)

Для поставленной цели сие нафиг не нужно. Загрузчик и приложение это ДВА РАЗНЫХ ПРОЕКТА.

Вопрос по загрузчикам практически дежурный. В поиск.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...