[Zlecę] wykonanie interface'u Ethernetowego do archi

Mała uwaga: W c++ wyjątki są bardzo ciężkie. Poniekąd wlaśnie stąd pochodzi urban legend dotyczący powiekszania się kodu C++ na uC. Wystarczy zrobić obiekt z metodą wirtualną i nagle *kolosalnie* powiększa się kod wynikowy wlasnie ze względu na propagacje wyjątków. Oczywiście wystarczy zdefiniować pure_virtual_function_call na własny ktory exceptiona nie rzuca, ale kto by to wiedział, lepiej pisać nastepnego bloga o nieprzydatnosci C++ na uC :) ...

Reply to
Sebastian Biały
Loading thread data ...

On 02/05/2012 22:53, Sebastian Biały wrote: > On 2012-05-02 22:32, Jerry1111 wrote: >> Z tego by wynikalo ze 'ukryte' odblokowanie przerwan na koncu funkcji >

Wiem gdzie, to semantyka.

No wlasnie ukryte jest wg mnie ciezej zdebugowac.

Jesli chce rozlaczyc logicznie wlaczanie i wylaczanie przerwan.

Jakbys mnie cytowal: tez sie nie zgadzam i tez moje doswiadczenia sa inne.

Ja nie mowie ze nie dziala. Ja mowie ze mnie by ograniczalo (za przyklad biore kod do ostatnio robionego urzadzenia, gdzie wlaczanie przerwan jest zupelnie gdzie indziej niz ich wylaczanie). Zupelnie gdzie indziej == inny plik.

Wyciales za duzo cytatow to i sens stracilo. Napisales ze: "Ada to jezyk obrosniety legeda jakosci ktora musi walczyc z faktami". A ja odpowiadam "crap prawda", Ada to jest jezyk ktory bardzo latwo przechodzi Sil4 i jest _powszechnie_ uzywany w pewnych galeziach przemyslu. Na pewno nie musi walczyc z faktami.

Tak, mozesz uzyc MisraC/C++, ale uwierz mi: latwiej bedzie sie na Ade przestawic...

Jak to ze statystyka, zalezy jak policzymy. Jesli cene koncowego produktu * ich ilosc to nie bedzie to juz szum statystyczny.

shit to tez gowno. Dobrze sprawdziles, tylko za szybko skonczyles sprawdzac.

formatting link

Reply to
Jerry1111

Tez mam ciasny kod. Po uplywie 3 roboczomiesiecy gcc zostal skreslony z listy kompilatorow nadajacych sie do pracy. Wybrany zostal inny (platny) bijacy gcc na glowe. Poczatkowo po prostu nie wierzylem dla kumpla co rozlozyl gcc na czynniki pierwsze (nie wierzylem ze gcc ma taki slaby optimizer) i musialem go potem przepraszac - mial racje i _bardzo_dokladnie_ podszedl do sprawy.

Tak - w tym przypadku cena kompilatora nie miala znaczenia.

Jaki nie powiem, bo nie moge.

Reply to
Jerry1111

Szkoda, bo to grupa techniczna i być może niektórzy chcieliby wiedzieć jaki kompilator jest bijący na głowę gcc.

Reply to
Mario

Albo ma taki slaby na konkretną platformę, albo to inny gcc ;) Ogromna ilośc softu komercyjnego nie potwierdza tej tezy. To nie jest idealny kompilator, ale nie jest też zły. Choć niektóre wybryki optymalizatora na AVR czasami mnie zadziwiają.

Reply to
Sebastian Biały

Po co debugować coś co na pewno działa? To troche jak argument klepaczy w C: Wole nie używać std::vector bo cięzko debugować. A ja się pytam, po co do cholery debugować *pewny* i *działajcy* kod? Bo może sie tam trafić bug w kompilatorze? Wszędzie się może trafić. To nie powód do braku zaufania do kompilatora i pisania wszystkiego w asm licząc na własną nieomylność.

To wtedy wpadasz w podobne bagno co rozłączne wlaczanie i wylaczanie mutexa. Po co chcesz to robić rozłacznie? Masz aż tak daleko jedno od drugiego? Może design jest mizerny skoro sekcja krytyczna ciągnie sie przez wiele funkcji i bloków?

Dlaczego tak to jest zrobione? Istnieje jakiś argument? Z chęcia go poznam. Pytam, bo ostatnio widziałem kilka kawałków kodu na PC w których nie dało się zrobić boost::scoped_lock. I nie wynikało to z przemyślenia bądź rozsądnej potrzeby. Po prostu tak "sie napisało". Mogło sie napisać inaczej, ale programista nie wiedział.

Mała uwaga: zawsze możesz zrobić coś na kształt move_lock jeśli

*naprawdę* musisz gdzie indziej uwolnić przerwania. Masz dwa w jednym: nie jesteś ograniczony w scope i masz pewność że ktoś to gdzieś uwolni.
Reply to
Sebastian Biały

W dniu 03.05.2012 23:32, Mario pisze:

Daleko nie trzeba szukać: avr-IAR, arm-rvds, h8-renesas. Pewnie więcej przykładów by się znalazło.

Reply to
Zbych

Mainstream gcc na dosc popularna platforme. Sorry - chcialbym wywolac te komentarze "ale to przeciez niemozliwe", tylko nie moge.

Nie ma nic wspolnego z Intelem, tyle moge powiedziec.

Reply to
Jerry1111

Jak juz kod bedzie pewny i dzialajacy to idzie do biblioteki i mi wisi w czym jest pisany. Na pewnym etapie zycia ten kod jest 'wrogi', 'niepewny' i 3x spowodowal wyciagniecie gasnicy ;-(

Oj, moze... ale moze tak samo dla C jak i dla C++.

Mysle ze design nie jest mizerny. Starczy powiedziec ze procek ma <5% wolnego czasu, ok. 10% spedza w RTOS i reszta w przerwaniach. Ot, taki sprytniejszy kontroler PWM do przetwornicy.

Jak wczesniej napisalem: czas wykonania programu. W taki sposob mam bardzo ladna kontrole nad wlaczaniem/wylaczaniem z priorytetami. Wiem, mozna inaczej zrobic ale u mnie kazda us kosztuje duzo. Poza tym kompilator glupi i nie zawsze wypelni pipeline procka tak dobrze, jak ja to zrobie recznie.

Ja wiem ze moge. Po prostu pokazuje ze dla roznych zastosowan sa rozne rozwiazania. Zaczelo sie od tego ze C++ jest lepsze od C - owszem, _czasami_ dla _niektorych_ zastosowan.

Reply to
Jerry1111

Więc kod na destruktorach gwarantuje że jest ok pod warunkiem braku bugow w kompilatorze. *Tego* nie gwarantuje, ale nie przypominam sobie takowego w gcc. Przypuszczam jednak że wiekszą masz szanse na dowolnego innego buga w C który też będzie wymagał wyjęcia gaśnicy. Taki zawód, co poradzisz.

To nijak nie tłumaczy rozłacznych punktów sekcji krytycznej.

To nijak nie tłumaczy rozłacznych punktów sekcji krytycznej.

Pokaż syntetyczny przykład w którym sekcja krytyczna *musi* być rozwałkowana.

Bzdua. Zaczeło się od tego że Microchip dostarcza rozwiązania z lat 80 dla lemmingów. Pomimo tego że moze dostarczyć darmowe ciastko nie robi tego. A potem już poleciała standardowa dyskusja broniąca "wystarczającego C" jakie już wiele razy widziałem.

Reply to
Sebastian Biały

Pod warunkiem ze nie zapomnisz napisac destruktora. Kod w C bedzie dzialal tak samo dobrze jesli nie zapomnisz wlaczyc przerwan. Ale to troche tak, jakby sie chcialo napisac "Hello, world" i zapomnialo o printf("Hello, world"); - przed tym sie nie zabezpieczysz.

Tlumaczy - warunki sa sprawdzane w zupelnie roznych miejscach. Stworzenie poprawnej logiki do tego wymagalo troche sprytnego myslenia zeby 7 tranzystorow dobrze sterowac, ale bylo warto. Moglbym status trzymac w zmiennej i miec funkcje ktora by sterowala przerwaniami na podstawie tej zmiennej, ale robi to za mnie swiat zewnetrzny procka.

Nawet bym to w C++ se napisal, tylko kto mi da cykle zegarowe procka na cos takiego?

Poza tym to nie jest taka ksiazkowa sekcja krytyczna, to sie dzieje w przerwaniach i ilosc aktualnie nalozonych na siebie przerwan ma pewien wplyw na priorytet (czyli poczatek i koniec takiej 'udawanej' sekcji krytycznej bedzie sie wykonywal z roznymi priorytetami - logika jest dosc zagmatwana). To wszystko narzucone przez hardware jaki musi byc sterowany w czasie rzeczywistym. Sztuczka w tym zeby nie tracic czasu na sprawdzanie tych warunkow bo to wszystko sie wykonuje co 10/20/100/500us (a jest tam troche logiki i dosc duzo DSP).

Wylaczam przerwanie, cos sie robi i chce wlaczyc przerwanie. W zaleznosci co sie stalo w miedzyczasie albo wlaczam albo nie. Z destruktowem musialbym kombinowac i miec jakies parametry mowiace czy destruktor ma przerwanie wlaczyc czy nie.Tak, wiem, da sie to zrobic na rozne sposoby, tylko skad ja kuzwa wezme tyle taktow asemblera na to? Juz pisalem - jedna mikrosekunda jest droga w tej aplikacji, wiec powstala troche niekonwencjonalna logika.

Czyli kompilator C - nazywajmy rzeczy po imieniu.

Czyli kompilator C++. Aha - polemizowalbym z tym 'darmowe'...

Zapominasz o jednym - na ile wycenisz koszt szkolenia typowego inzyniera elektronika zeby umial wykorzystac C++? To sie nie oplaca - chcesz robic sztuke (perfekcyjna i ladna, ale tylko sztuke - bo to nie zmieni sposobu dzialania urzadzenia) dla sztuki, a tu chodzi o zarabianie kasy. Nic dziwnego ze ludzie sie nie zgadzaja.

Czas zaakceptowac? ;-)

Reply to
Jerry1111

Nie widzisz róznicy pomiędzy "zapomniałem raz napisac destruktora" a "zapomniałem napisać pierdyliard miejsc z sei()"? Przeciez oto tu chodzi. Żeby nie zapomnieć, to kompilator ma zajmować się duperelami tego typu.

Dlaczego uważasz że C++ zabiera jakies cykle zegarowe?

OK, w więc na *typowy* problem blokowania przerwań masz *szczególny* przykład gdzie to się nie nada. Jakie to częste w dyskusjach o C++ na uC ...

Typowy pustak argumentowy polega na tym że "muszisz szkolić z C++". Nie musisz. Zaleta C++ jest to że możesz pisać w C i *powoli* uzywać za darmo ficzerów. To mogą byc maultkie piedoły typu destruktory i już podnosisz jakośc kodu za darmo - zarówno jest to łatwiejsze w utrzymaniu jak i też nie generuje jednego bajtu kodu maszynowego a jest pewne.

Bierz BASCOma. Niektórym jednak zależy na tym żeby kod utrzymywac, dodawać ficzery, poprawiać bugi i refaktoryzować. Z pierdyliardem cli() / sei() miałbym, z każdym z tych spory kłopot co przekłada się na tą Twoją ekonomie.

Gdybym postulował przejście na haskela to bym się nie dziwił. Ale ja mówie o darmowym ciastku. Kompilator/składnia identyczna. Większośc kodu przekompiluje się na tyle gładko, że jak nawet lemmingowi podstawić g++ zamiast gcc to nie zauważy. To bezbolesne. Opór ma źródło w psychice a nie merytorycznych argumentach.

Reply to
Sebastian Biały

Dnia 05-05-2012 o 16:18:33 Sebastian Biały snipped-for-privacy@poczta.onet.pl> napisał(a):

Nonsens, i to ciężkiego kalibru. Na początku tej dyskusji pisałem, że w C++ musisz uważać czego nie używać. Weź typowego elektronika, który C używa jak makroasemblera, a w C++ nie pisał i każ mu cokolwiek napisać. Ręczę ci, że efektem będzie przerośnęty kod, korzystający z rzeczy, o których gdzieś na szybko przeczyta i postanowi użyć nie mając pojęcia jakie z tym wiążą się konsekwencje (np. metody wirtualne, wielokrotne dziedziczenie). Większość z tych rzeczy będzie napisana bez sensu: np. cały kod napisany w konstruktorach, nieświadomość jak i kiedy się uruchamiają konstruktory i destruktory, przeciążone operatory, gdy to niczemu nie służy, wyjątki, w dodatku źle użyte, itp. A o cechach C++, które dla ciebie są tak cenne, mogą się nawet nigdy nie dowiedzieć.

Takie narzędzie jak C++ to możesz dać wyłącznie dobrze wyszkolonym programistom. Więcej trzeba zrozumieć i dużo łatwiej coś spieprzyć.

Taaa, darmowym. Trzeba utrzymać grupę programistów, którzy zrobią port i będą o niego dbać. Trzeba wyszkolić CAE/FAE, aby byli w stanie to wspierać. A naprawdę skorzysta z tego (w przypadku małych uC, nie piszę tu o 32-bit!), jak to pisałeś? - "szum statystyczny". A zmiana poziomu sprzedaży będzie poniżej tego szumu.

ae

Reply to
Andrzej Ekiert

Powstawia sei/cli po całym kodzie i będzie narzekać że programowanie to ciężki zawód bo nie da się tego debugować i naczej nie da rady. Wiem, bom widział już kilku miszczuf. Faktem jest że kod pisany przez elektronika zazwyczaj jest gołym asm przerobionym na C ze milionem makr bez grama wiedzy o programowaniu na jakimkolwiek poziomie abstrakcji.

Będa o tym pamiętać. Podobnie jak nie sprawia problemu pamiętanie o tym że nie nalezy uzywać sprintf czy conio na uC. Wiedza jak każda inna. Zawsze ja mogę wrzucić argument że programista po dowolnym kursie C też będzie na uC pisał gigantyczne bzdury. Ten argument ma dwa końce.

Ilu znasz programistów którzy po wpisanu a/2.5 zdziwili się czemu kod zrobil się 10x wiekszy? To ten sam problem.

Dlatego nie twierdze że C++ jest dla każdego. Microchip skreslił na starcie wszystkich ktorzy chciali się rozwinąć. Dlatego unikam jak ognia pomimo kuszącej oferty hardware tych prockow.

Ta grupa programistów, jesli da się im sensowną architekturę, utrzymuje się sama albo z mizernych datków. Widocznie MC zauwazył że odstaje od świata i wsadził MIPSa co rokuje nadzieje że da się na tym coś współczesnego skompilować a grupa pryszczatych nastolatków będzie mu utrzymywała gcc.

Reply to
Sebastian Biały

no pochwal się, Ktoś się zdecydował?

Reply to
identyfikator: 20040501

Ale u mnie co projekt to pisanie _wszystkiego_ od nowa. Wisi mi czy mam debugowac konstruktor, makro czy funkcje.

A bedziesz laskawy spowrotem wstawic caly kontekst?

U mnie typowy. Od 10 lat nie napisalem ani jednego kodu embedded w sposob *typowy* dla wiekszych maszyn. Tego sie nie da oderwac od warstwy sprzetu jesli sie chce zarobic.

Taaa... a kto zaplaci za pierwsze 2 miesiace zonkow podczas takiej transformacji? To ma sens gdzies na uczelni gdzie przy pomocy fajki mozna myslec o roznych rzeczach przez tydzien. W mojej okolicy za dzien myslenia jednego inteligentnego idzie faktura w walucie. Po kilku latach pracownik sie nauczy i co? Odejdzie i bedzie problem - szukaj drugiego takiego...

Nie jest za darmo, jesli wstawi gdzies ciag znakow "virtual" (bo nie wie ze nie wolno) i 3 dni bedzie szukal czemu "Hello world" nie miesci sie do flasha.

Zrozumiales co napisalem? Moze jeszcze masz plugin Matlab->Bascom?

Prosze bardzo - czy ja nie mowie ze nie? Niektorym zalezy na zrobieniu, wsadzeniu do produkcji i braniu sie za inny _produkt_.

Darmowe nie jest. Producent musi wydac kase zeby to zrobic, klient musi wydac kase zeby to dobrze uzywac. IMO return on investment bedzie ujemny. Jest 6e9 ludzi i wychodzi ze jestes jedynym adwokatem. Statystyka mowi mi ze cos nie tak.

O!

Znaczy nie identyczna.

Opor ma zrodlo w koncie bankowym. Inaczej wszyscy by robili jak piszesz, bo by wiecej zarabiali.

Reply to
Jerry1111

Tym fajniej busi być debugować te same błedy za każdym razem.

Nie piszę tu o nietypowości że piszesz na uC. Mowię o tym że piszesz nietypowo jak na uC skoro emulujesz priorytety przerwać na cli/sei porozrzucancyh po kodzie. Na ten (mizerny) przykład u mnie są same przypadki CriticalSection a kod jest RT jak najbardziej. Byc może mamy rózne style pisania kodu. I nie, nie piszę firmware do migania diodą, problemy są realne i raczej żyłują procesor na pełne osiągi.

Jakiej transformacji? ScopedWhatever masz za 30 sekund w kodzie. Już. Działa. 0 zonków.

Pięknie ujmujesz poziom kwalifikacji przeciętnego klepacza firmware :)

Gorzej, jeśli wstawi gdzieś printf to może i 3 flaszy zabraknąć. I co, porzucamy C i piszemy w asm? Fakt, dla wielu żadna różnica.

Ani razu w tej dyskusji nie padło słowo "matlab" o ile dobrze widzę. Więc argumentujesz używając ukrytej wiedzy. To nie fair.

Słusznie. Dzieki takiem podejściu zawsze zaczynasz od int main() { } i odkrywasz kwadratowe koła za każdym razem. Ekonomia, ja rozumiem. Ja tak nie potrafie. Może z tego wynika brak porozumienia.

Oczywiście, jesli nie narobiłeś straszliwej kupy w C to skompiluje się jako C++.

Nie, z dokładnością do kupy w kodzie. Zazwyczaj wychodzi na zdrowie jej poprawienie.

Masz jednokierunkowe podejście do ekonomi. Faktycznie, jesli robisz małe projekty to moje rady nie mają żadnego zastosowania. Jeśli jednak robisz większe to nagle potrzeba refaktoringu, ponownego użycia, abstrakcji staje sie bezpośrednio przekładalna na pieniądze. Zawodowo co prawda mam do czynienia ze znacznie więszymi apliakcjami od strony kodu, ale zasady są podobne - tracisz czas (i pieniądze) używając prymitywnych narzędzi, choć pozornie wydaje się że tworzą produkt szybciej. Bez realiów cięzko dyskutować czy Tobie taki model biznesu pasuje. Jak widze nie. To jednak oznacza coś bardzo niefajnego: nie masz realnego przykładu na którym możesz wykazać mizernośc C++. Bo masz tylko argument ekonomiczny i to popraty raczej mizerną argumentacją. A taki argument jest zawsze subiektywny, więc nie ma sensu ciągnąć dyskusji.

Mi potrzeba abstrakcji, destrutorów, traits wyszła na AVR. Dzieki temu ostatnio firmware (specyficzny, RT) napisałem w 0.5 dnia wykorzystując

90% kodu optymalnie (tzn w C nie dało by się lepiej, musiałbym dlubac w ASM) i 10% dopisując. Mógłbym to samo mieć w C z pomocą kilku pokracznych makr, ale szacuje że bym się nie wydłubał przez tydzień z ifdefów. I szacunek popieram próbą którą zarzuciłem po 3 dniach.

Byc może mi pomaga doświadczenie z duzych systemów, bo zawodowo pisuję w C++ spore rzeczy. Myslę że to zawsze jednak ok poznać inny punkt widzenia, nawet w ostrej dyskusji (którą to raz na jakiś czas próbuje wzniecić). Ktoś mi tu zarzucił mesjanizm, może i racja.

Reply to
Sebastian Biały

Przeciez napisalem ze _wszystko_ jest pisane od nowa. Zaakceptuj to jako fakt, a nie oceniaj. Publiczna grupa nie jest miejscem na wyjasnianie dlaczego tak sie dzieje.

Jak najbardziej. Zastosowanie tez nietypowe, ale oszczedza $4.50

Zagwarantujesz? Znaczy przyjmiesz fakture (i ja zaplacisz) za jeden dzien pracy jesli pracownik, ktory dobrze zna C, przyszedl do naszej firmy tydzien temu i _nie_wiem_ jakie ma pojecie o C++, jesli on straci dzien bo mu to nie zadziala w 30 sekund? Ja byl bym ostrozny ze stwierdzeniem typu '30 sekund i nie bedzie problemu'. W 30 sekund nawet tego nie skompilujesz, nie mowiac juz o znalezieniu odpowiednich plikow zrodlowych.

Pieknie? A moze realnie?

Rozmawiamy o kims kto zna C, niekoniecznie C++. To Ty twierdzisz ze nie bedzie problemu przy przesiadce...

O Bascomie tez nie fair - niepotrzebnie go ekshumowales.

Jesli za kazdym razem kod idzie do innego klienta, to troche nielegalnie byloby uzyc stary kod od innego klienta - nie mam kasy na wloczenie sie po sadach. Jest udokumentowane ze calosc powstaje od nowa i nie ma problemu. I prosze nie odpowiedz ze to znowu jest ukryta wiedza - po prostu (tak jak i z Matlabem) _zalozyles_ sobie cos, co sie nie sprawdzilo.

Ano moze.

Miala byc identyczna. Bezwarunkowo.

j.w., mialo byc bezwarunkowo.

Wyciagasz dosc duzo wnioskow bez posiadania wystarczajacej ilosci danych

- to jest odwazne.

Alez ja wcale nie mam zamiaru tego zrobic. C++ lubie i uzywam. Po prostu Ty chcesz przekonac p.m.e. ze C jest be, a C++ jest cacy. A to co ja mowie to jest to, ze narzedzie dobiera sie w zaleznosci od problemu ktory trzeba rozwiazac. Jesli chodzi o poprzednie watki dotyczace Ady: odpowiedz na pytanie, czy dla dobrego programisty ma znaczenie w jakim jezyku cos napisze?

Argument ekonomiczny jest podstawowy: ksztaltuje rzeczywistosc.

No i dla mnie taki kod o kant pupy rozbic. Ani test harness nie ma, ani kodu legalnie nie uzyje. Jest szybciej, zgoda, ale jest tez (dla mnie) bezuzytecznie.

Poza tym jesli chodzi o 'optymalnie' to bym uwazal: u nas w firmie jest wiedza jak ukladac pojedyncze instrukcje w C zeby uzyskac pozadany efekt od optymalizatora. Kod w C sie wykona tak samo, tylko w innym czasie. Jest to tez powod dlaczego uzywamy 2.5 letniej wersji kompilatora a nie najnowszej - bo optimizer znamy juz na wylot z wszystkimi jego fanaberiami.

To jeszcze jezyki non-managed sa na PCta uzywane? (tak wiem, pewnie 'duzy system' to cos wieksze od PCta ;-) ) Pytam serio, bo juz jakis czas nie widzialem wiekszej _nowej_ aplikacji nie napisanej w czyms managed.

Musisz zaakceptowac ze rzeczywistosc nie jest idealna. Zycie stanie sie latwiejsze ;-)

Reply to
Jerry1111

Dnia 05-05-2012 o 21:39:38 Jerry1111 <jerry1111_usun snipped-for-privacy@wp.pl.pl.wp> napisał(a):

Naprawdę masz taki problem? Ja zawsze w umowie zaznaczam, że część kodu będzie pochodzić z naszych bibliotek, na które udzielamy niewyłącznej bezterminowej licencji. Jak dotychczas zawsze było to akceptowane, czasem po krótkich negocjacjach.

ae

Reply to
Andrzej Ekiert

Zalezy jaki klient. Sa i tacy co chca zeby _calosc_ informacji zostala kompletnie usunieta po zakonczeniu roboty (z reguly zaczyna sie dyskusja jak sie tego pozbyc z backupow serwerow). Klient nasz Pan.

Sa tez klienci gdzie rzeczy standardowe uzywamy swoje bez problemu, no bo ile mozna pisac roznych driverow do UART na jeden procek? ;-)

Reply to
Jerry1111

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.