?

Log in

 
 
30 November 2016 @ 12:13 am
Как написать "Hello, World!"  
- Надо взять процессор. Для простоты возьмем STM32F405.

- Обязательно нужен дисплей, иначе ничего видно не будет. Возьмем например на распространенном чипе ILI9481.

- после этого подключаем дисплей к процессору. Для этого нужно всего 24 провода. Мы же хотим чтобы текст отобразился быстро? Хотим. Поэтому параллельная 16-ти битная шина.

- после этого читаем учебник по С. Ибо язык С простой, и для него есть компилятор под Cortex-M4 семейство процессоров. Тут надо сделать важное отступление. Есть опасные сектанты, которые будут рассказывать, что C#, JavaScript, Python, Lisp, Forth (нужное пожчеркнуть) проще в изучении. Некоторые ведутся, и потом долго ли, коротко ли - пишут компилятор с этого языка на ARM инструкции.

- после изучения языка С можно начать читать даташит на Cortex-M4 и компилировать простые примеры. Самый первый пример - наверняка будет мигание светодиодом. Некоторые даже называют это "Hello, World!" программой. Но лично я с негодованием отметаю такую интерпретацию. Где вы тут видите Hello? Где запятая? Где восклицательный знак?

- поэтому следующий этап - скачать первую попавшуюся графическую библиотеку/драйвер для дисплея. Если нашлась библиотека под Arduino и ILI9341 - не беда. На Arduino тоже пишут почти на C. У ILI9341 аж 4 первых символа совпадают с ILI9481. Поэтому далее, при помощи молотка и какой-то там матери пытаемся это запустить на нашем железе.

- дальше вспоминаем, что мы не в каменном веке, поэтому надпись должна быть выведена по русски на utf-8, используя пропорциональные шрифты и с антиалиасингом

- и не забудьте настроить гамму на дисплее, иначе от вашего антиалиасинга не будет никакого прока!

 
 
 
RW9UAOSergey Gimaev on November 30th, 2016 05:49 am (UTC)
картинка: нельзя просто так взять и
помигать свдидом на кортексе
Емельянов Эдуард Владимировичeddy_em on November 30th, 2016 05:51 am (UTC)
А то!
Это обязательно нужно сделать с использованием как минимум пары связанных таймеров, да еще и ПДП туда прицепить.
balmerdxbalmerdx on November 30th, 2016 07:34 am (UTC)
Когда делал детсткую игрушку, где светодиоды должны были мигать красиво - использовал PWM для каждого светодиода на физическом уровне. На логическом - HDR и перевод gamma->linear space.
balmerdxbalmerdx on November 30th, 2016 07:16 am (UTC)
Пользователю тоже потом будешь азбукой морзе сообщения выводить?
Емельянов Эдуард Владимировичeddy_em on November 30th, 2016 05:50 am (UTC)
> utf-8
Жирно и бесполезно. Есть же кошерные кодировки. Лично я КОИ8-Р использую везде. В "моем ведомстве" только один компутер под хрюникодом (тупо лень было заморачиваться с переводом бубунты на нормальную кодировку, т.к. компутер используется тупо как клиент для веб-морды — даже на ASCII все работало бы без проблем).
balmerdxbalmerdx on November 30th, 2016 07:15 am (UTC)
Сейчас практически все текстовые редакторы/среды разработки используют UTF-8 в качестве кодировки по умолчанию. Поэтому могу написать drawString(x,y, "Привет!"); и будет выводиться на экран. Причем все будет хорошо как под Windows, Linux, MacOs так и при хранении в git/svn.

Насчет бесполезно - захочется подключить еще один язык, например немецкий. С кои8-р будут определенные проблеммы.
Емельянов Эдуард Владимировичeddy_em on November 30th, 2016 07:47 am (UTC)
Во-первых, с хрюникодом будут проблемы при разработке на сях (вместо нормального char* str="шалом" придется черт-те что городить + длина строки никак не будет коррелировать с количеством памяти, которую под эту строку надо отвести). Во-вторых, шрифты дофига места будут занимать.
Да, с мультилингвой однобайтные кодировки не дружат, но это бывает нужно крайне редко. И, кстати, для мультилингвы (если это не иероглифические языки) всегда можно расширить таблицу символов в шрифте на всякие дополнительные (те же ß, þ, ĉ, å, ē и т.п.).
balmerdxbalmerdx on November 30th, 2016 07:54 am (UTC)
У меня проект на C и можно писать char* str="шалом", будет работать. Шрифт высотой 41 пиксель latin1 + русские буквы занимает 20 килобайт. Кстати этот шрифт как раз на фотке.

Edited at 2016-11-30 07:55 am (UTC)
ikaktysikaktys on November 30th, 2016 12:35 pm (UTC)
а какую либу использовал, не эту ?

http://marekburiak.github.io/ILI9341_due/
balmerdxbalmerdx on November 30th, 2016 01:14 pm (UTC)
Использовал библиотеку, в начале которой написанно:
ILI9341 2.2 TFT SPI library
based on UTFT.cpp - Arduino/chipKit library support for Color TFT LCD Boards
Original library you can find at http://electronics.henningkarlsen.com/

Но она была для AVR/PIC на С++ написанная. Потом переписал ее на С без плюсов. Постепенно оптимизировал. Не так давно дописал для ILI9481 кусочек кода в эту библиотеку. Вобщем самописное говно, там уже мало от оригинального кода осталось.


Edited at 2016-11-30 01:19 pm (UTC)
alex_avralex_avr2 on November 30th, 2016 02:50 pm (UTC)
увидел пост и заказал Nextion..
balmerdxbalmerdx on November 30th, 2016 03:19 pm (UTC)
Этот дисплей стоит 400 руб/шт примерно https://ru.aliexpress.com/item/3-2-inch-TFT-LCD-screen-module-Ultra-HD-320X480-for-Arduino-MEGA-2560-R3-Board/32604352555.html

Сколько FPS выдает Nextion при полном обновлении экрана?

alex_avralex_avr2 on November 30th, 2016 03:37 pm (UTC)
Если честно - без понятия :))