08.03.2015, 20:32
|
|
Временная регистрация
Регистрация: 05.05.2013
Сообщений: 75
Сказал спасибо: 20
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Исполнение всего кода из RAM
Добрый день/вечер, уважаемые.
Имеется контроллер ATSAM4 и Atmel Studio 6. Необходимо сделать следующее: - Скомпилировать код для исполнения из ОЗУ
- Загрузить этот код в виде бинарника в ОЗУ МК
- Исполнить его оттуда
Я научился помещать отдельные функции в оперативную память:
Код:
|
__attribute__( ( long_call, section(".ramfunc") ) ) void ram_foobar (void) |
.ramfunc - указание линкеру проекта. Все работает замечательно, но я хочу поместить весь проект в ОЗУ (пункт 1,2).
В документации Atmel пишут, что нужно указать линкеру в настройках проекта. Я так и сделал:
Я получил требуемый .hex файл, а что мне делать с ним дальше? Как правильно загрузить и запустить?
Если я копирую .hex файл в объявленный массив в ОЗУ и запускаю
Код:
|
typedef void RAM_fn_t(void);
RAM_fn_t* fp = (RAM_fn_t*)data;
------------------------------------
memcpy(data, program, sizeof(program)); //Копирую
(*fp)(); //Запускаю |
Ничего не происходит, все виснет.
Прошу вашей помощи.
Заранее спасибо.
Последний раз редактировалось JerryI; 08.03.2015 в 20:35.
|
|
|
|
11.03.2015, 10:48
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: Исполнение всего кода из RAM
Уважаемый Сэр вообще в курсе что такое HEX файл?
Подозреваю что должен быть бинарник, но даже в этом случае без танцев с бубном вряд ли пойдет.
И что значит "поместить весь проект в озу"?
Это вообще как? проект возьмет и сам "появится" в озу? или его туда кто-то из флеша загрузит?
Муть какая то...
|
|
|
|
11.03.2015, 12:19
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Исполнение всего кода из RAM
Сообщение от Hives
|
Муть какая то...
|
Почему муть? задача вполне решаемая.
Сообщение от Hives
|
Уважаемый Сэр вообще в курсе что такое HEX файл?
Подозреваю что должен быть бинарник
|
HEX это тот же BIN, но ещё и с адресами.
Сообщение от Hives
|
но даже в этом случае без танцев с бубном вряд ли пойдет.
|
Можно и с бубном - загрузить проект в ОЗУ и передать управление загруженному проекту. Отладчик такое вполне может.
Сообщение от Hives
|
И что значит "поместить весь проект в озу"?
Это вообще как? проект возьмет и сам "появится" в озу? или его туда кто-то из флеша загрузит?
|
Обычно делается так - проект зашивается во flash, запускается, его стартап копирует весь исполняемый код в ОЗУ и передаёт ему управление.
|
|
|
|
11.03.2015, 12:20
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Исполнение всего кода из RAM
Это продвинутые танцоры с бубном. Они типа так ресурс флэша экономят.
|
|
|
|
11.03.2015, 12:41
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Исполнение всего кода из RAM
Сообщение от STM32F0
|
Это продвинутые танцоры с бубном. Они типа так ресурс флэша экономят.
|
Ну, если речь про экономию ресурса, то такие танцоры не продвинутые, а двинутые.
Смысла помещать весь код в ОЗУ конечно нету, но иногда надо 1-2 функции запихнуть в RAM. Для повышения быстродействия или чтобы перепрограммировать flash.
|
|
|
|
11.03.2015, 14:11
|
|
Временная регистрация
Регистрация: 05.05.2013
Сообщений: 75
Сказал спасибо: 20
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Исполнение всего кода из RAM
Сообщение от Hives
|
Уважаемый Сэр вообще в курсе что такое HEX файл?
Подозреваю что должен быть бинарник
|
Верно. Прошу простить, я описался.
Сообщение от _Артём_
|
Обычно делается так - проект зашивается во flash, запускается, его стартап копирует весь исполняемый код в ОЗУ и передаёт ему управление.
|
Подобного я и хочу. Вся процедура должна проходить без танцев с бубном, Atmel все для этого сделали. Там и линкер файл есть, и в app note-ах числится такой трюк.
Executing all Code From RAM
If it is desirable to place all code in RAM, a linker script is available for this purpose. This can be found in ASF,
however currently not trough the ASF bundled with Atmel Studio. This will be found in the ASF standalone package
found on atmel.com/asf. There is one linker script for each device so select the correct linker script depending on
the RAM and FLASH size of the device being used.
Однако они не описали, как готовый бинарник правильно загрузить в ОЗУ и запустить.
Сообщение от _Артём_
|
Смысла помещать весь код в ОЗУ конечно нету, но иногда надо 1-2 функции запихнуть в RAM. Для повышения быстродействия или чтобы перепрограммировать flash.
|
Я понимаю, но смысл определенно появляется, если объем ОЗУ расширяемый и может превышать размер flash-а.
|
|
|
|
11.03.2015, 14:13
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Исполнение всего кода из RAM
Цитата:
|
такие танцоры не продвинутые, а двинутые
|
Нельзя так говорить, они искренне обижаются и плюясь детским питанием начинают прындить, что у них очень сложные проекты, что у них 407-й МК и т.д.... При этом с детской наивностью удивляются, почему так никто не делает?
|
|
|
|
11.03.2015, 14:21
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Исполнение всего кода из RAM
Сообщение от JerryI
|
Однако они не описали, как готовый бинарник правильно загрузить в ОЗУ и запустить.
|
Бинарник во flash надо грузить, а он уже сам скопирует код в ОЗУ. Или не так?
P.S. Для древних ARMов было вроде актуально отлаживать код из ОЗУ, но для Cortex-ов это уже не актуально.
Сообщение от JerryI
|
Я понимаю, но смысл определенно появляется, если объем ОЗУ расширяемый и может превышать размер flash-а.
|
А чем ОЗУ загружать? Даже если ОЗУ больше чем flash, то код всё равно из flash берётся и больше чем размер flash загрузить не получится...Если конечно не хранить код в какой-нибудь SD-карте.
|
|
|
|
11.03.2015, 14:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,330
Сказал спасибо: 85
Сказали Спасибо 596 раз(а) в 361 сообщении(ях)
|
Re: Исполнение всего кода из RAM
Сообщение от JerryI
|
Я понимаю, но смысл определенно появляется, если объем ОЗУ расширяемый и может превышать размер flash-а.
|
Дык, а код то в ОЗУ откуда возьмется? Из того же флэша, наверное?
Или, раз загрузив в ОЗУ, будете поддерживать бесперебойного питание?
|
|
|
|
11.03.2015, 14:25
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,330
Сказал спасибо: 85
Сказали Спасибо 596 раз(а) в 361 сообщении(ях)
|
Re: Исполнение всего кода из RAM
Сообщение от _Артём_
|
Даже если ОЗУ больше чем flash, то код всё равно из flash берётся и больше чем размер flash загрузить не получится
|
Не, ну можно, в принципе, придумать извраты. Во флэши "зазипованный" код и распаковщик. Он все это дело распаковывает в ОЗУ и запускает.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:48.
|
|