arduino, początki, inny edytor

Tak na oko od 80 do 2000 linijek, z czego połowa komentarze.

Zacznij nie od pisania w C programu. Zacznij od rozpisania, szczegółowo, co i dlaczego ten program ma robić. Poszukaj w Google co to UML use case diagram. Narysuj coś takiego.

Co to jest czujnik? Jak się komunikuje? Czy transmisja ma być jakoś szczególnie zabezpieczona? Czy system będzie kiedyś rozbudowany o nowe rodzaje czujników?

Co to jest alarm? Ma robić hałas? Czy wysyłać SMS? A może coś innego?

Czy będzie jakiś wyświetlacz? A jakieś guziki? A może ma się łączyć Wifi/BT? Zapisywać logi na karcie SD?

Ma monitorować stan baterii? Swojej? Czujników?

Skąd ma brać czas? RTC? A co watchdogiem? Czy hibernować?

Jak sobie to spiszesz i rozrysujesz... przemyśl architekturę programu. Próba pisania od razu w C, bez ogólnego planu architektury, to 90% szansa na klęskę.

Nie przejmuj się długością programu. 2000 linijek to niewiele... jeżeli nie są zlepkiem chaotycznych goto.

Reply to
slawek
Loading thread data ...

Oryginalne środowisko Arduino jest bardzo siermiężne, ale ma tę zaletę że działa niemal od pierwszego kopa. Niestety, każda próba zrobienia czegoś bardziej skomplikowanego szybko zamienia się w walkę z ograniczeniami. Możesz podpiąć zewnętrzny edytor, ale to się mija z celem.

Zamiast tego mogę polecić Atom z wtyczką Platform.io. Może nie jest aż taki bezobsługowy jak środowisko Arduino, ale jeśli nie obawiasz się tego że na początku trzeba będzie poświęcić kilka minut na zainstalowanie wtyczek (platform.io, lint, etc), to dostaniesz proste w obsłudze, bardzo uniwersalne, profesjonalnej klasy narzędzie.

Jacek.

Reply to
Jacek Radzikowski

Od iluś tam lat programuje w C. Nigdy nie musiałem użyć goto. Nigdy nie było sytuacji w której goto pozwoliłoby aby mój program działał lepiej lub był bardziej czytelny.

W Fortranie IV używałem goto. W Snobolu 4 używałem skoków F/S. W Asemblerze Motoroli i w Asemblerze Intela używałem skoków, np. BNE i JNZ.

Ale w C, C++, C# nigdy nie musiałem. Więc nie używałem. Bo i po co?

Dodam: long jump w C. Też nie używam. Bo po prostu nie potrzebuję.

Zwykle użycie goto jest sygnałem słabej umiejętności programowania. To trochę tak jak wtedy gdy ktoś mówiąc, po polsku, co drugie słowo wstawia łacińskie słowo określające krzywą. Zwykle nie świadczy to o tym że słuchamy matematyka, albo wybitnego literata-poliglotę. Zwykle jest to ktoś o niezbyt wysokiej pozycji społecznej i adekwatnej inteligencji. Podobnie z goto. Dużo goto w C to po prostu niewiedza o mechanizmach sterowania właściwych dla tego języka. Przy tym dużo to może być nawet jedno.

Reply to
slawek

Jeszcze mały drobiazg: goto sprawia czasem kłopoty kompilatorom C++. Np. Borland C potrafił zapominać wywoływać destruktory po skoku poza blok.

Gdy język jest strukturalny, to goto nie trzeba używać.

A tego czego nie trzeba (robić dla osiągnięcia celu) robić nie należy. Ot i cała filozofia.

Reply to
slawek

slawek snipped-for-privacy@fakeemail.com napisał(a):

U mnie jest podobnie. Piszę od lat w C, czasem C++ i C#. Nauczono mnie żeby nie używać goto i nie użyłem nigdy. Równiez z tego powodu jakoś nie cierpiałem. Nie próbuję tutaj propagować tego słowa kluczowego. Natomiast linki takie jak przytoczony przekonują mnie, że czasem taka konstrukcja ma sens i warto jej użyć.

Reply to
Grzegorz Niemirowski

W dniu 2017-04-27 o 09:26, ToMasz pisze:

Jako nadajniki dwa atmelki migające jeden 1000Hz drugi

200Hz do modulacji laserka. Fotortanzystor jako odbiornik i za nim 2 szt LM567. Dalej atmelek wydający dzwięki, liczący itp.
Reply to
jacek

W dniu 2017-04-27 o 09:26, ToMasz pisze:

Ewentualnie 2 atmelki nadające kody RC5 bez modulacji na wskaźniki. Odbiornik na fototranzystorze itd...

Reply to
jacek

konstrukcja ma

Czasem (w jezyku C) goto ma sens.

Nigdy nie warto goto używać.

Po prostu aby użyć goto trzeba myśleć w kategoriach goto, czyli programowania sekwencyjnego. A to bardzo słabe narzędzie. Zdecydowanie lepiej użyć OOP lub paradygmatu funkcyjnego.

Innymi słowy: goto to takie lutowanie smd lutownicą do rynien.

Reply to
slawek

W dniu czwartek, 27 kwietnia 2017 20:21:53 UTC+2 użytkownik Grzegorz Niemirowski napisał:

Zajrzyjcie sobie do linka który podał Grzegorz. Zajawię również że gdzieś w kernelu linuxa goto siedzi i jest tam bardzo pozyteczne i nikt nie miał ochoty go wymieniać na przebieg strukturalny.

Ja rozumiem wasze podejscie i je podzielam. Ale poczytalem nieco i jednak są przypadku gdzie goto jest i sprawniejsze i elegantsze niz dodanie dodatkowych zmiennych, klauzuli if i pogrupowanie akcji.

Tyle ze aby wiedzieć że w danym miejscu trzeba goto trzeba najpierw napisac strukturalnie, popatrzeć i ocenić ze to zbyt skomplikowane, za duzo warunków i niepotrzebnie będzie się wykonywać a goto jest zgrabniejsze.

Zerknijcie sobie w internet i poczytajcie gdzie ludzie zdecydowali sie na goto i wyszlo im na dobre :)

Tutaj jeden z artów na ten temat.

formatting link
nie jest dobre w wielu przypadkach ale jednak czasem jest pozyteczne.

Reply to
sczygiel

W dniu czwartek, 27 kwietnia 2017 23:02:41 UTC+2 użytkownik slawek napisał:

No nie. Nawet Linux sie z Tobą nie zgodzi :)

formatting link

Reply to
sczygiel

W dniu piątek, 28 kwietnia 2017 08:53:00 UTC+2 użytkownik snipped-for-privacy@gmail.com napisał:

Linus, Linus mialo byc :)

Reply to
sczygiel

Użytkownik snipped-for-privacy@gmail.com napisał w wiadomości grup dyskusyjnych: snipped-for-privacy@googlegroups.com...

I co z tego? Nawet nie chce mi się czytać: ktoś chce udowodnić że potrafi zrobić z goto coś, co daje się zrobić prościej bez goto?

Reply to
slawek

Użytkownik snipped-for-privacy@gmail.com napisał w wiadomości grup dyskusyjnych: snipped-for-privacy@googlegroups.com...

To co piszesz to bajki. Takie same jak istnienie jednorożców i UFO. Przecież wszyscy wiedzą że jednorożce istnieją. Z całą pewnością.

Sprawność zapewnia dobry, optymalizujący, kompilator. I odpowiedni algorytm. Elegancja jest pojęciem subiektywnym. Obiektywny jest czas, wysiłek, koszt usuwania błędów.

Jeżeli ktoś ma niskie IQ, to większość rzeczy będzie dla niego "zbyt skomplikowanych".

Reply to
slawek

W dniu piątek, 28 kwietnia 2017 10:44:48 UTC+2 użytkownik slawek napisał:

Przeczytaj. Tam jest wszystko napisane co moglbym ci napisac samodzielnie. Polecam.

A jak ci sie nie chce czytac to mocno ograniczasz mozliwosci dyskusji.

Reply to
sczygiel

W dniu piątek, 28 kwietnia 2017 11:01:05 UTC+2 użytkownik slawek napisał:

Przeczytaj linke która ci podesłałem. Dowiesz sie czegos czego dziś nie wiesz.

Reply to
sczygiel

Jak byś optymalnie zaproponowal sprawdzanie np. 100 warunkow dopsowujacych coś do wzorca bez goto bez zagnieżdzania (z naciskiem na optymalnie)?

Reply to
Marek

Tiaa ciekawe, że zawsze w kontekscie goto jest w końcu przywoływany Linux :)

Reply to
Marek

snipped-for-privacy@gmail.com snipped-for-privacy@gmail.com napisał(a):

Ależ ja się zgadzam, że goto może być nieraz najlepszym wyjściem. Co prawda z przyzwyczajenia nie używam, ale te linki mnie przekonują. Mam też nadzieję, że slawek raczy te linki przeczytać zamiast powtarzać "nie bo nie" :)

Reply to
Grzegorz Niemirowski

Użytkownik "Grzegorz Niemirowski" snipped-for-privacy@poczta.onet.pl> napisał w wiadomości news:odvsq9$cf4$ snipped-for-privacy@node1.news.atman.pl...

Ja, lekko ironicznie mówiąc, mam takie spojrzenie na to, co przewrotnie ilustruje ten wierszyk Krasickiego: (którego też jest wzmianka w stopce)

formatting link
ę z założenia, że mając problem, szukam narzędzia, a jak mam problem i JAKIEŚ narzędzia, czasem i tak szukam innego, bo co, jeśli mam wbić gwóźdź w ścianę, to szukam młotka, proste, teoretycznie mogę spróbować obcęgami uniwersalnymi, jak mają masę, to pewnie nawet wbiją, ale lepiej jednak młotkiem. Jak potrzebuję wyciągnąć gwóźdź ze ściany, to sytuacja się odwraca... Młotkiem się namęczę (chyba, że to taki przystosowany, to inna sprawa), a obcęgami hop, zacisnę, oprę, pociągnę i wyciągnę.

Reply to
HF5BS

W dniu piątek, 28 kwietnia 2017 19:06:18 UTC+2 użytkownik Grzegorz Niemirowski napisał:

Tez mam taka nadzieje :) Bo nie powiem ze goto kiedys uzylem ale zrozumialem swoje rozterki z chwil kiedy mialem do zaprogramowania flow z warunkami i po zapisaniu i skopiowaniu paru fragmentów miedzy gałęziami zaczynałem myslec czy nie lepiej tego w funkcje zamknąć albo czy nie da sie tego jakos inaczej zrobic bez duplikownaia kodu. Wymyslalem wtedy wersje z zmiennymi sterującymi ale dalej nie bylo to to co bym chcial.

No i w skryptach gdzie nie ma obsługi wyjatków goto potrafi naprawde całkiem mocno poprawić obsługe problemów :)

Ale przyznam ze nie stosowalem zbytnio. Wole wersje strukturalne choć nie czuje sie z nimi komfortowo.

Po przeczytaniu tych artów przestałem sie trapić tym zagadnieniem, okazało sie ze nie jestem jedyny i paru mądrzejszych odemnie ten sam problem miało i lepiej go rozwiązac nie umieją :)

Reply to
sczygiel

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.