Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запуск функции из оперативной памяти
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
Vasya777
Здравствуйте! Пользуюсь GCC для ARM.

Может кто-то уже сталкивался с этим. Как можно собрать программу так, что бы весь код был загружен во флешь память, а некоторые функции в ОЗУ?
Petka
Цитата(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
Vasya777
Спасибо большое! Тоесть при запуске микроконтроллера, в область ОЗУ автоматически будет загружаться эта функция? Таким же образом, как это происходит с инициализированными переменными.
А где можно найти информацию по этому вопросу?
Petka
Цитата(Vasya777 @ Jan 23 2012, 18:17) *
... в область ОЗУ автоматически будет загружаться эта функция? Таким же образом, как это происходит с инициализированными переменными.

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

startup.S

и

http://ftp.gnu.org/old-gnu/Manuals/ld-2.9..../ld_6.html#SEC6
Aaron
Точка там будет не лишней, мне думается, где красным выделил.
Цитата(Petka @ Jan 22 2012, 12:08) *
void foobar (void) __attribute__ ((section (".ramfunc")));
кусочек скрипта линкера
Код
*(.ramfunc)

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.