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

 
 
> Как в Keil для ARM указать точное расположение процедуры в памяти FLASH
Romanello
сообщение Oct 2 2007, 14:32
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 138
Регистрация: 10-03-05
Пользователь №: 3 204



Нужно расположить функцию в заанее известном месте в памяти контроллера и потом обращаться к ней, кстати как потом можно будет обратиться к этой функции из другой функции?

Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Oct 2 2007, 15:08
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Romanello @ Oct 2 2007, 18:32) *
Нужно расположить функцию в заанее известном месте в памяти контроллера и потом обращаться к ней, кстати как потом можно будет обратиться к этой функции из другой функции?

Воспользуйтесь поиском, ключевое слово - scatter.
Обращаться к функции можно будет так же, как и к любой другой - линкер ведь будет знать её расположение.
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 2 2007, 21:01
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(aaarrr @ Oct 2 2007, 18:08) *
Воспользуйтесь поиском, ключевое слово - scatter.
Обращаться к функции можно будет так же, как и к любой другой - линкер ведь будет знать её расположение.

Может быть речь о разных программах?
В одной программе некая сервисная функция кладется по оговоренному адресу, из другой программы, эта сервисная функция вызывается. Тогда первое ваше предложение верно, а второе насчет линкера не пригодится, т.к. линкер может и не знать где располагается требуемая функция. В обход линкера можно например создать тип сервисной функции и указатель, и написав макрос или проинициализировать такой уазатель вручную, вызывать сервисную функию с любого адреса (в примере вызов функции по адресу 0x1000):

создаем типы:
Код
typedef void __service_func(void);
typedef __service_func *__p_service_func;


используем так:
Код
int main( void )
{
    __p_service_func foo = (__p_service_func)0x1000;
    ...
    foo();

или так:
Код
#define CALL_SERVICE( addr )  ( ((__p_service_func)( addr )) () )

int main( void )
{
    CALL_SERVICE( 0x1000 );
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Romanello   Как в Keil для ARM указать точное расположение процедуры в памяти FLASH   Oct 2 2007, 14:32
|- - aaarrr   Цитата(defunct @ Oct 3 2007, 01:01) Может...   Oct 2 2007, 22:46
|- - Сергей Борщ   Цитата(defunct @ Oct 3 2007, 00:01) созда...   Oct 3 2007, 20:34
- - romashko   Цитата(Romanello @ Oct 3 2007, 01:32) ......   Oct 2 2007, 22:59
- - Romanello   Функция которая размещена по определенному адресу ...   Oct 3 2007, 12:56
|- - aaarrr   Цитата(Romanello @ Oct 3 2007, 16:56) Фун...   Oct 3 2007, 13:01
|- - Romanello   Цитата(aaarrr @ Oct 3 2007, 17:01) Тогда ...   Oct 3 2007, 16:09
|- - aaarrr   Цитата(Romanello @ Oct 3 2007, 20:09) ЧТо...   Oct 3 2007, 16:22
|- - Romanello   Цитата(aaarrr @ Oct 3 2007, 20:22) SWI - ...   Oct 4 2007, 08:50
|- - aaarrr   Цитата(Romanello @ Oct 4 2007, 12:50) А к...   Oct 4 2007, 09:20
|- - Сергей Борщ   Цитата(Romanello @ Oct 4 2007, 11:50) Зач...   Oct 4 2007, 09:41
- - Николай Z   Цитата(Romanello @ Oct 2 2007, 18:32) Нуж...   Oct 4 2007, 10:03
|- - bodja74   Цитата(Николай Z @ Oct 4 2007, 13:03) А з...   Oct 4 2007, 10:52
|- - Romanello   Цитата(bodja74 @ Oct 4 2007, 14:52) BootL...   Oct 4 2007, 12:39
|- - Сергей Борщ   Цитата(Romanello @ Oct 4 2007, 15:39) Буд...   Oct 4 2007, 13:02
|- - Николай Z   Цитата(Сергей Борщ @ Oct 4 2007, 17:02) Т...   Oct 5 2007, 11:00
- - Wano   А например если зашить во флэш где-нить в конец к ...   Oct 4 2007, 17:58
- - Shkn   Можно поиграться с прагмой, например #pragma userc...   Oct 5 2007, 04:52
- - iit   Пример скаттер файла. FLASH_LOAD 0x00 0x40000 { ...   Oct 5 2007, 05:35
- - Romanello   Спасибо за ответы буду разбираться и пробовать.   Oct 5 2007, 07:03
- - VIRt   Все очень просто. Описываеш например как: void (*...   Oct 5 2007, 10:45
- - Vitaliy_ARM   Не стал плодить тем. Пишу в похожую. Цитата(VIRt ...   Jan 28 2008, 15:38
- - Vitaliy_ARM   Победил!!! Так как адрес у функции 32-...   Jan 30 2008, 22:20


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 16:24
Рейтинг@Mail.ru


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