mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Assembler Code in *.c File integrieren, nur wie im CCE?


Autor: Samur (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In meinem C-Büchlein welches ich habe, steht, dass man Assembler Code 
ganz einfach in einem *.c File einbinden kann, nämlich so:
asm("instruction");

Nur leider funktioniert das in meinem Code Composer V3 nicht.
Es gibt beim Kompilieren eine Fehlermeldung.

Weiss jemand von euch wie man das im CCE machen kann?

Autor: GAST (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
prinzipiell ist asm(); erstmal eine Funktion, ohne die Fehlermeldung 
jetzt zu kennen ist es evt möglich, dass Du die entsprechende lib mit 
dieser funktion vergessen hast!?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also bei mir klappt das. CCE V3

asm("nop"); wird problemlos übersetzt.

Autor: Samur (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei mir bringt er die Fehler:


"Illegal mnemonic specified"
mov  #0xFFFE,R12

"Symbol mov has already been defined"
mov  @R12,PC

"Illegal mnemonic specified"
mov  @R12,PC


PS: Wie kann man im CCE bequem nachschauen wie viel Flash das Programm 
benötigt?

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sit aber kein Fehler vom Compiler sondern vom assembler der deine 
Anweisungen nicht versteht oder der Meinung ist das was falsch ist.
Fang erstmal mit minimalbeispiel (nop) an, und dann Zeile für Zeile dein 
ASM rein.

Autor: Samur (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist merkwürdig.
Also mit "nop" funktioniert es.

Es ist eben so, dass ich vorher IAR Workbench benutzte und da 
funktionierte dies super.

Muss ich das jetzt versuchen umzuschreiben?

Autor: Tobias Korrmann (kurzschluss81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C ist jetzt seit CCE V3 im CCE und in IAR gleich
aber Asembler wird in CCE teilweise andsers umgesetzt als in IAR.
Du must deine ASM Befehle an CCE anpassen

Autor: Samur (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, und wie mache ich das?
Hab von Assembler keine Ahnung.

Die Funktion ist einfach die, dass der ProgramCounter an den absoluten 
Programmanfang springt, also vor die Initialisierung der Variablen etc.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ein "Kaltstart"? Kannst ja auch den Watchdog abschießen, dann hast 
du einen kompletten Neustart...
z.B. mit

WDTCTL = 0xDEAD;

Problem an deinem Code ist, dass er nicht atomar ist, der C-Compiler 
kann also im ungünstigsten Fall die Befehle so verteilen, dass sie nicht 
direkt hintereinander stehen....du müsstest dann eine extra asm-Datei 
schreiben, da eine Funktion deklarieren und diese dann aus C aufrufen. 
Wie das geht, steht im User Guide des CCE v3.

Achso, CCE zeigt leider erst beim Flashen an, wie groß der Code geworden 
ist....hab da auch noch nix anderes gefunden. Höchstens TI-txt file 
erzeugen lassen und nachschauen....

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Übrigens, so klappts im CCE:
asm(" mov.w #0xFFFE,R12");

Wichtig ist der Freiraum vor dem mov. Auszug aus dem User Guide:

"The inserted code must be a legal assembly language statement. Like all 
assembly language statements, the line of code inside the quotes must 
begin with a label, a blank, a tab, or a comment (asterisk or 
semicolon)."

Autor: Samur (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey super, danke.

Mit dem Leerschlag funktioniert es.

Autor: Samur (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur so aus Interesse:
was ist der Unterschied zwischen "mov" und "mov.w" ? Spielt das eine 
Rolle?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nee, mov ist an sich schon 16 Bit. Gibt aber auch noch mov.b für 8-Bit 
Zugriffe. Mov.w wäre Word-Zugriff.

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.