Hallöle !
Ich spiele mit dem Gedanken in die AVR Entwicklung einzusteigen und habe
mich gerade mal ein wenig schlau gemacht.
Was mir allerdings nicht so ganz klar wird:
Muss ich mir zwingend Assembler beibringen?
C wird ja öfters nebenbei erwähnt. Wie weit komme ich denn mit reinen
C/++ Kentnissen?
Wäre zwar nicht schlimm wenn ich mich mit Assembler auseinander setzen
muss, aber es ist immer gut zu wissen wenn man weiß, was auf einen
zukommt. Zumal Assembler ja nicht gerade "mal eben" gelernt ist.
Gruß,
Tim
Tim schrieb:
> C wird ja öfters nebenbei erwähnt. Wie weit komme ich denn mit reinen> C/++ Kentnissen?
(fast) genauso weit wie mit asm. Nur bei sehr zeitkritischen Sachen
sollte man imo auf asm zurückgreifen...
Hi
>Ich spiele mit dem Gedanken in die AVR Entwicklung einzusteigen..
du willst also AVR's entwickeln...., hm, soweit ich da weiß, brauch's
weder C noch Assembler.
Ok, Spaß beiseite. Wenn du C- Kenntnisse hast, ist doch eigentlich die
Basis gegeben, es sei denn, du hast noch nicht programmiert, bzw. keine
Programme geschrieben. Es ist nicht wichtig, ob man eine Sprache gelernt
hat sondern weiß, wie man ein Programm erstellt. Das Analysieren der
Aufgabe und in kleine Routinen packen, das ist wichtig und ist in C wie
auch in anderen Sprachen die Basis für ein Programm. Da ein AVR oder
besser gesagt ein µC nunmal spezielle Aufgaben bekommen soll, ist es
wichtig, zu wissen, wo nehm ich Assembler und wo komme ich mit
Hochsprachen besser zurecht. Sind mathematische Funktionen erforderlich,
denke ich, ist man mit Bascom oder C besser dran. Baut man
Hardware-Steuerungen mit viel Bitlogig ist meines Erachtens Assembler
der richtige Weg. Manchmal ist aber auch ein Gemisch von Assembler und
Hochsprache erforderlich, um zum Ziel zu kommen. Wenn man nun gehört
hat, Assembler sei schwer, der kann sich getrost darauf verlassen, das
jede Sprache ihre Hürden hat und Assembler in manchen Bereichen
wesentlich einfacher ist, als man glaubt.
Gruß oldmax
Danke für die Antworten.
Hätte nicht gedacht dass C doch so nützlich sein kann dabei. Ja ich habe
schon C Programme geschrieben und mir gestern mal asm angeschaut. Asm
scheint aber mehr SPS Programmierung zu ähneln (nein nicht die modernen,
die C können). Jedenfalls war ich da nicht sonderlich gut :D
Aber wenn man das in der Freizeit als Hobby macht ist das ja immer was
anderes als wenn man gezwungen wird es zu lernen.
Ich werde mich dann melden wenn ich Probleme hab ;)
Bis dann
Hi
ASM ist ähnlich einer SPS - Programmierung, zumindest was AWL betrifft.
Ist ja auch klar, AWL ist von Assembler abgeleitet und macht es möglich,
(oder besser gesagt, machte es möglich) komlizierte Programmierung
umzusetzen. (indirekte Adressierung, mathematische Funktionen etc.) Heut
sind wir da schon wesentlich weiter und es gibt fertige Bibliotheken, so
das FUP in der Regel schon alles abdeckt. Für ein ASM -Programm sollte
man wissen, es gibt bei weitem nicht so viele Funktionen wie in den
Hochsprachen. Klar, wenn man sich die Assemblerbefehle ansieht,
erscheint es sehr umfangreich. Allerdings gibt's wenige Gruppen. Lade-
und Speicherbefehle, Sprünge und Unterprogrammaufrufe, Binäre
Operationen sowie ein paar mathematische Funktionen. Dazu ein paar
Controllerabhängige Befehle. Alles ist in der Hilfe für die µC's im AVR
Studio erklärt. Und nun viel Spaß.
Gruß oldmax
>Muss ich mir zwingend Assembler beibringen?
Das ist genauso wie auf dem PC. Wie zwingend braucht man Assembler, um
PC-Programme schreiben zu können?
>C wird ja öfters nebenbei erwähnt. Wie weit komme ich denn mit reinen>C/++ Kentnissen?
Mit C kannst du auf dem AVR alles machen. Und "alles" meint wirklich
alles. Die einzige Ecke, in der Assembler seinen Verwendungszweck hat,
sind zum einen superwinzige Tinys (die man ja nicht benutzen muß, wenn
man nicht muß), sowie hochgradig schnelle und zeitkritische
IO-Anwendungen, bei denen es wirklich auf jeden einzelnen eingesparten
Takt beim Timing ankommt.
Mit reinen C++-Kenntnissen ist der "downgrade" auf C an einigen Stellen
schmerzhaft, aber ertragbar. avr-g++ ist zwar existent und funktioniert,
es fehlt aber die essentiellen libs, und alles, was mit dynamischer
Speicherallokierung zu tun hat, ist per se auf einem Mikrocontroller der
AVR-Klasse nur mit äußerster Vorsicht einzusetzen.
Fazit:
Fang einfach mit C an.
Oliver
Oliver schrieb:
> Die einzige Ecke, in der Assembler seinen Verwendungszweck hat,> sind zum einen superwinzige Tinys
Das ist aber schon sehr sehr lange her.
Die aktuellen ATtiny haben alle SRAM und sind damit in C programmierbar.
Und ab 2kB kannst Du sogar float Variablen verwenden.
Allgemein sollte man bei MCs nicht unnütz mit Variablen umsich schmeißen
und immer den kleinstmöglichen Typ verwenden. Dann klappt das auch.
Windows-Programmierer sind es ja gewohnt, sämtliche Variablen als double
zu deklarieren und Arrays immer mindestens 1kB groß. Solche
Verschwendung geht auf nem MC nicht.
Peter
Ich finde man sollte auf einem µC immer mit den ASM Grundlagen anfangen.
Nur so lernt man kennen was der µC wirklich kann und welche sachen z.b.
in C zu vermeiden sind weil es ebend keine einfache möglichkeit für den
Compiler gibt es umzusetzen.
Beispiel:
uint_8 b = (irgendetwas)
for( uint_8 i = 0; i < 8; ++i ) {
bit[i] = (b >> i) & 1;
}
Hi
Mal wieder ein paar Glaubensbekenntnisse... C contra ASM
Leute, es verschmäht niemand C, also zerredet nicht die
Daseinsberechtigung von ASM. Wichtig ist doch nur, der TE entschließt
sich, mit irgendwas anzufamgen. Wenn er später feststellt, das er mit
Suaheli weiterkommt, wird er vermutlich sich hinsetzen und Suaheli
lernen....
Gruß oldmax
Es schadet nicht, wenn man Assembler versteht. Es kann sogar recht
nützlich sein.
Wenn Du C++ kannst, ist der Sprung zu C nicht so weit, wie zu Assembler.
Wenn Du erst anfängst, wirst Du auch keine zeitkritischen Anwendungen
schreiben (und auch dann kann man gemischt programmieren). Also kein
Problem, bei C zu bleiben.
Ich verwende beides. Der größte Teil wird aber in C geschrieben.
Zur Glaubensfrage wird es bei mir nur, wenn es um Basic, Fortran, oder
ähnliches (auch Klickiklicki-Buntibuni gehört dazu, obwohl auch das
seine Daseinsberechtigung hat) geht.