Автор |
Съобщение |
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4577 Местоположение: Новата земя на племето Мутум'ба
|
има ли тук специалисти по ардуино?
Заиграл със се с това нещо с за пръв път и искам да постигна конкретен резултат, обаче имам код който си е на обикновено С а искам да викам оттам дуински функции. Другата посока (дуино вика С) е без проблем, обаче не намирам начин за тая посока дето на мен ми трябва. Дали е възможно изобщо? Някакви идеи?
_________________ 'просто' е технически синоним на 'красиво'
|
Чет Яну 10, 2019 11:33 am |
|
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 8:19 pm Мнения: 4410 Местоположение: Stara Zagora
|
Re: има ли тук специалисти по ардуино?
Ардиуното не компилира ли всичко като C++ код? Или *.c файловете ги компилира като C код?
|
Чет Яну 10, 2019 1:24 pm |
|
|
radolin
Ранг: Форумен бог
Регистриран на: Пон Дек 19, 2005 11:21 am Мнения: 1025
|
Re: има ли тук специалисти по ардуино?
C++ компилира, обаче преди това минава през един препроцесор: https://github.com/arduino/arduino-preprocessorВместо страндартната main функция в техния 'скеч' имат две функции setup и loop, като първата се извиква веднъж, а втората я върти един безкраен цикъл. Тук има описание на билд процеса: https://github.com/arduino/Arduino/wiki/Build-ProcessПовечето Ардуино библиотеки са C++. Ако оправиш include пътищата на компилатора би трябвало да може да ги ползваш и извън Ардуино средата. Ти искаш да ползваш Ардуино средата, или да билдваш извън нея?
|
Чет Яну 10, 2019 4:36 pm |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4577 Местоположение: Новата земя на племето Мутум'ба
|
Re: има ли тук специалисти по ардуино?
Ами си знам само чисто С. Плюсовете ме отвращават с разните им там класове и т.н... Това което искам да постигна е да мога от моя код (на чисто С) да викам някак си функции от библиотеките на дуиното за да мога да се възползвам от функциите за ниското ниво. Пробвах всякак с пътищата ама не става защото изглежда че по някакъв начин трябва да направя някаква обвивка, вероятно на С++, която да експортва тия функции така че аз да мога да ги викам от моя С код. Поне така си мисля ама не съм сигурен та затова питам. Би ме учудило ако никой досега в света не се е сблъсквал с подобен проблем и няма решение
_________________ 'просто' е технически синоним на 'красиво'
|
Чет Яну 10, 2019 5:03 pm |
|
|
gicho
Ранг: Форумен бог
Регистриран на: Пон Мар 13, 2006 12:59 pm Мнения: 3855 Местоположение: Габрово
|
Re: има ли тук специалисти по ардуино?
И на мен ми се чини че ще ти трябва по средата да има C++ файл който да обгрижва нещата и да ти дава C API (extern "C") към останалия ти код. И тук така мислят: https://stackoverflow.com/questions/24657009/how-do-i-use-arduino-libraries-with-standard-c-codeАко не са много и сложни библиотеките можеш да ги преработиш, но то реално е същото. Като обем на работа ще има разлика в едната или другата посока, в зависимост къде е по-широк интерфейса.
|
Чет Яну 10, 2019 5:22 pm |
|
|
radolin
Ранг: Форумен бог
Регистриран на: Пон Дек 19, 2005 11:21 am Мнения: 1025
|
Re: има ли тук специалисти по ардуино?
Ардуино библиотеките са C++, тоест класове с методи. Няма как да извикаш директно метод на клас от С. Може както Гичо предлага, но ако си пребориш отвръщението може и да компилираш твоя код като С++.
Друго, което трябва да имаш предвид е, че Ардуино средата следва някакви свои си конвенции - примерно ползва Timer0 за да осигури функцията millis() и подобни.
Ти кои библиотеки искаш да ползваш?
|
Чет Яну 10, 2019 5:57 pm |
|
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 8:19 pm Мнения: 4410 Местоположение: Stara Zagora
|
Re: има ли тук специалисти по ардуино?
C++ си компилира C кода ти обикновено директно. Тоест пишеш си C кода в *.ino или *.cpp файлове и си викаш каквото ти душа сака от ардуинските функциионалности. Никой не ти налага да пишеш класове. Но това което е класове си го ползваш както си му е реда. Иначе трябва да пишеш както казаха колегите функции които да викат съответните ардуино функционалности.
|
Чет Яну 10, 2019 6:12 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4671
|
Re: има ли тук специалисти по ардуино?
Бабане, порт ли пишеш, апликация, библиотека... ? и съ чудя за кво са набутали тва ".ino" като си е с++ (в PlatformIO-то няма разширения ино -> cpp) иначе си е стандартно викане от С++ .... extern "C" void function(.... или си оправи С хидърите с: #ifdef __cplusplus extern "C" { #endif ... #ifdef __cplusplus } #endif #endif
може изобщо да не следваш ардуино "конвенциите"... нямаш никакви ограничения
Ардуиното компилира каквото може GCC .... като най-използван компилатор
_________________ main[-1u]={1};
|
Чет Яну 10, 2019 6:52 pm |
|
|
gicho
Ранг: Форумен бог
Регистриран на: Пон Мар 13, 2006 12:59 pm Мнения: 3855 Местоположение: Габрово
|
Re: има ли тук специалисти по ардуино?
Проблемът е че трябва да конструира обектите от ардуино библиотеките, преди да ги ползва. А това не става със C-код - доколкото разбрах той иска да избегне писането на C++, но няма как да стане понеже библиотеките обикновено са класове. Има изключения, но са достатъчно редки и нямат отношение към случая. Реално, ако отдели няколко часа да види примерите за 2-3 библиотеки, които да кажем му трябват, ще е в час и няма да се чуди изобщо. Но ако иска да направи някаква среда в която да може да вкара произволна библиотека, и евентуално на неговите платки да могат клиенти през C да ползват всякакви библиотеки, ще е по-сложно - ще трябва wrapper, а за да е той универсален (да не портва всяка библиотека) ще е трудно - макросите/темплейтите може и да свършат работа, но задачата би била нещо като generic викане на c++ код от C - а това не ми е известно някой да го е правил. Може и някакъв код генератор да се измисли, с уговорката че повечето библиотеки са сравнително прости като архитектура - да се завърти конструктора към функция, и да се експортират методите като други функции, и да има структура за вътрешните данни - но това не е много смислено като задача ако приемем че не-харесването на плюс-плюса е движещата сила.
|
Пет Яну 11, 2019 10:51 am |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4671
|
Re: има ли тук специалисти по ардуино?
Така е ако използва Ардуино/С++ класове и библиотеки (налични, готови... ) но АКО си пише нещо негово (я сензор, я някаква математика ... ) може спокойно да си го напише на С или асемблер В основата на Ардуиното е С ( ядро, периферия, интерфейси... ), после е надградено до С++ Ардуино Апи
_________________ main[-1u]={1};
|
Пет Яну 11, 2019 3:03 pm |
|
|
radolin
Ранг: Форумен бог
Регистриран на: Пон Дек 19, 2005 11:21 am Мнения: 1025
|
Re: има ли тук специалисти по ардуино?
Аз доколкото разбирам точно това иска.
|
Пет Яну 11, 2019 6:09 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4671
|
Re: има ли тук специалисти по ардуино?
няма ограничения в Arduino / PlatformIO основно GCC ... водещо C++ ... миксирай Asm/С/С++ "както знаеш" по "законите" на компилатора водещото С++ е базирано на https://en.wikipedia.org/wiki/Wiring_(d ... t_platform)
_________________ main[-1u]={1};
|
Пет Яну 11, 2019 6:59 pm |
|
|