Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CrosssWorks AVR
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Андрей (Питер)
Как приделать(прикомпилировать) в выходной файл файл данных? Так чтобы он попал в облать FLASH.
Kirill Frolov
Цитата(Андрей (Питер) @ Mar 20 2008, 22:31) *
Как приделать(прикомпилировать) в выходной файл файл данных? Так чтобы он попал в облать FLASH.


cat *.bin | bin2hex > file.c
Андрей (Питер)
Цитата(Kirill Frolov @ Mar 20 2008, 22:36) *
cat *.bin | bin2hex > file.c


Хотелось бы как то прикрутить его в section_placement файл (чтобы он попадал с секцию CODE после програмного кода), и в программе использовать указатель на начало секции. Какие есть мысли?
ReAl
Цитата(Андрей (Питер) @ Mar 21 2008, 07:52) *
Хотелось бы как то прикрутить его в section_placement файл (чтобы он попадал с секцию CODE после програмного кода), и в программе использовать указатель на начало секции. Какие есть мысли?
http://srecord.sourceforge.net
Умеет генерировать в том числе и asm-файл с директивами секций и метками (два варианта - с RSEG и .text), С-файл с массивами (но надо или перед сборокй допиливать напильником полученный файл на тему __flash/PROGMEM, можно sed-ом/gawk-ом автоматизировать), или допиливать сам srecord, чтобы можно было какие-то расширенные ключи или, ещё лучше, шаблон С-файла подсовывать.
Андрей (Питер)
Цитата(ReAl @ Mar 21 2008, 10:38) *
http://srecord.sourceforge.net
Умеет генерировать в том числе и asm-файл с директивами секций и метками (два варианта - с RSEG и .text), С-файл с массивами (но надо или перед сборокй допиливать напильником полученный файл на тему __flash/PROGMEM, можно sed-ом/gawk-ом автоматизировать), или допиливать сам srecord, чтобы можно было какие-то расширенные ключи или, ещё лучше, шаблон С-файла подсовывать.


ясно, я догадывался что без напильника тут не обойтись smile.gif
сгенерировал массив, вставил в код, и выяснилось что что C-компилятор (CrossWorks AVR 1.4) не переваривает массивы > 32767 байт:
const char my_array[N]={n1,n2,...nN};//где N>32767 - ОШИБКА!

это во всех версиях так, ило что то где то надо включить, чтобы компилер это переваривал?
ещё заметил такой момент, линковка при использовании больших константных массивов занимает много времени - минут этак по 5-10! это глюк?
ReAl
Цитата(Андрей (Питер) @ Mar 21 2008, 20:57) *
сгенерировал массив, вставил в код, и выяснилось что что C-компилятор (CrossWorks AVR 1.4) не переваривает массивы > 32767 байт:
const char my_array[N]={n1,n2,...nN};//где N>32767 - ОШИБКА!
это во всех версиях так, ило что то где то надо включить, чтобы компилер это переваривал?
Это во многих компиляторах так. Разность двух указателей (тип ptrdiff_t) должна работать в пределах массиваи она знаковая. Обычно ptrdiff_t (stddef.h) за-typedef-лен как int (бывает как long), если int 16-битный, то разность двух указателей лежит в пределах +32767..-32768 и размер массива не может превышать 32767.

Обход сего дела если и есть, то это компиляторо-зависимая вещь, ничем не могу помочь.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.