ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
809414
Звероящер (13.01.2018 21:59, просмотров: 13444)
STM32, Cube, HAL и все-все-все. Однажды ослик Иа, у которого был очередной приступ депрессии, попросил своего друга Винни-Пуха написать код для USB HID-джойстика под STM32, потому как Иа, хоть и был лютым меланхоликом, иногда делал интересные железяки, вроде речевого имитатора Сова на AVR, пчёлодетектора или даже медоискателя (за который Пух был безмерно благодарен). Но в этот раз он решил прикрутить к джойстику RS485, чтобы просто было, и пояснил Пуху, что надо будет делать Composite Device, чтобы в одном микраше был и HID и виртуальный COM-порт. Почесал Пух опилки в своей голове и клубни между ног и сел программировать. А поскольку он был достаточно ленив, то взял он Куб с Халом, почитал Хабр и прочие сайты и за день накидал рабочий, как он подумал, код. Первая пчела, которая его ужалила - была сама операционная система, которая ругалась на дескриптор репорта. Пух вставил репорт из примера - данные пошли, джойстик эмулировался нормально. Втыкал свой репорт - не работало. Это жжжжж неспроста, подумал Пух и пошёл к своему другу, Кролику. Кролик был очень умный и сразу перешёл к делу. "Медовуху прихватил?" - спросил Кролик. "Конечно!" - ответил Винни-Пух. И они принялись за дело. После того как сознание Кролика стало свободно вмещать быдлокод Винни-Пуха, прощлое, будущее и даже мозг самого Винни-Пуха, он изрёк: "У тебя структура невыровненная" и уснул тут же на столе. Пух стал внимательно смотреть в код. И оказалось, что sizeof тут: static struct { uint8_t buttons; uint8_t d_pad; uint16_t axis[3]; } ExampleReport; ... ... USBD_HID_SendReport(&hUsbDeviceFS, (uint8_t *)&ExampleReport, sizeof(ExampleReport)); ... и тут: static struct { uint16_t axis[3]; uint8_t buttons; } reportPUHJoystick; ... ... USBD_HID_SendReport(&hUsbDeviceFS, (uint8_t *)&reportPUHJoystick, sizeof(reportPUHJoystick)); выдавал один и тот же размер. "Ахтыжёбаныйтынахуй!" прошептал Пух и вырубился, успев однако неимоверным усилием затухающего сознания изменить длину переменной с восьмибитовой на шестнадцатибитовую. Очнулся Пух у себя дома, лежащим на кровати, с прототипом девайса в руке, и Пятачком с разбитым пятаком, который что-то невнятно хрюкал и тыкал пальцем в монитор компьютера. На роскошном мониторе с диагональю 101 дюйм (да-да, для Пуха размер и количество всегда имели значение) чем-то красным было написано: "HAL - говно!!!" и ниже мелким шрифтом "AVR - форева". Надо сказать, что Пятачок был модным поросёнком и всегда следовал моде, не понимая, нужно или нет. Поэтому он носил очки "а-ля Остин Пауэрс", ходил в барбершопы, парил вейпом, в кармане таскал iPhone с отключенным фитнес-трекером на руке, потому как не знал, как его заряжать и поэтому носил его чисто для понта. А программировал либо на Руби, либо на С#, и вовсю строчил программы уровня "моргнуть светодиодом" на Расберри Пай, Бананах и прочих недокомпьютерах. Правда, иногда, после употребления различного рода веществ, он спускался до уровня микроконтроллеров, но только 32-битных, потому как его душа не могла выносить 8-битники с их системой команд и гарвардской архитектурой. И в этом момент он находил общий язык с Винни-Пухом. Приподнявшись на локте, Пух прохрипел сиплым голосом :"Так почему HAL - говно?". На что Пятачок отвечал, что мы сидели стали нагружать потихоньку микраш посылками и выяснилось, что при передаче всего 4-х байт с частотой 10 Гц по виртуальному сом-порту и одновременной передаче репорта джойстика с таким же темпом, микраш тупо начинает тупить и неуспевает передавать репорты в комп. А когда Пятачок сказал, что так и должно быть, что Куб и Хал - модно, стильно, молодёжно, просто у тебя микраш дохлый, что 72МГц - это вообще ниочем, что надо брать Распберри пай или на худой конец, Оранжпай, и не ебать мозг, то у Пуха внезапно остекленели глаза и он взмахнул лапой, после чего Пятачок ничего не помнит. Пух протянул руку к холодильнику, нащупал там банку холодного тёмного пива "Балтика 6", открыл и залпом выпил. "Раритет" - сказал Пятачок и прекратил хлюпать носом. Подошел к холодильнику и тоже взял "Балтику 6". Тут в дверь тихо постучали и вошёл помятый Кролик. Молча подошёл к холодильнику, открыл его и присоединился к друзьям. "Кажется, я застрял в коде" - сказал Пух. "А что же делать?" - спросил Пятачок. "Что-что... Ничего!" - ответил Кролик, "тут или ХАЛ нахуй, или микраш". "Ну или Иа" - добавил Пятачок. Кролик покосился на него и молча протянул ему зеркальце. Пятачок втянул голову в плечи и жалобно всхлипнул. Пух опять залез в холодильник, достал шестёрку, выдул её, срыгнул и сказал: "Да пошел этот Хал в жопу!". И сел читать даташит на микраш. Кролик многозначительно посмотрел на Пятачка, и тот полез в холодильник. А в это время Иа сидел в хорошем настроении дома и паял схему на миллион китайских светодиодов с WS2801 и думал, что его друг Винни-Пух их сможет запрограммировать, да так запрограммировать, что у него всегда будет хорошее настроение. И да. Надо не забыть, что бы светодиоды управлялись по пяти виртуальным СОМ-портам, потому что "пять" было любимое число ослика...