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

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

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

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

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

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


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

Цитата:
Если конечно не хранить код в какой-нибудь SD-карте.
Вот. Да и неужели у МК недостаточно интерфейсов для передачи данных.
Цитата:
Бинарник во flash надо грузить, а он уже сам скопирует код в ОЗУ. Или не так?
Так работает для отдельных взятых функций, а если указать линкеру на весь проект, то он даже не генерирует файла для прошивки, который нужен при программировании flash. Отдает только бинарник.
Реклама:
JerryI вне форума  
Непрочитано 11.03.2015, 15:13  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Исполнение всего кода из RAM

Сообщение от JerryI Посмотреть сообщение
Так работает для отдельных взятых функций, а если указать линкеру на весь проект, то он даже не генерирует файла для прошивки, который нужен при программировании flash. Отдает только бинарник.
А этот bin-файл нельзя прошить во флеш? Чем он отличается от случая, когда не вся прошивка в ОЗУ закидывается? Или ещё какие-то файлы генерятся в этом случае?
_Артём_ вне форума  
Непрочитано 11.03.2015, 15:20  
JerryI
Временная регистрация
 
Регистрация: 05.05.2013
Сообщений: 75
Сказал спасибо: 20
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
JerryI на пути к лучшему
По умолчанию Re: Исполнение всего кода из RAM

Сообщение от _Артём_ Посмотреть сообщение
А этот bin-файл нельзя прошить во флеш? Чем он отличается от случая, когда не вся прошивка в ОЗУ закидывается? Или ещё какие-то файлы генерятся в этом случае?
File contents does not map to any valid device memory for programming Flash
JerryI вне форума  
Непрочитано 11.03.2015, 15:34  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Исполнение всего кода из RAM

Сообщение от JerryI Посмотреть сообщение
File contents does not map to any valid device memory for programming Flash
Так может вам другой скрипт линкера надо брать?
Там изменений-то всего ничего.
В стандартном скрипте который для flash нужно добавить что-то такое:
Код:
.text {
__ctors_start__ = .;
		KEEP(SORT(*)(.init_array))  /* eabi uses .init_array for static constructor lists */
		__ctors_end__ = .;

		__dtors_start__ = .;
		__dtors_end__ = .;
        
		. = ALIGN(4);
		*(.text)                   /* remaining code */
		*(.text.*)
		*(.rodata)                 /* read-only data (constants) */
		*(.rodata.*)

		*(.eh_frame_hdr)
		*(.eh_frame)
		*(.ARM.extab* .gnu.linkonce.armextab.*)
		*(.gcc_except_table)
		*(.eh_frame_hdr)
		*(.eh_frame)

		*(.glue_7)
		*(.glue_7t)
		. = ALIGN(4);
}› RAM AT › FLASH
Примерно как-то так(не факт что не ошибся где-то).
_Артём_ вне форума  
Непрочитано 11.03.2015, 15:40  
JerryI
Временная регистрация
 
Регистрация: 05.05.2013
Сообщений: 75
Сказал спасибо: 20
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
JerryI на пути к лучшему
По умолчанию Re: Исполнение всего кода из RAM

Сообщение от _Артём_ Посмотреть сообщение
Так может вам другой скрипт линкера надо брать?
Там изменений-то всего ничего.
В стандартном скрипте который для flash нужно добавить что-то такое:
Код:
.text {
__ctors_start__ = .;
		KEEP(SORT(*)(.init_array))  /* eabi uses .init_array for static constructor lists */
		__ctors_end__ = .;

		__dtors_start__ = .;
		__dtors_end__ = .;
        
		. = ALIGN(4);
		*(.text)                   /* remaining code */
		*(.text.*)
		*(.rodata)                 /* read-only data (constants) */
		*(.rodata.*)

		*(.eh_frame_hdr)
		*(.eh_frame)
		*(.ARM.extab* .gnu.linkonce.armextab.*)
		*(.gcc_except_table)
		*(.eh_frame_hdr)
		*(.eh_frame)

		*(.glue_7)
		*(.glue_7t)
		. = ALIGN(4);
}› RAM AT › FLASH
Примерно как-то так(не факт что не ошибся где-то).
Ругается на неизвестно что. Линкер возвращает 0.
Взгляните на оригинальный файл _sram.ld, возможно это вам что-то скажет.
Код:
SECTIONS
{
    .text :
    {
        . = ALIGN(4);
        _sfixed = .;
        KEEP(*(.vectors .vectors.*))
        *(.text .text.* .gnu.linkonce.t.*)
        *(.glue_7t) *(.glue_7)
        *(.rodata .rodata* .gnu.linkonce.r.*)
        *(.ARM.extab* .gnu.linkonce.armextab.*)

        /* Support C constructors, and C destructors in both user code
           and the C library. This also provides support for C++ code. */
        . = ALIGN(4);
        KEEP(*(.init))
        . = ALIGN(4);
        __preinit_array_start = .;
        KEEP (*(.preinit_array))
        __preinit_array_end = .;

        . = ALIGN(4);
        __init_array_start = .;
        KEEP (*(SORT(.init_array.*)))
        KEEP (*(.init_array))
        __init_array_end = .;

        . = ALIGN(0x4);
        KEEP (*crtbegin.o(.ctors))
        KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
        KEEP (*(SORT(.ctors.*)))
        KEEP (*crtend.o(.ctors))

        . = ALIGN(4);
        KEEP(*(.fini))

        . = ALIGN(4);
        __fini_array_start = .;
        KEEP (*(.fini_array))
        KEEP (*(SORT(.fini_array.*)))
        __fini_array_end = .;

        KEEP (*crtbegin.o(.dtors))
        KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
        KEEP (*(SORT(.dtors.*)))
        KEEP (*crtend.o(.dtors))

        . = ALIGN(4);
        _efixed = .;            /* End of text section */
    } › ram

    . = ALIGN(4);
    _etext = .;

    .relocate : AT (_etext)
    {
        . = ALIGN(4);
        _srelocate = .;
        *(.ramfunc .ramfunc.*);
        *(.data .data.*);
        . = ALIGN(4);
        _erelocate = .;
    } › ram

    /* .bss section which is used for uninitialized data */
    .bss (NOLOAD) :
    {
        . = ALIGN(4);
        _sbss = . ;
        _szero = .;
        *(.bss .bss.*)
        *(COMMON)
        . = ALIGN(4);
        _ebss = . ;
        _ezero = .;
    } › ram

    /* stack section */
    .stack (NOLOAD):
    {
        . = ALIGN(8);
        _sstack = .;
        . = . + STACK_SIZE;
        . = ALIGN(8);
        _estack = .;
    } › ram

    /* .ARM.exidx is sorted, so has to go in its own output section.  */
    PROVIDE_HIDDEN (__exidx_start = .);
    .ARM.exidx :
    {
      *(.ARM.exidx* .gnu.linkonce.armexidx.*)
    } › ram
    PROVIDE_HIDDEN (__exidx_end = .);

    . = ALIGN(4);
    _end = . ;
}
Я в нем понял только то, что все помещается в область ram.
JerryI вне форума  
Непрочитано 11.03.2015, 17:07  
JerryI
Временная регистрация
 
Регистрация: 05.05.2013
Сообщений: 75
Сказал спасибо: 20
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
JerryI на пути к лучшему
По умолчанию Re: Исполнение всего кода из RAM

Тьфу! Я для _sram правил
JerryI вне форума  
Непрочитано 11.03.2015, 17:33  
JerryI
Временная регистрация
 
Регистрация: 05.05.2013
Сообщений: 75
Сказал спасибо: 20
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
JerryI на пути к лучшему
По умолчанию Re: Исполнение всего кода из RAM

Внес изменения - ничего толкового. Как запускалась из flash, так и запускается.
Мне все же интересно, возможно ли затолкать бинарник скомпилированного проекта в какой-либо массив ОЗУ, а затем запустить?
Вся суть в том, что загрузочный проект МК, который хранится во flash, не был связан с загружаемой программой, а имел лишь ее код(бинарник).
JerryI вне форума  
Непрочитано 11.03.2015, 20:53  
JerryI
Временная регистрация
 
Регистрация: 05.05.2013
Сообщений: 75
Сказал спасибо: 20
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
JerryI на пути к лучшему
По умолчанию Re: Исполнение всего кода из RAM

Все работает!
1) Изменяю параметры линкера xxx_sram.ld:
Код:
MEMORY
{
  rom (rx)  : ORIGIN = 0x01000000, LENGTH = 0x00080000
  ram (rwx) : ORIGIN = 0x20006000, LENGTH = 0x00020000 //Смещаю адрес ОЗУ на 0x6000 байт.
}
2) Компилирую проект
3) Смотрю .lss файл:
Код:
200062b4:	20006897 	.word	0x20006897

200062b8 ‹main›:
 *
 * \return Unused (ANSI-C compatibility).
 */
int main(void)
{
	PMC-›PMC_PCER0 = PMC_PCER0_PID12;
200062b8:	f44f 6380 	mov
Функция main() начинается с адреса 200062b8. Запоминаем.
4) Помещаю .bin файл в массив во flash.
5) Для запуска программы использую следующий код:
Код:
typedef void RAM_fn_t(void);
RAM_fn_t* fp = (RAM_fn_t*)0x200062B9; //Адрес _main() + 1 (я не знаю для чего прибавлять...)

uint8_t *addr = (uint8_t *)0x20006000; //Адрес, куда будем копировать

int main(void)
{
    /* Initialize the SAM system */
    SystemInit();
	
	memcpy(addr, store, sizeof(store)); //Копируем данные программы

	(*fp)(); //Запуск!
	
}
JerryI вне форума  
Непрочитано 11.03.2015, 23:18  
_Артём_
Гражданин KAZUS.RU
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Исполнение всего кода из RAM

Сообщение от JerryI Посмотреть сообщение
//Адрес _main() + 1 (я не знаю для чего прибавлять...)
+1 потому что Thumb-2 - младший бит должен быть равен 1.
_Артём_ вне форума  
Непрочитано 12.03.2015, 00:23  
Hives
Гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Исполнение всего кода из RAM

JerryI
попробуй запустить этим методом блок в озу длиннее 0x2b8 байт
когда подвиснет, подумай над порядком распределения блоков в RAM

_Артём_ спасибо, КЭП!
Hives вне форума  
 

Закладки

Метки
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, время: 09:22.


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