VladislavS 29 19 апреля, 2018 Опубликовано 19 апреля, 2018 · Жалоба initialize by copy { readonly, readwrite } Тогда уж лучше указать конкретные секции в initialize by copy {}. А readonly, readwrite в указанной конструкции указывают на все секции имеющие соответствующие атрибуты. Делать нужно ровно так как написано в документации, даже если это кажется нелогичным. Достаточно вспомнить наш спор про инициализированные данные с модификатором __eeprom. Как бы вам не хотелось обратного, но работать будет именно так как написано в мануале. Надо отдать должное IAR, всё разжовано в документации, остаётся только не лениться её читать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 19 апреля, 2018 Опубликовано 19 апреля, 2018 · Жалоба Кстати, вопрос топикстартеру. Зачем вы код в RAM тянете? Не знаю на каком чипе вы работаете, но почти уверен что у него отдельная шина к flash. Вешая код и данные на одну шину можно потерять в скорости, осоюенно если туда DMA запустить. Да и просто, RAM лишняя не бывает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlphaLaiman 0 19 апреля, 2018 Опубликовано 19 апреля, 2018 · Жалоба Cекцию .httpContent в исключения попробуй. Огромное спасибо, это помогло! Кстати, вопрос топикстартеру. Зачем вы код в RAM тянете? Не знаю на каком чипе вы работаете, но почти уверен что у него отдельная шина к flash. Вешая код и данные на одну шину можно потерять в скорости, осоюенно если туда DMA запустить. Да и просто, RAM лишняя не бывает. STM32F4. Обычно этого не делаю, но тут довольно специфическая задача - разрабатываю OSD контроллер для VGA. Картинка отправляется построчно с помощью SPI пина MOSI. Для этого задействован DMA. Так вот при работе из Flash картинка на экране искажается, некоторые строки сдвигаются, особенно если что-то писать в буфер, где хранится картинка. Я не знаю точно, что служило причиной этому, но запуск из RAM исправил ситуацию. Тем более, я еще задействовал ремаппинг, поэтому время выполнения кода по сравнению с flash не ухудшилось Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 19 апреля, 2018 Опубликовано 19 апреля, 2018 · Жалоба Как-то раз делал загрузчик. Для того чтобы он мог перепрошивать самого себя, при старте он копировал себя из флэш в ОЗУ. Для этого ничего не надо было делать в настройках линкера. Единственное изменение: заменить адрес начала флэш с 0x08000000 на 0x00000000. В коде загрузчика просто делал memcpy(), потом ремап. Думаю, в вашей ситуации такой подход тоже оправдан. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 19 апреля, 2018 Опубликовано 19 апреля, 2018 · Жалоба Понятно, особенность синхронизации шин. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 19 апреля, 2018 Опубликовано 19 апреля, 2018 · Жалоба Единственное изменение: заменить адрес начала флэш с 0x08000000 на 0x00000000. В коде загрузчика просто делал memcpy(), потом ремап. Так можно делать (да и собственно так и сделано сейчас у меня в бутлоадере) только если нужно целиком всю программу скопировать в ОЗУ. А ТСу нужна только одна функция. Хотя конечно если такую функцию и все её const данные вынести в отдельный файл, для этого файла переопределить сегменты по-умолчанию и вынести все эти сегменты в какой-то регион памяти, то потом можно этот регион и скопировать. Собственно и оверлеи можно так делать. Достаточно вспомнить наш спор про инициализированные данные с модификатором __eeprom. Я в STM8 __eeprom нигде не использовал. Писал в EEPROM только самостоятельно, без компилятора/линкёра. Вроде за такой подход я тогда и ратовал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться