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

 
 
> Размещение кода функции в RAM, компилятор GCC
Poluektovich
сообщение Sep 18 2015, 15:55
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 15-09-08
Из: Зеленоград
Пользователь №: 40 201



Хочу чтобы код определенной функции выполнялся из RAM. Для этого следовал рекомендациям:
Цитата
Placing code in RAM using GCC
Gcc supports the use of the __attribute__ keyword which allows you to apply special attributes to your code. There are many attributes you can apply; the one we are interested in is section .
The section attribute places code in a specific memory section as defined in the cm3gcc.ld file. RAM is defined as the .data section. So, for example, if you wanted to place a function in RAM the code for the function prototype would look like this:
void foo (void) __attribute__ ((section(".data")));


Однако. код по-прежнему размещется во FLASH.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DmitryM
сообщение Sep 19 2015, 05:54
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(Poluektovich @ Sep 18 2015, 19:55) *
Хочу чтобы код определенной функции выполнялся из RAM. Для этого следовал рекомендациям:


Однако. код по-прежнему размещется во FLASH.


Вообще-то надо
void foo (void) __attribute__ ((section(".ramfunc")));

__attribute__ ((section(".data"))); - это для констант размещенных в RAM
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 19 2015, 09:01
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(DmitryM @ Sep 19 2015, 08:54) *
__attribute__ ((section(".data"))); - это для констант размещенных в RAM
Да хоть горшком обзовите, только в печь не суйте. Какая линкеру разница, что конкретно за байты лежат в этой секции? Он не отличает коды команд от констант начальных значений. И решение с помещением кода в секцию .data - довольно элегантное: без дополнительных теловижений образ загружаемого в ОЗУ кода вместе с констанатами начальных значений размещается в ПЗУ, в ОЗУ под этот код резервируется место заодно с данными, стартап-код копирует образ кода из ПЗУ в ОЗУ вместе с начальными значениями данных. Я всегда добавлял в скрипт свою секцию рядом со входной секцией .data но так и не додумался сразу класть функции в секцию .data.

Poluektovich: сделайте минимальный проект из одной вашей функции и вызывающей ее main(). Выложите исходник и сдержимое .map, разберемся. Может даже и исходника хватит.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


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


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