Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 08.03.2015, 20:32  
JerryI
Временная регистрация
 
Регистрация: 05.05.2013
Сообщений: 75
Сказал спасибо: 20
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
JerryI на пути к лучшему
По умолчанию Исполнение всего кода из RAM

Добрый день/вечер, уважаемые.
Имеется контроллер ATSAM4 и Atmel Studio 6. Необходимо сделать следующее:
  1. Скомпилировать код для исполнения из ОЗУ
  2. Загрузить этот код в виде бинарника в ОЗУ МК
  3. Исполнить его оттуда
Я научился помещать отдельные функции в оперативную память:
Код:
__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)(); //Запускаю
Ничего не происходит, все виснет.
Прошу вашей помощи.

Заранее спасибо.
Миниатюры:
Нажмите на изображение для увеличения
Название: Ashampoo_Snap_2015.03.08_19h19m36s_001_.png
Просмотров: 1008
Размер:	8.4 Кб
ID:	76515  
Реклама:

Последний раз редактировалось JerryI; 08.03.2015 в 20:35.
JerryI вне форума  
Непрочитано 11.03.2015, 10:48  
Hives
Гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Исполнение всего кода из RAM

Уважаемый Сэр вообще в курсе что такое HEX файл?
Подозреваю что должен быть бинарник, но даже в этом случае без танцев с бубном вряд ли пойдет.

И что значит "поместить весь проект в озу"?
Это вообще как? проект возьмет и сам "появится" в озу? или его туда кто-то из флеша загрузит?

Муть какая то...
Hives вне форума  
Непрочитано 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  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Исполнение всего кода из RAM

Это продвинутые танцоры с бубном. Они типа так ресурс флэша экономят.
STM32F0 вне форума  
Непрочитано 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  
JerryI
Временная регистрация
 
Регистрация: 05.05.2013
Сообщений: 75
Сказал спасибо: 20
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
JerryI на пути к лучшему
По умолчанию 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-а.
JerryI вне форума  
Непрочитано 11.03.2015, 14:13  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Исполнение всего кода из RAM

Цитата:
такие танцоры не продвинутые, а двинутые
Нельзя так говорить, они искренне обижаются и плюясь детским питанием начинают прындить, что у них очень сложные проекты, что у них 407-й МК и т.д.... При этом с детской наивностью удивляются, почему так никто не делает?
STM32F0 вне форума  
Непрочитано 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  
pambaru
Почётный гражданин KAZUS.RU
 
Регистрация: 24.03.2007
Сообщений: 1,330
Сказал спасибо: 85
Сказали Спасибо 596 раз(а) в 361 сообщении(ях)
pambaru на пути к лучшему
По умолчанию Re: Исполнение всего кода из RAM

Сообщение от JerryI Посмотреть сообщение
Я понимаю, но смысл определенно появляется, если объем ОЗУ расширяемый и может превышать размер flash-а.
Дык, а код то в ОЗУ откуда возьмется? Из того же флэша, наверное?
Или, раз загрузив в ОЗУ, будете поддерживать бесперебойного питание?
pambaru вне форума  
Непрочитано 11.03.2015, 14:25  
pambaru
Почётный гражданин KAZUS.RU
 
Регистрация: 24.03.2007
Сообщений: 1,330
Сказал спасибо: 85
Сказали Спасибо 596 раз(а) в 361 сообщении(ях)
pambaru на пути к лучшему
По умолчанию Re: Исполнение всего кода из RAM

Сообщение от _Артём_ Посмотреть сообщение
Даже если ОЗУ больше чем flash, то код всё равно из flash берётся и больше чем размер flash загрузить не получится
Не, ну можно, в принципе, придумать извраты. Во флэши "зазипованный" код и распаковщик. Он все это дело распаковывает в ОЗУ и запускает.
pambaru вне форума  
 

Закладки

Метки
code, exticute, sam4, sram
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Технология изготовления печатной платы Tungus55 Делимся опытом 1165 06.01.2017 19:19
Пропущенные куски кода в PROTEUS ST_Senya Proteus 11 21.02.2013 03:07
[Решено] Всем эмбеддерам посвящается... Decan Отвлекитесь, эмбеддеры! 0 24.10.2005 14:43


Часовой пояс GMT +4, время: 00:48.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot