реклама на сайте
подробности

 
 
> ARM gcc, вызвать THUMB функцию из ROM
SM
сообщение Aug 27 2014, 17:02
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 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?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Aug 29 2014, 06:31
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



А у меня есть другое предложение, а что если вам сделать переход все равно какой, а переключиться на thumb режим уже внутри вашей функции? Тогда вам не надо будет следить за переходами на вашу функцию, переход может быть любым, а функция всегда отработает правильно не зависимо от того как на нее перешли?
Go to the top of the page
 
+Quote Post
SM
сообщение Aug 29 2014, 06:40
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Golikov A. @ Aug 29 2014, 10:31) *
А у меня есть другое предложение, а что если вам сделать переход все равно какой, а переключиться на thumb режим уже внутри вашей функции?


У меня задача обратная sm.gif Мне надо НЕ переключаться в ARM, при вызове ROM-функций (они находятся по фиксированным адресам в ROM (в бутлоадере) в процессоре, и все имеют thumb-код), из моего кода, который тоже THUMB. А по умолчанию gcc считает, что такая функция, объявленная заданием адреса через скрипт линкера, она ARM.

При этом без излишеств, так как у меня всего 500 байт есть на весь мой код... С .thumb_set я уложился в 480 байт, но хочу сделать без него, и чтобы с тем же результатом.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 29 2014, 06:59
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 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 как функцию, прилинковать в известное место (по известному смещению) своего выходного исполняемого образа и вызывать как обычную функцию.
Go to the top of the page
 
+Quote Post
SM
сообщение Aug 29 2014, 07:03
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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, что и требуется.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 12:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01433 секунд с 7
ELECTRONIX ©2004-2016