Немного C++ и OpenGL

Нашел на Хабре статью по OpenGL https://habr.com/ru/post/311808/. К сожалению исходники для неё пропали. Написал заново, заодно с assert-aми и исключениями.

Положил на Гитхаб.

[P. S.]
P.S. Так что если кому интересно посмотреть на обработку исключений, то там это есть, с некоторой синтаксической обвязкой.

(no subject)

Написал класс двумерного вектора для russianaicup.ru

Там, соответственно, точка, вектор, отрезок и прямоугольник (луч не стал писать). Может, кому-то будет интересно. Список реализованных операторов и какие из них встроенные, а какие внешние для классов очень тщательно продумал (я гарантирую это). Но почему так, пока не описал - долго. (

P. S. Естественно, до конца не дописан. )) Но достаточен для практического использования.

И немного кода использования:

class ExtUnit : public Unit { ... };
class MyUnit : public ExtUnit { ... };
class MyStrategy : public MyUnit, public UnitAction { ... };


Наличие конструкторов преобразования позволяет писать:


Vect2 vect2enemy = nearenemy - *this;


И, естественно, есть и такие конструкторы:


ExtUnit(const Unit& unit);


И всё копируется и потом обновляется в собственных list ExtUnit>, list ExtBullet> и т. п.

Подробнее не напишу, пока не закончится - правила не позволяют.

(no subject)

Завтра начнется russianaicup.ru

Только посмотрю. Одним глазком. )) Но Студию Комьюнити 2019 поставил, так, на всякий случай. Воткнула, конечно, обновление 28828, но это легко решается.

Заметка на Хабре всё-таки вышла

Вот обещанная ссылка: Заметка на Хабре вышла, а я и не заметил. (( Зато фоточки к заметке получились лучше, чем здесь.




Возвращаясь к I2C. Если подключить датчик BMP180 к питанию не напрямую, а через вывод микроконтроллера, то его можно рестартануть, если шина зависла. В коде, который я вчера поместил на Гитхабе это видно. Но обработка ошибок и флагов состояния – это отдельное, серьёзное дело, которым, конечно, тоже надо заняться.



[P. S.]
Кстати, вот такая подача напряжения питания на ведомые устройства позволяет не только рестартовать их, если шина зависла, но и поместить на одну шину I2C устройства с одинаковыми адресами. Такой вот получается сигнал выбора устройства.

Никто сегодня не помешает нам зажигать светодиодики

Хотя речь сегодня не об этом, а о превратностях аппаратуры, которые привели к тому, что сегодня не вечер понедельника, а вечер среды. Кстати, ссылки на статью на Хабре пока не будет, хотя бы потому, что устав ждать, я перевел её пока в редактирование. И правда, несколько в телеграфном стиле было написано, так что к лучшему. В лучших традициях, на Хабре статьи не рецензируются и не возвращаются, но это так почти везде, насколько я знаю. ))


Обмен по шине 0xEE, 0xF6 -> bmp180, рестарт, 0xEF, дата, дата -> чтение, стоп.

Казалось бы, всё просто, но нет. Началось всё с того, что в качестве честного ведомого устройства был выбран датчик давления BMP180. Т. есть, конечно, всё началось гораздо раньше.[Читать дальше...]

Подключен и, внезапно, шина занята. При первом обращении немного странно. Это происходит, если SDA или SCL притянуты к земле при обращении к шине. Происходит по разным причинам, но обычно потому, что ведомое устройство эту линию держит, а держит потому, например, что мы стоп ему забыли послать, а, в отличие от процессора, программный сброс ему сделать не можем. (( Один мальчик так микросхемку даже перепаивал – перепаяет, один раз срабатывает, потом снова перепаивает. А можно было просто питание снимать, но он не догадался. Пруф. Ну, и работу с шиной поправить, чтобы не висла после первого раза.



Ладно, подключил осциллограф, прямо к проводочкам, – когда же успевает прижать линию?









Обе линии лежат сразу. Так обычно бывает, когда подтягивающих резисторов на плюс питания нет. Ну хорошо, берем два резистора на 5 кОм, дело нехитрое, и припаиваем, вот так:
Тут, конечно, надо было бы сообразить, что такие мелкие платки делают в основном для тех, кто паяльник никогда в руках не держал, но вотще... Смотрим дальше.







Линии поднимаются, но происходит потеря арбитража на линии. ??
Вот с такой картинкой: [Смотреть и отгадка.]



В первой же статье в интернете фотография этой платы крупным планом и на ней там, где на моей плате впаяны конденсаторы – впаяны подтягивающие резисторы. Вот ниже фотография двух моих плат с датчиками, на одной нормальные сопротивления – на другой нет, пустые места. . Там же в коробочке уже лежат выпаянные конденсаторы (Нужен будет пруф – у меня есть фотка, где они на месте). На целую 1 мкФ, однако. Повезло, что у меня фен есть, но советский паяльник на 40 Вт с smd, тем более 0603 типоразмера, тоже хорошо справляется. И теперь, к тому же, у меня есть два конденсатора по 1-й мкФ.

Понятно, если лишние 10 см проводков с емкость пикофарад 10 заваливают фронт импульса на 500 нсек, то 1 мкФ – это перебор. Ну, я не в силах, короче, донести "трагизм" этой ситуации до неискушенных в этом деле читателей. ) Посмеялся, но время... В общем, милая китайская девочка, или мальчик, заправили в установщик вместо ленты с резисторами ленту с конденсаторами и я лично ни слова плохого не могу им сказать – сам, не отходя далеко от кассы, не далее как буквально за несколько дней до этого везде, где надо было писать SR1 & I2C_SR1_SOME_FLAG благополучно писал SR1 | I2C_SR1_SOME_FLAG и оно даже работало, потому что где-то состояние буферируется, а где-то задержка невелика и все флаги сбрасываются аппаратно, в общем-то. )


Но на этом приключения не закончились. На КДПВ видно, что читается 0xFFFF (там FFFG )) но девятый бит – это NACK) из регистра (условно) температуры. Ну, пока думал, что я делаю неправильно, пришел к выводу, что все-таки датчик неисправен. Верить в это не хотелось, но вот осциллограмма другого датчика:
[Смотреть.]i2c-EF-1.png
Ровно 100 кГц, обратите внимание.



В общем, аппаратную I2C, с горем пополам, доделал. К C++ это имеет не очень большое отношение, но всё же. ( Давление, кстати, первый датчик меряет, калибровка читается, просто первых серий, где температурный канал отключён.

На Гитхаб исходники выложены.


[P. S.]
Ну, что значит не очень большое отношение к C++? Теперь можно сделать общий базовый класс для аппаратной и программной I2C, например. И работа с union и структурами – где-то предтеча метапрограммирования на шаблонах.

Быть или не быть



Перевод М. Лозинского (печатается в сокращении).

Быть или не быть, – [Вот в чём вопрос] вот в чём вопрос;
Достойно ли смиряться под ударами судьбы,
Иль, ополчась на море смут, сразить их
Противоборством? Умереть, уснуть, -
Умереть, уснуть. - Уснуть!
И видеть сны, быть может?
Вот и ответ –
Какие ж сны в том смертном сне приснятся?
Внушая нам терпеть невзгоды наши
И не спешить к другим, от нас сокрытым?
Так трусами нас делает раздумье,
И так решимости природный цвет
Хиреет под налетом мысли бледным,
И начинанья, взнесшиеся мощно,
Сворачивая в сторону свой ход,
Теряют имя действия. Но тише!
Офелия? - В твоих молитвах, дева,
Да вспомнятся мои грехи.



Но отвлечемся от Гамлета ненадолго. Необходимо доделать I2C.


АппаратнI2C-2a.png
Аппаратная I2C – хорошо видны перезапуски (стоп-старт) после записи каждого байта.
Collapse )

Collapse )

Немного C++, шаблоны с переменным количеством аргументов и STM32

Спас Незнаечку. Жив. С Днем Космонавтики. Допишу проект для STM32F103. Раз уж зашла об этом речь.

Но не могу я писать



Поэтому взял С++ 17 и написал классы TRCC и TGPIO с шаблонными параметрами, обращение к которым будет вот таким: Collapse )

Теперь надо дописать I2C, но не пишется. Но вариантов нет, придется, а в каком виде – поглядим. )

P. S. [Читать...]
Написал про это заметку на https://habr.com
О тщеславие. Но нет. Я вижу в этом практическую сторону, иногда полезную, иногда вредную. Пройдет заметка премодерацию – выложу ссылку.
На Гитхаб положил изменения.

Светофорчик на C++

Завел себе канальчик на трубе. Чтобы положить туда видеоролик про светофорчик. Исходники на гитхабе, хотя там не всё ещё допилено. Но класс светофора и вспомогательные шаблонные классы в общих чертах написаны.

Никогда больше не буду заниматься программированием. Пойду спасать Незнаечку, но по дороге не смог удержаться, чтобы не сделать такой светофорчик, уж извините.

P. S.Collapse )

Как управлять заводом поставить Eclipse

Почитал этот ваш livejournal... и понял, что надо всё-таки написать инструкцию по установке Eclips'а.

"...практически всем, кто в теме, было понятно, что в установленные сроки практически невозможно было наладить серию 476-х на Авиастаре, поставь ты ген диром хоть Папу Римского... поставили Рогозина младшего, чтобы с помощью авторитета папы более лучше конектить пипл смежный... но чудес в этой жизни не бывает"

Собственно инструкция: Collapse )


P. S. Collapse ).

Так что если домножить на -1 известное ленинское высказывание, что
Коммунизм = Электрификация всей страны + Советская власть
то получится
Капитализм = -Электрификация всей страны - Советская власть
(-Электрификация – это, как минимум, чубайсовская система. Хотя про самого Чубайса остается только вздохнуть, однако.)