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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Выполнение кода из ОЗУ, как задать области, которые туда копировать не нужно
VladislavS
сообщение Apr 19 2018, 01:24
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Цитата(jcxz @ Apr 19 2018, 01:00) *
initialize by copy { readonly, readwrite }
Тогда уж лучше указать конкретные секции в initialize by copy {}. А readonly, readwrite в указанной конструкции указывают на все секции имеющие соответствующие атрибуты.

Делать нужно ровно так как написано в документации, даже если это кажется нелогичным. Достаточно вспомнить наш спор про инициализированные данные с модификатором __eeprom. Как бы вам не хотелось обратного, но работать будет именно так как написано в мануале. Надо отдать должное IAR, всё разжовано в документации, остаётся только не лениться её читать.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Apr 19 2018, 04:58
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Кстати, вопрос топикстартеру. Зачем вы код в RAM тянете? Не знаю на каком чипе вы работаете, но почти уверен что у него отдельная шина к flash. Вешая код и данные на одну шину можно потерять в скорости, осоюенно если туда DMA запустить. Да и просто, RAM лишняя не бывает.
Go to the top of the page
 
+Quote Post
AlphaLaiman
сообщение Apr 19 2018, 06:57
Сообщение #18





Группа: Участник
Сообщений: 11
Регистрация: 1-11-15
Пользователь №: 89 126



Цитата(VladislavS @ Apr 18 2018, 17:09) *
Cекцию .httpContent в исключения попробуй.


Огромное спасибо, это помогло!

Цитата(VladislavS @ Apr 18 2018, 17:09) *
Кстати, вопрос топикстартеру. Зачем вы код в RAM тянете? Не знаю на каком чипе вы работаете, но почти уверен что у него отдельная шина к flash. Вешая код и данные на одну шину можно потерять в скорости, осоюенно если туда DMA запустить. Да и просто, RAM лишняя не бывает.


STM32F4. Обычно этого не делаю, но тут довольно специфическая задача - разрабатываю OSD контроллер для VGA. Картинка отправляется построчно с помощью SPI пина MOSI. Для этого задействован DMA. Так вот при работе из Flash картинка на экране искажается, некоторые строки сдвигаются, особенно если что-то писать в буфер, где хранится картинка. Я не знаю точно, что служило причиной этому, но запуск из RAM исправил ситуацию. Тем более, я еще задействовал ремаппинг, поэтому время выполнения кода по сравнению с flash не ухудшилось
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 19 2018, 07:18
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Как-то раз делал загрузчик. Для того чтобы он мог перепрошивать самого себя, при старте он копировал себя из флэш в ОЗУ. Для этого ничего не надо было делать в настройках линкера. Единственное изменение: заменить адрес начала флэш с 0x08000000 на 0x00000000. В коде загрузчика просто делал memcpy(), потом ремап. Думаю, в вашей ситуации такой подход тоже оправдан.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Apr 19 2018, 07:21
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Понятно, особенность синхронизации шин.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 19 2018, 08:02
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(scifi @ Apr 19 2018, 10:18) *
Единственное изменение: заменить адрес начала флэш с 0x08000000 на 0x00000000. В коде загрузчика просто делал memcpy(), потом ремап.

Так можно делать (да и собственно так и сделано сейчас у меня в бутлоадере) только если нужно целиком всю программу скопировать в ОЗУ. А ТСу нужна только одна функция. Хотя конечно если такую функцию и все её const данные вынести в отдельный файл, для этого файла переопределить сегменты по-умолчанию и вынести все эти сегменты в какой-то регион памяти, то потом можно этот регион и скопировать. Собственно и оверлеи можно так делать.

Цитата(VladislavS @ Apr 19 2018, 04:24) *
Достаточно вспомнить наш спор про инициализированные данные с модификатором __eeprom.

Я в STM8 __eeprom нигде не использовал. Писал в EEPROM только самостоятельно, без компилятора/линкёра. Вроде за такой подход я тогда и ратовал.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th April 2024 - 05:40
Рейтинг@Mail.ru


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