Easyelectronics.ru

Электроника для всех
Текущее время: 25 май 2018, 17:37

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Бинарь во флеш
СообщениеДобавлено: 13 янв 2018, 00:15 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 14:23
Сообщения: 127
Откуда: Нижний Новгород
Всем привет.
Есть ли способы запихать в программную память целиком какой-либо файл, скажем WAV или BMP, напрямую, не преобразуя его в Сишный массив?
Что-нито типа unsigned char File[] PROGMEM = ...лалала... "myfile.txt";-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Бинарь во флеш
СообщениеДобавлено: 13 янв 2018, 00:42 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 437
есть, утилита называется objcopy -I binary -O <obj-format> -B <platform> pic.gif pic.o
таким образом получаете обектник который и линкуете к своему проекту. При необходимости можно секцию указать принудительно (допустим *.rodata). В программе нужно будет объявить два указателя
extern uint8_t* binary_pic_gif_start;
extern uint8_t* binary_pic_gif_end;
Которые будут указывать на адрес начала и адрес окончания pic.gif. Точно так же можно линковать что угодно, музыку, таблицы, шрифты, короче чего угодно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Бинарь во флеш
СообщениеДобавлено: 13 янв 2018, 01:05 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 14:23
Сообщения: 127
Откуда: Нижний Новгород
Да, я пошел этим путем, но не дошел)
Новая секция (обозвал ее .wav) с файлом линкуется к ELF файлу. Но после "avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature abc.elf abc.hex" в хексе ее нет, хоть -R .wav я делать не просил.
Что делаю не так?
И поясните пожалуйста это:
void1509 писал(а):
В программе нужно будет объявить два указателя
extern uint8_t* binary_pic_gif_start;
extern uint8_t* binary_pic_gif_end;
Которые будут указывать на адрес начала и адрес окончания pic.gif.

может туплю уже, но как программа узнает значение этих указателей, если секция подлинкована после компиляции?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Бинарь во флеш
СообщениеДобавлено: 13 янв 2018, 02:07 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 437
Так вы для того и указываете ключевое слово extern что бы компилятор знал что эти имена будут определены линковщиком. AVR версии GCC у меня нет, я пользую stm32. Но у вас не определен формат входящий (-I binary) значит файл будет взят в таком же виде как на диске. -O ihex я не пользовал, вам нужен не hex выходной файл, а объектник то есть формат elf или чего там в avr. У меня arm-elf. -R указывает секцию, это вам нужно посмотреть .map файл (генерируется при компиляции) и найти там название секции данных которые хранятся во флэш. У меня rodata. После того как утилита отработает у вас появится обычный объектник, как будто это был .C файл. Который вы добавите линковщику для сборки программы, таких объектников можно добавлять сколько угодно, а для того что бы вы могли их найти в памяти они объявляют метки указанного формата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Бинарь во флеш
СообщениеДобавлено: 13 янв 2018, 02:27 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 437
В вашем случае -I binary -O elf32-avr -j .text -B avr pic.gif pic.o
где то так, хотя по поводу -B не уверен что архитектуру указал правильно, под рукой нет инструмента что бы проверить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Бинарь во флеш
СообщениеДобавлено: 13 янв 2018, 03:00 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 14:23
Сообщения: 127
Откуда: Нижний Новгород
ок. попробую.
делал так, компилирую штатно в авр-студии, потом к полученному добавляю секцию:
avr-objcopy --add-section .wav=zzz.wav abc.elf
она добавляется, objdump её видит! далее то, что писал выше:
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature abc.elf abc.hex
- конвертация в хекс с удалением секций которые не нужны во флеше. в итоге .wav там тоже нет...
В любом случае вам спасибо!!! продолжу ковырять завтра)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Бинарь во флеш
СообщениеДобавлено: 13 янв 2018, 03:46 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 437
Вы не понимаете, попробую с начала.
1) у вас есть проект из файлов main.c ; parser.c ; disp.c;
2) вы gcc компилируете main.c -> main.o; parser.c -> parser.o; disp.c -> disp.o;
3) вы с помощью objcopy -I binary -O elf32-avr -j .text -B avr pic.gif pic.o заносите свою картинку из файла pic.gif в файл pic.o
4) линкуете все файлы *.o в proj.elf
5) с помощью objcopy переводите как обычно proj.elf в proj.hex
6) прошиваете proj.hex как обычно.
все


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Бинарь во флеш
СообщениеДобавлено: 13 янв 2018, 16:28 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 14:23
Сообщения: 127
Откуда: Нижний Новгород
Да, всё получилось.
Только в пункте 3) -j .text лишнее, видимо нет такой секции в pic.gif )
Огромное спасибо!!!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB