Forum: Mikrocontroller und Digitale Elektronik c-befehle msp430


von Hamid (Gast)


Lesenswert?

Salut zusammen hat jemand von euch c-Befehle für
msp430F149, oder Buch, Links u.ä

von Jens Stolinski (Gast)


Lesenswert?

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

von B. S. (mimir)


Lesenswert?

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!

von Dennis (Gast)


Lesenswert?

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

von B. S. (mimir)


Lesenswert?

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!

von B. S. (mimir)


Lesenswert?

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?

von Peter D. (peda)


Lesenswert?

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

von B. S. (mimir)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von B. S. (mimir)


Lesenswert?

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.

von Dennis (Gast)


Lesenswert?

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)

von Peter D. (peda)


Lesenswert?

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

von B. S. (mimir)


Lesenswert?

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.

von B. S. (mimir)


Lesenswert?

D.h. dann wohl dass für mich nur ANSI-C geben wird und "vordefinierte 
Variablen", richtig?

von Hobbyelektroniker (Gast)


Lesenswert?

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ß

von Stefan Hennig (Gast)


Lesenswert?

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

von B. S. (mimir)


Lesenswert?

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!

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.