Урок для забалдуев (таких как я)

Евгений Петрович, я вспомнил!

Собственно не знаю, можно ли это именно к Вам отнести (или как-то более расширено) - думаю совместно с администрацией форума можно будет в дальнейшем вопрос решить.

А вопрос у меня вот какой (наверное не всем интересный):

В среде ардуино используется Си++ и ООП.
В нативных средах микроконтроллеров это либо ассемблер, либо Си (без ++).
Соответсвенно нет там никаких прекрас из объектов и тп.

Но в основном же там (в библиотеках, что хочется переписать на Си) и ООП как таковое не используется «на всю мощь». Что там делают - объект для кнопки, или светодиода или тп.

Получается такие «объекты» (без полиморфизма, и зачастую без наследования) можно переписать под обычный Си.

Вот и вопрос: Как правильно это сделать?
Для примера можно взять полюбившуюся мне библиотеку кнопок (kakmyc_btn). Ссылка на GitHub.

Возможно такое от Вас?

Думаю еще нужно добавить, Хотя Вы и сами это знаете и понимаете, что millis() можно легко заменить своей функцией на таймере. Вопрос к этому не относится.

Почему? Разве МикрочипСтудия - не нативная среда? Там С++ в полный рост.

Что? Переписать на С? Не, я столько не выпью. Это надо @Kakmyc просить.

Да и не люблю я этот С. Мне больше нравятся функциональные языки. Там программирование в виде близком к чистому искусству. Они ж там не связаны требованием высокой производительности, там такие возможности есть, что и С++ – то ни в каком кошмаре не снилось, а С – это же, с точки зрения программирования, совсем утилитарное убожество – только «проги кодить». Я ведь не «кодю» я самовыражаюсь, для меня это поэзия. Я как-то вот тут человеку объяснял, не зна, понял ли он. Кстати, пример о котором я там говорил, могу живьём показать.

К сожалению не знаю какую именно версию используете Вы, но скачанная последняя версия на начало ноября предлагала только XC компилятор, который (как Вы знаете) С++ не поддерживает. Я, честно говоря, её и не использую (если микрочип - то у меня MPLAB X IDE стоит). Но всё же…

Евгений Петрович, я Вас услышал. Могу ли я попросить данную тему не закрывать и не удалять, на случай если что-то спросить в переделке с С++ на С или Вы вообще не хотите с подобным «связываться»?

Да, нет, почему спрашивайте

А вот это можно узнать? Если Вас не затруднит?

Вот, что она предлагает у меня

А вот её версия

В которой версию gcc компилятора менять элементарно. Подумываю отказаться от атмел студио 7 (но душа болит, сам не знаю почему)…

Вы обновляли или скачивали новый дистрибутив? Если последнее - поделиться им можете?

Да, нет, она давно у меня стоит. Иногда говорю ей типа “обновись”, но редко

Видимо поэтому, моя меня что-то и не спрашивает (или я не знаю как спросить). Кстати, а как спросить обновиться?

Моя версия:

Я когда на Check Update тыкаю - у меня не скачивается (заблокировано).

У кого есть VPN можете скачать файл по ссылке?

https://s3-us-west-2.amazonaws.com/atmel-studio/7.0.2594/as-installer-7.0.2594-web.exe

Общая схема проста:
ключевое слово class превращаем в struct избавляя от ключевых слов С++ типа private/public.
И далее все методы вида:
type MyClass::methodName( params… )
превращаем в функции по шаблону
type MyClass_methodName( MyClass *this, params… )
и посему вызовы вида
myVar.methodName( params… );
превращаем в вызовы функций вида
MyClass_methodName( &myVar, params… );
и всё.
То есть все “методы” просто имеют первый параметр - указатель на структуру бывшую в С++ классом и внутри тела метода имеющий название this (он уже не вменяется по умолчанию - имя тоже надо явно проставить в местах использования).
При использовании конструкторов/деструкторов и операторов чуть больше надо повозится раздав им символьные имена и явно проставив вызовы, но в целом конверсия проста и прямолинейна - если класс не ООП-нутый, а чисто прячет за фасадом ключевого слова class процедурное программирование, то можно прям транслятор написать автоматически превращающий код из С++ в код на С.

Держи - https://disk.yandex.ru/d/VgrakHAFanTgTA

Но это веб-инсталлер, думаешь, он блокировку обойдет?

Не знаю, оно мне сначала это предложило скачать ))

Спасибо!

Петрович, небось, персональным VPN самого пентагона пользуется )))

Пока так:

Если “родит” - сообщу ))

Собственно когда Страуструп создавал C++ он поначалу не писал какой то совершенно новый компилятор - он писал транслятор который превращал код на C++ в код на Си подстановками одних конструкций в другие по шаблону. Это уже потом профессиональные компиляторы научились обходится промежуточного этапа.

Что-то родилось и пошла установка (опять таки - упоминание о XC8 напрягает, но посмотрим что выйдет)…

ЗЫ: Скачивает XC Installer (сцука!)… Прерывать не буду…