Easyelectronics.ru

Электроника для всех
Текущее время: 18 ноя 2018, 11:15

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • 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
Сообщения: 502
есть, утилита называется 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
Сообщения: 502
Так вы для того и указываете ключевое слово 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
Сообщения: 502
В вашем случае -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
Сообщения: 502
Вы не понимаете, попробую с начала.
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 часов


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

Сейчас этот форум просматривают: Google [Bot]


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

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

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