|
Обновить прошивку Nios2 Gen2, Если процессор исполняет код прямо из флэшки |
|
|
|
May 12 2016, 08:47
|
Профессионал
    
Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770

|
Доброго дня,
есть проект на MAX10. Планируется исполнять код прямо из onchip_flash (так как в память код не помещается по объёму), обновление тоже получает Nios через некоторый канал связи, реализовать протокол которого аппаратно довольно сложно. Вопрос, как красиво реализовать обновление флэшки? У меня крутятся всякие идеи, но все они какие-то проблемные или кривые: - как-то заставить линкер куски программы, отвечающие за программирование флешки, разместить компактно, и вручную копировать из в ОЗУ в нужный момент расчитывая, что драйвер флэшки написан как позиционно-независимый - сделать отдельный процессор с программой только под программирование, код которого сразу будет размещён в ОЗУ - написать аппаратный блок, который будет заниматься программированием
Идеально было бы конечно, если бы можно бы было приказать линкеру нужный код сразу слиновать по адресам ОЗУ, и закинуть его туда при старте (типа как это делает опция enable_alt_load). Однако уме не приложу, как заставить эту опцию работать только для некоторой части программы.
|
|
|
|
|
 |
Ответов
|
May 13 2016, 12:50
|
Профессионал
    
Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770

|
Цитата(Stewart Little @ May 13 2016, 15:06)  Подсказываю - у MAX 10 флэш организован посекторно, сектора делятся на страницы. У qsys'овского модуля OnChip Flash есть режим записи. Программа NIOS находится в странице 0 сектора 0 UFM0. При стирании этой страницы NIOS перестаёт работать, так как пропадает программа, которую он в данный момент исполняет. Так понятнее суть проблемы? Цитата(gridinp @ May 13 2016, 14:58)  по моему, чтобы разместить функцию в другом сегменте памяти, надо указать в BSP editor в Linker script новую секцию и назвать её например .text2
потом в C в прототипе функции указать имя секции через атрибут void func_name() __attribute__ ((section (".text2"))); Спасибо, это вроде то, что мне и надо. Однако остаётся ещё одна проблема: как заставить линкер сгенерить код, который скопирует это в ОЗУ? Опция enable_alt_load копирует только секции данных, а секции кода всё равно оставляет во флэш.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|