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

 
 
 
Reply to this topicStart new topic
> Запуск функции из оперативной памяти
Vasya777
сообщение Jan 22 2012, 06:29
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 22-01-12
Пользователь №: 69 790



Здравствуйте! Пользуюсь GCC для ARM.

Может кто-то уже сталкивался с этим. Как можно собрать программу так, что бы весь код был загружен во флешь память, а некоторые функции в ОЗУ?
Go to the top of the page
 
+Quote Post
Petka
сообщение Jan 22 2012, 09:08
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Vasya777 @ Jan 22 2012, 10:29) *
Здравствуйте! Пользуюсь GCC для ARM.

Может кто-то уже сталкивался с этим. Как можно собрать программу так, что бы весь код был загружен во флешь память, а некоторые функции в ОЗУ?

При обьявлении функции указать через атрибут "section" что функция размещается в отдельной секции. В скрипте линкера указать что эта секция размещается в ОЗУ.

Код
void foobar (void) __attribute__ ((section ("ramfunc")));


кусочек скрипта линкера
Код
  .data : AT (__data_load_start)
  {
    PROVIDE (__data_start = .);
    *(.data)
    . = ALIGN(4);
    *(.ramfunc)
    . = ALIGN(4);
    edata = .;
    _edata = .;
    PROVIDE (__data_end = .);
  } > ram
Go to the top of the page
 
+Quote Post
Vasya777
сообщение Jan 23 2012, 14:17
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 22-01-12
Пользователь №: 69 790



Спасибо большое! Тоесть при запуске микроконтроллера, в область ОЗУ автоматически будет загружаться эта функция? Таким же образом, как это происходит с инициализированными переменными.
А где можно найти информацию по этому вопросу?

Сообщение отредактировал Vasya777 - Jan 23 2012, 14:19
Go to the top of the page
 
+Quote Post
Petka
сообщение Jan 24 2012, 06:52
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Vasya777 @ Jan 23 2012, 18:17) *
... в область ОЗУ автоматически будет загружаться эта функция? Таким же образом, как это происходит с инициализированными переменными.

Да.
Цитата
А где можно найти информацию по этому вопросу?

startup.S

и

http://ftp.gnu.org/old-gnu/Manuals/ld-2.9..../ld_6.html#SEC6
Go to the top of the page
 
+Quote Post
Aaron
сообщение Jan 25 2012, 13:46
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 5-10-06
Из: Зеленоград
Пользователь №: 21 007



Точка там будет не лишней, мне думается, где красным выделил.
Цитата(Petka @ Jan 22 2012, 12:08) *
void foobar (void) __attribute__ ((section (".ramfunc")));
кусочек скрипта линкера
Код
*(.ramfunc)

Go to the top of the page
 
+Quote Post

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

 


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


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