Vasya777 0 22 января, 2012 Опубликовано 22 января, 2012 · Жалоба Здравствуйте! Пользуюсь GCC для ARM. Может кто-то уже сталкивался с этим. Как можно собрать программу так, что бы весь код был загружен во флешь память, а некоторые функции в ОЗУ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petka 0 22 января, 2012 Опубликовано 22 января, 2012 · Жалоба Здравствуйте! Пользуюсь 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 0 23 января, 2012 Опубликовано 23 января, 2012 (изменено) · Жалоба Спасибо большое! Тоесть при запуске микроконтроллера, в область ОЗУ автоматически будет загружаться эта функция? Таким же образом, как это происходит с инициализированными переменными. А где можно найти информацию по этому вопросу? Изменено 23 января, 2012 пользователем Vasya777 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petka 0 24 января, 2012 Опубликовано 24 января, 2012 · Жалоба ... в область ОЗУ автоматически будет загружаться эта функция? Таким же образом, как это происходит с инициализированными переменными. Да. А где можно найти информацию по этому вопросу? startup.S и http://ftp.gnu.org/old-gnu/Manuals/ld-2.9..../ld_6.html#SEC6 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aaron 1 25 января, 2012 Опубликовано 25 января, 2012 · Жалоба Точка там будет не лишней, мне думается, где красным выделил. void foobar (void) __attribute__ ((section (".ramfunc"))); кусочек скрипта линкера *(.ramfunc) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться