C i mikroprocesory

May 14, 2004 60 Replies

W jaki sposób (tzn. z jakich ¼róde³) mogê siê w rozs±dnym czasie nauczyæ programowania w C? Programowaæ w C to wogóle nie umiem, kiedy¶ trochê programowa³em w Pascalu, a obecnie nieco w Bascomie, czy te umiejêtno¶ci pomog± mi opanowaæ C? Czy sk³adnia jest podobna?



trochê

umiejêtno¶ci

C nie polecam, mia³em z nim straszne przygody, ale jak musisz to zajrzyj tu:

formatting link
Pozdrawiam

Krzysiek

Użytkownik ogi napisał:

Lepiej zainteresuj sie asemblerem, pod mikrokontrolery "prawdziwych" programów nie pisze sie w językach wysokiego poziomu (szybkość,stabilność,wielkość). Język C ma jedynie sens w "układach" opartych na systemie operacyjnym. Pozatym według mnie lepiej się uczyć C jak sie zna asembler. C jest "dziwnym" ale i najlepszym jezykiem programowania wysokiego poziomu. Dziwnym, chodź to może złe określenie ponieważ pozwala programiście prawie na wszystko (co ma pewne plusy jeżeli się wie co robi) przez co powstają czesto bardzo trudno wykrywalne błedy, w przeciwieństwie do pascla itp.

Pozdrawiam Maksymilian Dutka #GG: 1493163

No przede wszystkim zalatw sobie jakis kompilator C. Dla poczatkujacego najlepszy IMHO jest i pozostanie (mimo swych ograniczen) dosowy kompilator Borland C++ 3.1

B.

To stwierdzenie ma sens tylko dla bardzo malych mikrokontrolerow gdzie ograniczone zasoby nie pozwalaja na wygodne zaimplementowanie C. Duzych mikrokontrolerow nie programuje sie w assemblerze z zalozenia. Assembler ma tylko role pomocnicza.

Co ty nie powiesz. Przy programowaniu sprzetu jezyk C zawsze ma sens (choc istnieja nieliczne wyjatki).

Mow co chcesz, ale najwazniejszy k..., jest debugger.

B.

Wysyłając taki oto zestaw znaków dnia 2004-05-14 23:25 B nakarmił(a) stado głodnych newsserwerów:

Hmm... Pisać w Borlandzie C++ na mikrokontrolery??? To jak strzelać z armaty do muchy ;-)

On Fri, 14 May 2004 22:49:45 +0200, Max snipped-for-privacy@dioda.sytes.net> wrote: [.....]

Może lepiej nie pisz takich rzeczy bo ktoś przez przypadek weźmie to na poważnie.

BTW. Ja tam słyszałem że "prawdziwe" programy (lotnictwo, wojsko) pisze się w ADA. To taki język wysokiego poziomu troszeczkę podobny do Pascala.

Regards, /J.D.

Nazywanie C jezykiem wysokiego poziomu jest kontrowersyjne - jest to raczej taki 'przenosny assembler' - wiekszosc konstrukcji C jest tlumaczona na pojedyncze lub kilka instrukcji assemblera.

Niedawno byl watek o niezgodnosci jezyka C z architektura niektorych prockow, tych z rozdzielona przestrzenia danych i programu. No i musi byc dostepny sensownej wielkosci stos. Ale i tak zwykle jakies wstawki a assemblerze sa niezbedne - inaczej nie da sie skonfigurowac procka (przerwania, jakies tryby, flagi w CPU itp).

Krzysiek Rudnik

umiejêtno¶ci

A ponadto ksi±¿kê - w tym przypadku najlepiej omawiaj±c± standard ANSI C. Wszystkie nowe skupiaj± siê g³ównie na programowaniu obiektowym, wiêc sa mniej pomocne. A najlepiej opanowaæ najpierw asembler, ¿eby przechodziæ z programowania z asemblera na C (a nie odwrotnie).

Marek

Dawno dawno temu Pentagon powiedzial ze nie kupi innego programu niz w Adzie. Od tego czasu minelo juz sporo lat .. i wykladowcy emigrujacy do ameryki narzekaja ze jak usiluja wprowadzic Ade jako jezyk cwiczeniowy, to studenci przynosza gazete i prosza o wskazanie jednego ogloszenia o prace "znajomosc Ady pozadana".

I w sumie niewiele rozny od C, PL/1, Fortranu czy innych. Mial dwie zalety:

- programista specyfikuje zmienne dokladnie - podajac zakres i dokladnosc, wiec nie ma problemu przy przenoszeniu "a na nowej maszynce int nie ma 32 bity, program mi nie dziala, buuu",

- mial oficjalnie wbudowane mechanizmy mielozadaniowosci, choc mowiac szczerze takie sobie..

J.

analizuj proste programiki dostarczone z dolaczonymi bibliotekami. Ja nauczylem sie tylko i wylacznie na przykladach i jakims malym leksykonie z ksiegarni. Moze nie opanowalem wszystkiego, ale cos tam potrafie

Ja przesiadlem sie a Bascoma i jestem b. zadowolony. Moze i C jest trudniejszy, ale duzo wygodniejszy jak juz sie pojmie conieco. Bascom ma duzo bledow i niedociagniec (AVRGCC takze!). Jednak jak nie zamierzasz pisac powaznych programow to pozostan przy Bascomie !!

Użytkownik B napisał:

Zgadzam się z tym ze w C jest wygodniej ale znacznie sie traci na szybkości programu. Po co pisać coś w C i kupować droższy mikrokontroler jak można napisać to samo w asm i zaoszczędzić pieniędzy.

To dlaczego Microsoft swoje sterowniki robi w asm. ? (zobacz sobie do DDK dla win98, dla win2000 juz są w C :( ), jądro linux-a też jest częściowo w asm. Dlatego pisze że podsystem operacyjny jest lepiej w C gdyż jest wtedy większa przenośność kodu (na inne systemy), poza tym jeżeli się zmienia system operacyjny (typ sprzętu) to nie trzeba się bawić w naukę odwołań do systemu/sprzętu. Jeżeli się pisze w C pod mikro. to i tak trzeba wiedzieć wszystko o sprzęcie, bo nie ma niczego (systemu operacyjnego) co by "oddaliło" programistę od sprzętu (no może gdyby był jakiś dobry kompilator C na mikro. to zapewniał by cos takiego w jakimś tam stopniu).

Tu się kłania znajomość asemblera, zapewne powiesz że przecież debugowanie odbywa sie w C, ale niestety to nie zawsze wystarcza czasem trzeba "dłubać" w asm.

Pozdrowienia Maksymilian Dutka

To z wieksza szybkoscia asma to zaszlosci - kiedys uruchamiajac program startowy na MCF5407, zeby sprawdzic czy program dochodzi do danego miejsca wstawilem tam prosciutka petle wysylajaca sygnal prostokatny na jedno wyjscie. Jak robilem to czesci, napisanej w asmie, petelka byla w asmie, jak juz ta czesc uruchomilem, pisalem w C. Troche mnie zaskoczylo, ze w tym drugim wypadku na oscyloskopie dostalem wieksza czestotliwosc. Zeby w asmie napisac tak efektywny kod jak daje dobry kompilator trzeba sie niezle naglowkowac. Nie ma to sensu, jesli tego asma jest wiecej niz kilkadziesiat linii.

Bo tam trzeba uzyc pewnych elementow, ktorych nie ma w C - przerwania, IO, zarzadzanie cache'em, i inne specyficzne dla procesorow instrukcje.

Krzysiek Rudnik

On Sat, 15 May 2004 12:21:44 +0200, Max snipped-for-privacy@dioda.sytes.net> wrote: [.....]

To nie jest zawsze prawdą. W szczególności w przypadku bardziej zaawansowanych procesorów/kontrolerów. Np. takich wyposażonych w cache.

Dłuższy czas poświęcony na rzeźbienie w assemblerze też kosztuje. Późniejsze utrzymanie oprogramowania również. A i końcowy efekt niekoniecznie musi być lepszy.

Jak sam zauważyłeś już nie pisze. Win98? To ktoś jeszcze tego używa? :-)

Formalnie masz rację, ale ta część napisana w assemblerze to jest dla i386 jakieś 0.5% (około 25 plików .S na 5000 plików .c). No bo przecież w każdym systemie operacyjnym jest jakaś część zależna od sprzętu.

Jak to nie ma jak jest. Przecież są do kupienia/ściągnięcia komercyjne/darmowe OS-y na różne uC. Chyba tylko na PIC12 i jakieś czerobitowce nic nie ma. :-)

Regards, /J.D.

On Sat, 15 May 2004 15:36:45 +0200, Krzysztof Rudnik snipped-for-privacy@kki.net.pl> wrote: [.....]

Ja kiedyś z nudów napisałem (a w zasadzie przetłumaczyłem z C na assemblera) naiwną implementację RC4 taka jak np. ta: ftp://ftp.funet.fi/pub/crypt/cryptography/symmetric/rc4/rc4.c Okazało się że mój kod w asm na PIII chodzi prawie 8 razy wolniej niż w/w kod w C skompilowany gcc -O3. Już nawet nie porównywałem tego z dobrą implementacją RC4 w C, np. taką jak w OpenSSL. :-)

Regards, /J.D.

Ale wygląda na to że nadal aktywnie używa się Ady.

Czy masz może na myśli A.L.? :-)

Może powinni zacząć poszukiwania od listy firm które używają Ady, np. takiej:

formatting link
:-)

Regards, /J.D.

Przy P3 to zaczyna byc mozliwe - fachowcy wiedza jak kompilowac zeby wykorzystac optymalnie te wszystkie cache, kolejki, przeploty itp. A przecietny programista nie wie.

Ale .. 8 razy ? Musiales cos sp* zdrowo ..

A to jest calkiem osobna sprawa, bo pewnie calkiem inny program ..

J.

Szybkosc i wielkosc latwiej w asemblerze poskromic, to fakt, ale stabilnosc?! :-)))

A coz to za przedziwne uklady? :-)

ROTFL^2! :-)

Pozdrawiam Piotr Wyderski

E tam, to zlozona sprawa, ale zazwyczaj traci sie max.

30% w porownaniu z kodem asemblerowym _bardzo dobrego_ programisty. _Przecietny_ programista nie ma szans wygrac z dobrym optymalizatorem zaszytym w kompilatorze, szczegolnie na procesorach potokowych.

Po co tracic znacznie wiecej czasu na pisanie w asemblerze i praktycznie zrezygnowac z czytelnosci kodu i mozliwosci jego rozbudowy, skoro wystraczy kupic drozszy kontroler i zaoszczedzic sobie nerwow? Najlepszy jest zloty srodek: C z wstawkami aseblerowymi. Spora przenosnosc i czytelnosc oraz tam, gdzie potrzeba -- maksymalna wydajnosc.

Jak to robi, skoro nie robi?!

No wlasnie, a Win98 to taki zabawkowy system, do tego stary...

Poza czescia rozruchowa wszystko jest w C z wstawkami...

Pozdrawiam Piotr Wyderski

To prawda, naprawde zdrowo. Kiedys napisalem prosty, nieoptymalizujacy kompilator wlasnego jezyka programowania

-- produkowal kod srednio 3 razy wolniejszy niz najlepszy dostepny wowczas kompilator optymalizujacy. Skoro wiec ktos piszac _w asemblerze_ stworzyl kod 2,5 raza wolniejszy niz robi moj kompilator, to, hehe, pogratulowac... ;-)))

Pozdrawiam Piotr Wyderski

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required