c-befehle msp430

Gast #21116
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
Gast #1887861
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
#1887874
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!
#1887879
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?
#1887881
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
#1887886
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
Gast #1887891
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)
#1887897
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.
Gast #1887915
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
#1888173
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!
#1888195
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren