PROGMEM или как извлечь машинку

mazahaker
Offline
Зарегистрирован: 02.11.2015

Смотрю прям много уже написали. Давайте немного с предметкой разберемся. Просмотрел еще раз как либа работает с данными в ф-ии drawBitmap и там все верно - читаем через pgm_read_word(&data[tc]);, ну и еще бы это было не так, не работало бы тогда).

Buzzer2010 - тот скетч, который у тебя не завелся и где ты удалял progmem был некорректный) ты ведь удалял progmem'ы в файле исходника скетча, а нев файле с иконками (где progmem'ы есть и никуда их девать не надо). Так что думаю о том случае стоит забыть) Ведь этот скетч у тебя будетработать? - https://yadi.sk/d/UUaLcRh43Er9Ru

Подкорректирую вводную - когда объем занимаемого флеша переваливает за 100KB (или в том районе, уточну позже), вывод на экран отваливается, выкидываем отрисовку одной иконки, объем занимаего флеша уменьшается и все снова работает. Вот конкретный пример: если я использую скетч, где только отрисовка иконок, то (грубо) я могу отрисовать 10 иконок, когда я юзаю те же иконки, но в составе другого скетча, где когда в районе 1000строк, то могу отрисовать только 5 иконок.

andriano - объясни, правильно ли я понял, что объем инфы которую мы можем считать из флеша ограничен?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

В общем случае - нет. Но в конкретном может быть ограничен. По логике, если в названии функции присутствует суффикс "near", читать ею можно только из первых 64к.

mazahaker
Offline
Зарегистрирован: 02.11.2015

andriano пишет:

В общем случае - нет. Но в конкретном может быть ограничен. По логике, если в названии функции присутствует суффикс "near", читать ею можно только из первых 64к.

Тогда не ясно что происходит. Если это натолкнет на какие то мысли, то вот еще: если в код навтыкать выводов в порт, то после запуска скетча можно будет увидеть, что в порт инфа пишется, что гоорвит о том, что исходный код выполняется, но на экране ничего, не одна операция вывода на экран ничео не отрисует

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

mazahaker пишет:
Buzzer2010 - тот скетч, который у тебя не завелся и где ты удалял progmem был некорректный) ты ведь удалял progmem'ы в файле исходника скетча, а нев файле с иконками (где progmem'ы есть и никуда их девать не надо). Так что думаю о том случае стоит забыть) Ведь этот скетч у тебя будет работать? - https://yadi.sk/d/UUaLcRh43Er9Ru

Работает так же как и предидущий, с учётом того что у нас разрешения и чипы дисплеев - разные. Даже фоткать не буду - всё так же точно как и прошлый раз - не вмещается ))))

Скетч использует 117824 байт (22%) памяти устройства.

mazahaker
Offline
Зарегистрирован: 02.11.2015

Buzzer2010 пишет:

Работает так же как и предидущий, с учётом того что у нас разрешения и чипы дисплеев - разные. Даже фоткать не буду - всё так же точно как и прошлый раз - не вмещается ))))

Скетч использует 117824 байт (22%) памяти устройства.

Так и должно было быть

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Ну и где ты там?

Кстати насчёт машинки надо как-нить засесть. Я-то так нифига и не понял как одну только машинку из шрифта выдернуть ((

mazahaker
Offline
Зарегистрирован: 02.11.2015

Buzzer2010 пишет:

Ну и где ты там?

Кстати насчёт машинки надо как-нить засесть. Я-то так нифига и не понял как одну только машинку из шрифта выдернуть ((

С машинкой все просто. Берешь кусок массива, соотвествующий машинке, создаешь его какмассив с иконкой (примеров массива с иконками теперь предостаточно), считаешь его размер и потом юзаешь все это как иконку. К сожалению моя ардуина не всегда рядом, будет время мб проверну это

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

"Считаешь его размер" - это как ?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Buzzer2010 пишет:

"Считаешь его размер" - это как ?

= Width*Height*BitsPerPixel/BitsPerByte

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

andriano пишет:

Buzzer2010 пишет:

"Считаешь его размер" - это как ?

= Width*Height*BitsPerPixel/BitsPerByte

Не, он наверно имел ввиду размер массива. Блин, никак ниасилю эту машинку... Где-то видел как описываются шрифты, хотел изучить, да потерял где видел. надо поискать. там первые 4 бита что-то значат. мне писали тут... блин...

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Buzzer2010 пишет:

Не, он наверно имел ввиду размер массива.

А я о чем?

Цитата:

Блин, никак ниасилю эту машинку... Где-то видел как описываются шрифты, хотел изучить, да потерял где видел. надо поискать. там первые 4 бита что-то значат. мне писали тут... блин...

4 байта - это заголовок.

По формуле выше - размер данных.

Что значит каждый байт заголовка - да, писал.

Единственное, чего не написал, это что длина массива, который состоит из заголовка и данных, равна сумме длины заголовка и длины данных.

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

andriano пишет:

Buzzer2010 пишет:

Не, он наверно имел ввиду размер массива.

А я о чем?

Цитата:

Блин, никак ниасилю эту машинку... Где-то видел как описываются шрифты, хотел изучить, да потерял где видел. надо поискать. там первые 4 бита что-то значат. мне писали тут... блин...

4 байта - это заголовок.

По формуле выше - размер данных.

Что значит каждый байт заголовка - да, писал.

Единственное, чего не написал, это что длина массива, который состоит из заголовка и данных, равна сумме длины заголовка и длины данных.

да это я помню, что размер массива был 96 + 4 байта заголовок, да. Это я помню. там только заплёт с размером шрифта в точках. Какой-то байт должен отвечать за это....

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

0-й - ширина,

1-й - высота,

2-й - ASCII код первого символа,

3-й - количество символов.

mazahaker
Offline
Зарегистрирован: 02.11.2015

Ну как процесс, получилось что нибудь?

slider
Offline
Зарегистрирован: 17.06.2014

что скажете, гуру AVR ?

Короче, из много опытов (что было под рукой MegaCore на  Atmega128 и дисп 480x320 ) ,

появился вывод , что существует ограничение на размещение констант (иконок, данных,..)  в памяти для команд. 

если по этому поводу , то лучше в отдельную тему 

avr ограничение на объем данных размещенных в Flash памяти програмы

http://arduino.ru/forum/programmirovanie/avr-ogranichenie-na-obem-dannykh-razmeshchennykh-v-flash-pamyati-programy

// mazahaker, ежели что, фотку могу убрать

mazahaker
Offline
Зарегистрирован: 02.11.2015

Фотка не исходники, ничего страшного)