|
ARM gcc, вызвать THUMB функцию из ROM |
|
|
|
Aug 27 2014, 17:02
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Я что-то запутался... Как мне объявить внешнюю thumb функцию, расположенную по заданному статическому адресу? Я сделал вот так: 1) arm-rom.h Код int rom_func (void* dev_descr, int data); 2) скрипт для линкера Код .... SECTIONS { .... rom_func = 0x123456; } Все тут хорошо, но линкер думает, что rom_func следует исполнять как ARM, а не как THUMB, и генерирует соотв. BLX инстукцию (при вызове из THUMB кода). А как мне указать, что он THUMB?
|
|
|
|
|
 |
Ответов
|
Aug 29 2014, 06:40
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(Golikov A. @ Aug 29 2014, 10:31)  А у меня есть другое предложение, а что если вам сделать переход все равно какой, а переключиться на thumb режим уже внутри вашей функции? У меня задача обратная  Мне надо НЕ переключаться в ARM, при вызове ROM-функций (они находятся по фиксированным адресам в ROM (в бутлоадере) в процессоре, и все имеют thumb-код), из моего кода, который тоже THUMB. А по умолчанию gcc считает, что такая функция, объявленная заданием адреса через скрипт линкера, она ARM. При этом без излишеств, так как у меня всего 500 байт есть на весь мой код... С .thumb_set я уложился в 480 байт, но хочу сделать без него, и чтобы с тем же результатом.
|
|
|
|
|
Aug 29 2014, 06:59
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(SM @ Aug 29 2014, 12:40)  При этом без излишеств, так как у меня всего 500 байт есть на весь мой код... С .thumb_set я уложился в 480 байт, но хочу сделать без него, и чтобы с тем же результатом. Если вопрос в размере и известно, что расстояние до этих ROM-функций позволяет использовать BL (с его укороченной досягаемостью) и известен стартовый адрес образа вашего кода в памяти, то можно в асм-файле определить команды перехода на ROM-функции как обычные константы (не знаю как в gcc, но в IAR): wrap_funcX: DC16 XXXX ;здесь код команды безусловный B с непосредственным 11-битным смещением описать wrap_funcX как функцию, прилинковать в известное место (по известному смещению) своего выходного исполняемого образа и вызывать как обычную функцию.
|
|
|
|
|
Aug 29 2014, 07:03
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(jcxz @ Aug 29 2014, 10:59)  то можно в асм-файле определить Ну елки-палки. С asm-файлом у меня все и без таких извратов работает! Хочется средствами С обойтись. rom_func.h: Код int rom_func (void* dev_descr, int data); rom_func.S: Код .globl rom_func .thumb_set rom_func, 0x123456 и в результате в thumb-коде получается обычный BL 0x123456, что и требуется.
|
|
|
|
Сообщений в этой теме
SM ARM gcc, вызвать THUMB функцию из ROM Aug 27 2014, 17:02 SM Проблему сам решил, через ж. автогеном. Сделал асс... Aug 27 2014, 18:23 jcxz Цитата(SM @ Aug 28 2014, 00:23) Проблему ... Aug 28 2014, 02:02  SM Цитата(jcxz @ Aug 28 2014, 06:02) for IAR... Aug 28 2014, 05:58   den_po Цитата(SM @ Aug 28 2014, 09:58) Проверено... Aug 28 2014, 10:20    SM Цитата(den_po @ Aug 28 2014, 14:20) И с к... Aug 28 2014, 10:41     den_po Цитата(SM @ Aug 28 2014, 14:41) О непосре... Aug 28 2014, 12:44      SM Цитата(den_po @ Aug 28 2014, 16:44) У вас... Aug 28 2014, 13:09 den_po можно без линкера сделать указатель на функцию, а ... Aug 27 2014, 22:17 Golikov A. ИМХО корректнее честный АСМ вызов, чем игры со сме... Aug 28 2014, 10:05 scifi Цитата(SM @ Aug 27 2014, 21:02) Я сделал ... Aug 28 2014, 10:36 Сергей Борщ Там есть еще одна фигня - линкер может вставлять B... Aug 28 2014, 12:02 SM Цитата(Сергей Борщ @ Aug 28 2014, 16:02) ... Aug 28 2014, 12:09  jcxz Цитата(SM @ Aug 28 2014, 18:09) Хватает, ... Aug 29 2014, 02:41   SM Цитата(jcxz @ Aug 29 2014, 06:41) если BX... Aug 29 2014, 05:33 jcxz Цитата(Сергей Борщ @ Aug 28 2014, 18:02) ... Aug 29 2014, 03:53 den_po В общем, говорим мы о разных вещах.
Если в исходни... Aug 28 2014, 20:44 jcxz Цитата(Golikov A. @ Aug 29 2014, 12:31) А... Aug 29 2014, 06:47 Golikov A. да пофиг, пусть переключается, вы в функции насиль... Aug 29 2014, 06:45 SM Цитата(Golikov A. @ Aug 29 2014, 10:45) В... Aug 29 2014, 06:55 Golikov A. А второй вопрос, если все вызовы этой функции сдел... Aug 29 2014, 07:05 SM Цитата(Golikov A. @ Aug 29 2014, 11:05) Я... Aug 29 2014, 07:07  jcxz Цитата(SM @ Aug 29 2014, 13:07) Не хочетс... Aug 29 2014, 07:18   SM Цитата(jcxz @ Aug 29 2014, 11:18) Это, им... Aug 29 2014, 07:35    jcxz Цитата(SM @ Aug 29 2014, 13:35) А чего-то... Aug 29 2014, 07:44     SM Цитата(jcxz @ Aug 29 2014, 11:44) Мне каж... Aug 29 2014, 07:48      sasamy Цитата(SM @ Aug 29 2014, 11:48) В общем, ... Aug 29 2014, 09:52 Сергей Борщ Увы... Максимум, что приходит в голову - засунуть ... Aug 29 2014, 08:49
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|