Salut zusammen hat jemand von euch c-Befehle für msp430F149, oder Buch, Links u.ä
Hallo, bevor diese Frage entgültig beantwortet werden kann, ist es erst einmal wichtig zu erfahren, mit welchen C-Compiler gearbeitet wird. Im allgemeinen gilt die C-Syntax nach ANSI C/C++. Ein sehr gutes Script findet man hierzu unter www.netzmafia.de . MC spezifische Befehle, die auf der Ebene der Register ihre Anwendung finden werden in den Beispielen unter www.ti.com -> MSP430 -> example erläutert. Bis dann Jens www.SynaSys.de
Ok, ein konkreteres Beispiel: Ich benützte einen MSP430F5529 und CCS. Gibt es für diesen uC wirklich keine eigene Befehlstabelle? Suche schon eine Weile, auch in der Hilfe des CCS und finde nicht wonach ich suche. Wäre wirklich über Hilfe dankbar! Ein schönes Wochenende!
Was für spezielle Befehle suchst du denn? C ist C - jeder Controller hat natürlich seine eigenen spezifischen "Befehle" in Form von #defines in seiner Header-Datei, sie du ja sowieso einbindest. Und diese Befehle decken sich mit den "Registern", wie sie im Datenblatt/Manual beschrieben werden. z.B. UCB0TXBUF = byte_xyz
Ist denn die Anzahl der Befehle in C für jeden uC gleich? Ich dachte es gäbe von uC zu uC Begrenzungen. Habe nach keinem speziellem Befehl gesucht. Bin es nur vom 8051er her gewohnt mit einer Befehlstabelle - bisher Assembler - zu arbeiten. Uff, vielen vielen Dank auf jeden Fall schon mal für Deine schnelle Antwort!
B. S. schrieb: > Ist denn die Anzahl der Befehle in C für jeden uC gleich? > Ich dachte es gäbe von uC zu uC Begrenzungen. D.h. ich verstehe Deine Antwort so, daß es für uC-C keine Begrenzungen sondern nur Erweiterungen gibt, richtig? Und wenn ich die Register direkt benütze, brauche ich nur ANSI-C und keine Extrabefehle, richtig? Hab gelesen, daß man mit dem CCS C und Assembler mischen kann. Kann man das für mich gewohnte Register-Direkt-Ansprechen schon als solches verstehen? Wie reagieren andere Programmierer auf das direkte Registeransprechen. Ist es beliebt oder eher unbeliebt?
B. S. schrieb: > Habe nach keinem speziellem Befehl gesucht. Bin es nur vom 8051er her > gewohnt mit einer Befehlstabelle - bisher Assembler - zu arbeiten. Dann hast Du den 8051 aber nicht in C programmiert. "C-Befehle" statt 8051-Assembler sehen etwa so aus:
1 | ADD + |
2 | SUBB - |
3 | MUL * |
4 | DIV / |
5 | ANL & |
6 | ORL | |
7 | XRL ^ |
8 | CALL x x(); |
9 | DJNZ i do{ .. }while( --i ); |
10 | CJNE if( x == y ){ ... } |
11 | usw. |
Peter
Peter Dannegger schrieb: > Dann hast Du den 8051 aber nicht in C programmiert. Stimmt. C kann ich nur lesen, weil ich C++ auf einem PC gelernt habe. Das uC-spezifische am C ist für mich neu.
B. S. schrieb: > Wie reagieren andere Programmierer auf das direkte Registeransprechen. > Ist es beliebt oder eher unbeliebt? Für den erfahrenen Programmierer ist das ein absolutes No-Go! Die Register gehören dem Compiler, da pfuscht man nicht rein, sonst gibts Ärger. Du legst nur Variablen an und gut is. Soweit er kann, legt der Compiler lokale Variablen in Registern ab, aber das hat Dich nicht zu interessieren. Peter
Peter Dannegger schrieb: > Die Register gehören dem Compiler, da pfuscht man nicht rein, sonst > gibts Ärger. Vielleicht verstehst Du mich ja falsch. Wenn ich während der Laufzeit Zustände am uC beeinflussen möchte, z.B. ADC starten oder Flags lesen, dann muß ich doch letztlich auf Register zurückgreifen.
B. S. schrieb: > Wenn ich während der Laufzeit Zustände am uC beeinflussen möchte, z.B. > ADC starten oder Flags lesen, dann muß ich doch letztlich auf Register > zurückgreifen. Klar, indem du Variablen veränderst, änderst du ja auch Registerinhalte. Nur die Frage nach den speziellen Befehlen ist etwas unglücklich... Mit den #defines der Header-Datei kannst du das halt bequem über die "verständliche Sprache" machen. Bezogen aufs Beispiel oben machst du mit dem Befehl UCB0TXBUF = byte_xyz nichts anderes, als in das Register, welches sich per #define hinter UCBOTXBUF befindet, den Inhalt von byte_xyz reinzukopieren und eine Übertragung zu starten (also die State-Machine des Kommunikationsmoduls)
CPU-Register und Flags sind tabu. IO-Register (SFRs) und deren Bits werden über die Namen im Include angesprochen. Die Namen entsprechen in der Regel den Namen im Datenblatt des jeweiligen MCs. Für Dich sind es quasi vordefinierte Variablen. Peter
Dennis schrieb: > Bezogen aufs Beispiel oben machst du mit dem Befehl UCB0TXBUF = byte_xyz > nichts anderes, als in das Register, welches sich per #define hinter > UCBOTXBUF befindet, den Inhalt von byte_xyz reinzukopieren und eine > Übertragung zu starten (also die State-Machine des Kommunikationsmoduls) Gut, dann bin ich ja erleichtert. D.h. das im Grunde die Zugriffe beim Alten bleiben, nur Befehlsnamen, Syntax und die Struktur des Textes insgesamt ändern sich.
D.h. dann wohl dass für mich nur ANSI-C geben wird und "vordefinierte Variablen", richtig?
Du solltest dir eventuell einfach mal das AVR-GCC Tutorial anschauen, ich denke dann wird dir schon einiges klar von dem was du suchst. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Gruß
Bitte erlaube mir ein paar Worte: 1. Es gibt hier anscheinend ein wenig Konfusion über den Begriff Register. Es gibt erst einmal Rechenregister, in denen der Prozessor Zwischenergebnisse abspeichert und die ggf. auch als Indexregister, etc. verwendet werden. In C 'gehören' diese Register dem Compiler, daher müssen Assemblereinschübe immer sehr darauf achten was sie tun. Die einfachste Lösung ist hier, immer alle verwendeten Register auf dem Stack zu retten und anschließend wieder zu restaurieren, aber das ist für Dich sicherlich nicht neu. 2. Microcontrollerspezifisch gibt es noch die SFR, Special-Function-Register, die das Verhalten der Peripherie und internen nicht-Recheneinheiten im Microcontroller steuern. Die sind dem C-Compiler erst einmal egal. So egal, dass es gewisser Verrenkungen gibt, um sie dem Compiler überhaupt bekannt zu machen. Aber hierfür gibt es immer vom Hersteller des Prozessors Anpassungsheader. Diese Headerfiles sind aber spezifisch sowohl für den Prozessor als auch für den Compiler. Diese Headerfiles sind aber dann auch unbedingt zu verwenden. 3. Ansonsten solltest Du wirklich erst einmal ein paar Codebeispiele lesen und versuchen, sie zu verstehen. Bitte missverstehe mich nicht, aber wenn Du nicht konkretere Fragen stellen kannst, wirst Du Dir in diesm Forum schnell Deinen Welpenbonus verspielen. 4. Ja, Microcontroller werden in ANSI-C programmiert. Zusammen mit den oben erwähnten Header-Files solltest Du alles haben was Du brauchst. Grüße, Stefan
Stefan, vielen Dank, war eine sehr gute Erklärung. Stefan Hennig schrieb: > 3. Ansonsten solltest Du wirklich erst einmal ein paar Codebeispiele > lesen und versuchen, sie zu verstehen. Bitte missverstehe mich nicht, > aber wenn Du nicht konkretere Fragen stellen kannst, wirst Du Dir in > diesm Forum schnell Deinen Welpenbonus verspielen. Nee, keine Sorge. Ich hatte eigentlich vor so schnell wie möglich soweit zu kommen, daß ich die Codebeispiele durcharbeiten kann. Daß es solche Verrenkungen für C gibt wußte ich nicht. Daher konnte ich nicht danach fragen. Bisher hatte ich mir das ganze eher wie ANSI-C mit "vordefinierten Variablen" vorgestellt. Hoffe ich muß erst wieder fragen stellen, wenn ich am Code hänge. Nochmal Euch allen ein schönes Wochenende!
B. S. schrieb: > Daß es solche Verrenkungen für C gibt wußte ich nicht. Daher konnte ich > nicht danach fragen. Bisher hatte ich mir das ganze eher wie ANSI-C mit > "vordefinierten Variablen" vorgestellt. Und als Grundprämisse ist dieses 'Modell' gar nicht schlecht. Das Schöne ist, dass die Compilerhersteller für dich vorgearbeitet haben und die ganzen 'nasty details' für dich als Programmierer schon verschwunden sind.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.