Перейти к содержанию
    

Запуск функции из оперативной памяти

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте! Пользуюсь 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Да.

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

startup.S

 

и

 

http://ftp.gnu.org/old-gnu/Manuals/ld-2.9..../ld_6.html#SEC6

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Точка там будет не лишней, мне думается, где красным выделил.

void foobar (void) __attribute__ ((section (".ramfunc")));

кусочек скрипта линкера

*(.ramfunc)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...