|
|
  |
Nios и файлы, включение содержимого файла в тектс программы. |
|
|
|
Mar 27 2009, 08:51
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Вобщем, дело такое: например, программа в ниосе выводит слой графики в память. При этом я брал содержимое файла, форматировал для представления в виде переменной вроде Код const char Times10[] __attribute__((aligned(2))) ={ 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x0F,0x00,0x0A,0x08,0x04,0x00,0x0A,0x26,0x04, 0..... Так же поступаю со шрифтами. Но только со шрифтами это и удобно. А при работе с графикой каждый раз содержимое bmp файла представлять в виде переменной неудобно. А что делать, если я хочу прошивку для Vinculum включить в программу... Вопрос такой, как мне добавить содержимое файла, например, img.bmp в текст программы, чтобы я потом мог обращаться к нему как к стринговой переменной или пространству памяти? Что-то вроде #include img.bmp Но где и как это сделать? ведь компилятору нужно еще перемунную назвать. Или может Код [code]const char Times10[] __attribute__((aligned(2))) ={#include img.bmp}
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Mar 27 2009, 17:18
|
Гуру
     
Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640

|
Цитата(torik @ Mar 27 2009, 11:51)  Вобщем, дело такое: например, программа в ниосе выводит слой графики в память. При этом я брал содержимое файла, форматировал для представления в виде переменной вроде Код const char Times10[] __attribute__((aligned(2))) ={ 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x0F,0x00,0x0A,0x08,0x04,0x00,0x0A,0x26,0x04, 0..... Так же поступаю со шрифтами. Но только со шрифтами это и удобно. А при работе с графикой каждый раз содержимое bmp файла представлять в виде переменной неудобно. А что делать, если я хочу прошивку для Vinculum включить в программу... Вопрос такой, как мне добавить содержимое файла, например, img.bmp в текст программы, чтобы я потом мог обращаться к нему как к стринговой переменной или пространству памяти? Что-то вроде #include img.bmp Но где и как это сделать? ведь компилятору нужно еще перемунную назвать. Или может Код [code]const char Times10[] __attribute__((aligned(2))) ={#include img.bmp} имхо, на любимом скриптовом языке (PYTHON, AWK, PERL, RUBY, LUA, etc) написать конвертор бинарника в текст вот на питоне (важно пробелы), хотя мой любимый авк, питон я пытаюсь внедрять  Код import sys q=0 print 'const char t[]={' for t in open('img.bmp','rb').read(): if q: sys.stdout.softspace=0 print ',' print hex(ord(t)), q=1 print '};'
|
|
|
|
|
Mar 28 2009, 14:35
|

Гуру
     
Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988

|
Цитата(torik @ Mar 28 2009, 16:29)  Может это и то, но мне пока не понятно. Что это за удав такой, в какой оболочке с ним работать, что получится в результате. Как в ниосе это сделать? Например, нужно прошить контроллер с ПЛИС. Может в таком случае можно через JTAG файл передать? это такой скриптовый язык. http://ru.wikipedia.org/wiki/Pythonhttp://www.python.ru/devel/я так понял, вам надо bmp сконвертить в hex, сделайте конвертер на любом языке, который знаете, и залейте его программатором в память.
|
|
|
|
|
Mar 29 2009, 08:05
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Код что бы включить bmp файл самое простое это использовать zip-file. Как пользоваться можно посмотреть в разделе "Read-Only Zip Filing System" в "Nios II Software Developer’s Handbook". Но что-то мне там не понравилось, кажется из-за размера кода и скорости работы. Поэтому просто подстегивал bmp-файл при загрузке (добавляется в окне Flash Programmer) в нужное смещение. А в самой программе считывал по этому смещению. К сожалению проект не сохронился, детали не скажу. Но делается это, помнится, несложно. Насчет zip погляжу, спасибо. А вот вариант заливки через флешпрограмер в ПЗУ мне тоже не очень нравится: программа ниоса хранится у меня в EPCS, так что как определить в каком диапазоне адресов лежит моя программа и sof? Код я так понял, вам надо bmp сконвертить в hex, сделайте конвертер на любом языке, который знаете, и залейте его программатором в память. Какой смысл конвертировать bmp в hex... Речь идет о том как любой файл прицепить к коду программы (отдельно прошить тоже вариант) без всяких конвертаций. bmp лишь пример. Код что бы включить bmp файл самое простое это использовать zip-file. Как пользоваться можно посмотреть в разделе "Read-Only Zip Filing System" в "Nios II Software Developer’s Handbook". Но что-то мне там не понравилось, кажется из-за размера кода и скорости работы. Поэтому просто подстегивал bmp-файл при загрузке (добавляется в окне Flash Programmer) в нужное смещение. А в самой программе считывал по этому смещению. К сожалению проект не сохронился, детали не скажу. Но делается это, помнится, несложно. Насчет zip погляжу, спасибо. А вот вариант заливки через флешпрограмер в ПЗУ мне тоже не очень нравится: программа ниоса хранится у меня в EPCS, так что как определить в каком диапазоне адресов лежит моя программа и sof? Код я так понял, вам надо bmp сконвертить в hex, сделайте конвертер на любом языке, который знаете, и залейте его программатором в память. Какой смысл конвертировать bmp в hex... Речь идет о том как любой файл прицепить к коду программы (отдельно прошить тоже вариант) без всяких конвертаций. bmp лишь пример.
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Mar 30 2009, 13:39
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Незнаю, чем тема не понравилась в ПЛИС-> Среды разработки, но продолжу: подключил файл. Код FILE* fp1; char prompt1 = 0; char buffer[1024]; fp1 = fopen ("/mnt/host/readme.txt", "r"); //Open file for reading and writing if (fp1) { while (fgets(buffer, sizeof(buffer), fp1) != NULL) { fprintf(stdout, "%s", buffer); } В таком случае все выводит через JTAG, все вижу, хорошо... Но это работа со строками, а мне надо читать не как строку, а как бинарные данные. Например, функция getc(fp) должна бы давать просто байт, а она не дает ничего (виснет). Как правильно? Незнаю, чем тема не понравилась в ПЛИС-> Среды разработки, но продолжу: подключил файл. Код FILE* fp1; char prompt1 = 0; char buffer[1024]; fp1 = fopen ("/mnt/host/readme.txt", "r"); //Open file for reading and writing if (fp1) { while (fgets(buffer, sizeof(buffer), fp1) != NULL) { fprintf(stdout, "%s", buffer); } В таком случае все выводит через JTAG, все вижу, хорошо... Но это работа со строками, а мне надо читать не как строку, а как бинарные данные. Например, функция getc(fp) должна бы давать просто байт, а она не дает ничего (виснет). Как правильно?
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|