Kui see on Sinu esimene külastus, siis tutvu
palun korduma kippuvate küsimustega klikates selleks ülal asetseval lingil. Enne uue postituse lisamist pead Sa registreeruma.
Postituste lugemiseks vali meelepärane foorum allpool olevast nimekirjast.
Teade
Collapse
Foorumi reeglid.
Foorumi reeglistik on uuendatud. Palume tutvuda ja arvesse võtta.
Modelleerimises ja tootmises kehtivad:
1. Avariikindel vooluring lühistab kõik teised.
2. Transistor, millel on kiiresti toimiv kaitse, säästab kaitset, sulades kõigepealt ise.
C++ on edasiarendus C-st, mis peegeldub ka käsiraamatu mahu 10-kordses suurenemises.
Küsimus oli ajendatud järgmistest tähelepanekutest:
1. Mikrokontrollerite programmeerijad kasutavad valdavalt C-d.
2. Olen kirjutanud C++'i tülgastumiseni ja suudan selles teha töökindlaid programme mõistliku ajaga. Prooviks lahendades täpselt samu asju C-s läks 2x rohkem aega ja programmid olid 2x bugisemad. (ei maksa sellest järeldada, et C++ on võluvahend -- vahe tuleb sisse alates mittetriviaalsetest programmidest).
3. Suures osas tänu GNU CC-le on enam-vähem mõistlik C++ kompilaator saadaval ka enamusele mikrokontrolleritest.
If you think education is expensive, try ignorance.
_Tehniliselt_ on C++ ja C vahe väike. Piltlikult saad sa struct-i sisse toppida pointerid funktsioonidele ja ongi kõik. Noh, natuke kellasid vilesid ka. Ka C keeles saab C++ kirjutada, kui tahtmist on. Mikrokontrolleri probla on pigem selles, et kood asub teises aadressiruumis (klassikalisel mikrokontral) ja seetõttu on unifitseerimine kergelt kunstlik ja kindlasti on C++ kompilaator kergelt nuditum kui PC peal.
Põhimõtteliselt - ei näe probleemi, eriti kui jutt ARM platvormist. Ja teisest küljest - kui oled harjunud C++ tegema ja ohvriks on ainult C kompilaatoriga kontra - siis saab veidi mitte-ordotoksete meetodidega ka C - s objektorienteeritud koodi teha.
Mina olen mikrokontrollereid programmeerinud AINULT C++-is! Lugu nimelt selline, et kui hakkasin mikrokontroleritega tegelema, siis tutvustati mulle http://sourceforge.net/projects/avr-cpp-lib/ aadressil asuvat Atmeli 8-bitiste AVR mikrokontrollerite programmeerimiseks mõeldud C++ teeki.
Teisi mikrokontrollereid pole ma jõudnud veel programmeerida, aga olen näinud, et nii mõnelgi mikrokontrolleril on see võimalus olemas.
C++'i kirjutamisega keeles C on aga lugu järgmine: Esimeste C++ kompilaatorite, AT&T-s kirjutatute, väljundiks oligi C kood (Cfront). Arendamine lõpetati 1990-te alguses, kuna erindid osutusid üle jõu käivaks pähkliks.
Teemasse tagasi, endiselt tahan näha ülestõstetud käsi Lihtsalt on huvi ja ei midagi muud.
If you think education is expensive, try ignorance.
Njh see on sama mis assembler ja LabView. Esimesega kirjutatud kood on sigakiire ja võtab vähe reusrssi aga kirjutamine võtab palju aega. Viimasega kirjutatud kood muneb nii et vähe pole ja resurssi sööb ka looma moodi plussiks aga võimalus kood valmis teha kiirelt. See on kasutaja ülesanne leida balans raua hinna ja töö hulga vahel.
Libraryd kirjutan ise kui sisse ehitatud asjad ei tööta. Viimane katse kasutada gcc studio.c faili lõppes prose kylmamisega. Üldiselt tekkis mõte et võiks siia foormuisse teha koha kuhu saaks riputada erinevaid C librareid, kuna C on portable siis pole prose oluline. Ainuke et iga kasutaja peab vastavalt oma prosele defined ringi kirjutama(kui on rauaga suhtlev asi). Listiks siia vähe libe mida endal pakkuda.
Conv_Lib.c:
char *WordToStr (unsigned short int number); Teeb 16 bitti sõna ascii stringiks dec väärtusena
char *LongToStr (unsigned long number); Teeb 32 bitti sõna ascii stringiks dec väärtusena
char *ByteToHStr (unsigned char number); Teeb 8 bitti sõna ascii stringiks hex väärtusena
char *WordToHStr (unsigned short int number);Teeb 16 bitti sõna ascii stringiks hex väärtusena
char *LongToHStr (unsigned long number);Teeb 32 bitti sõna ascii stringiks hex väärtusena
unsigned char HStringToByte (unsigned char mark); Teeb hex stringi 8 bitti väärtuseks
unsigned long StringToByte (char *data); teeb dec stringi 32 bitti väärtuseks
Texst_Lib.c
unsigned char *Extract_Data_From_String(unsigned char *Inpu, unsigned char String_Nr,unsigned char Separator); Eraldab yhe jupi stringist, separaator on eraldaja selles, sring nr ytleb mitmes string separaatoriga eraldades. Kasutusel kettalt conf failide lugemisel.
void Remove_Spaces(unsigned char *strin); Eemaldab stringist kõik tühkiud.
unsigned char Mach_String(unsigned char *string1, unsigned char *string2); võrdelb 2 stringi kui võrdne tagastab 255 kui ei ole siis 0. Vajalik sest teatavasti niisama võrreldes võrreldakse ainult pointereid.
Need siis portable asjad, veel terve posu asju mida tuleks natuke muuta.
Kes mingi asja kohta kogu koodi tahab siis PS ja meil, saadan. Siia panna oleks liiga suur.
Modelleerimises ja tootmises kehtivad:
1. Avariikindel vooluring lühistab kõik teised.
2. Transistor, millel on kiiresti toimiv kaitse, säästab kaitset, sulades kõigepealt ise.
Peaks lisama, et C ja C++ vastandamine kiiruse põhjal ei ole alati õige. Kuna GCC keskendub AVR-i puhul (nagu ka paljudel muudel juhtudel) peamiselt -O2-le, siis oleme ka meie teinud nii, et suurem jagu koodi lihtsustuks -O2 või Os parameetriga märgatavalt. Näiteks võib C++ objekt, kus on sees tsükkel, lihtsustuda ÜHEKS assembleri käsuks, kui tema sisu on ainult ühe käsu täitmine. C++ teeki kirjutades vaatame alati koodi suurust. STL-i sarnased mugandused ei tule mikrokontrolleri jaoks progedes arvesse, seega oleme teinud nii, et mida rohkem c++ koodi sa kirjtad, seda rohkem koodi välja optimeeritakse. Seega lõppkokkuvõttes ei saa kirjutada, et C++ on C-ga võrreldes sigaaeglane, sest ka C++ on võimalik kirjutada nii, et see taandub tavajuhtudel C lihtsusele.
Meie põhieesmärk AVR Lib C++ kirjutamisel ongi, et selle abil saaks kirjutada VÄHEMALT sama efektiivset koodi kui puhtas C-s, kusjuures GCC teeb väga suuri optimiseerimisi. Me üritame teha teeki, mis oleks kasutatav kõigi Atmeli 8-bitiste AVR mikrokontrollerite programmeerimisel. Selle abil näiteks ise suutsin atmega128 pealt atmega8 peale portida koodi vähem kui tunniga.
Nüüd oleksingi väga huvitatud projektidest teiste mikrokontrollerite jaoks. Konkreetselt selles teemas kaasa rääkimiseks tegin ka kasutajakonto, seega rääkige ausalt, kes on kus C++ progenud.
kiiruse ja mälu probleeme ei teki kuni püsitakse POD ( sisuliselt C kompatiibluse) raames. kui läheb konstruktori/destruktori väljakutsumiseks ja VMT loomiseks, siis mikrokontroller jääb kiiresti kitsaks , sest VMT istub RAMis ja aeglaseks. välise SDRAMiga protsessori puhul pole ehk eriti vahet.
see et kasutan struct'e ja array'd ei tee must C++ progejat.
Kas tohin märkida, et ei pea VMT-d kasutama, peale päritavuse (mida reaalses elus on vaja märksa vähem, kui õpiku vastava peatüki mahu järgi aimata võib) on veel hulka võimalusi, millele C-s analoog puudub.
If you think education is expensive, try ignorance.
Comment