www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik c-befehle msp430


Autor: Hamid (Gast)
Datum:

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

Autor: Jens Stolinski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: B. S. (mimir)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: B. S. (mimir)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: B. S. (mimir)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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:
ADD     +
SUBB    - 
MUL     *
DIV     /
ANL     &
ORL     |
XRL     ^
CALL x  x();
DJNZ i  do{ .. }while( --i );
CJNE    if( x == y ){ ... }
usw.


Peter

Autor: B. S. (mimir)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: B. S. (mimir)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: B. S. (mimir)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: B. S. (mimir)
Datum:

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

Autor: Hobbyelektroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Stefan Hennig (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: B. S. (mimir)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.