TC1796 FreeRTOS Port

OP #1358860
Hallo,
versuche gerade die FreeRTOS Portierung für den TC1796 in Betrieb zu 
nehmen.

Scheitern tut das ganze an Assembler Zeilen wie dieser (zu finden in der 
port.c beim Context Switch):
  unsigned portLONG xSavePCX, xSaveLR;
  ...
  __asm__( "mov.d %0, %%a11":"=r"(xSaveLR) );

Folgende Fehlermeldung bekomme ich vom GCC (v3.3):
   ../src/RTOS/port/port.c:247: error: [12568] inconsistent operand
   constraints in an `asm'

Bin leider nicht so der Assemblerheld. Hoffe mir kann jemand helfen.

Danke.
Da der Tricore verschiedene Registertypen hat, könnte es sein dass "=r" 
nicht zulässig ist und target-abhängige constraints verwendet werden 
müssen. Die nur die Doku der betreffenden GCC Portierung kennt. Da die 
nicht Bestandteil der offiziellen Version ist...
OP
Das klingt gut. Hab ich auch schon probiert, bin dabei aber leider auf 
keine grünen Zweig gekommen.
Hast du ne Idee welche ich nutzen kann: Muss ein long schreiben und 
Adressen lesen.

Wundern würde mich noch, das das eine Portierung für den GCC und für den 
TC1796 sein soll.

portLONG ist ein typedef oder Makro 32 Bit Wert.
M. H. schrieb:

> Hast du ne Idee welche ich nutzen kann: Muss ein long schreiben und
> Adressen lesen.

Habe weder einen Tricore noch eine Doku für dessen GCC. Mehr als 
allgemeine Auskünfte gibt's dazu also von mir nicht.

> Wundern würde mich noch, das das eine Portierung für den GCC und für den
> TC1796 sein soll.

Den Satz krieg ich nicht dekodiert. Ein TC1796 ist laut Google ein 
Tricore und so ein ASM-Statement mitsamt dem Begriff "operand 
constraint" gibt's jedenfalls nur beim GCC.
OP
Hab mal ein paar andere constraints ausprobiert die mir passend 
erschienen.

Dazu meint der GCC:
  C:\DOKUME~1\hausm\LOKALE~1\Temp/ccq2aaaa.s: Assembler messages:
  C:\DOKUME~1\hausm\LOKALE~1\Temp/ccq2aaaa.s:159: Error: Opcode/operand
  mismatch: mov.d [%a10]4,%a11


> Den Satz krieg ich nicht dekodiert. Ein TC1796 ist laut Google ein
> Tricore und so ein ASM-Statement mitsamt dem Begriff "operand
> constraint" gibt's jedenfalls nur beim GCC.

Das schon war, hab mich da nur gefragt wie der Erfinder dieses Codes es 
geschafft hat zu kompilieren.
Probier es eher mal mit sowas wie

__asm__( "mov.d %0, %%a11":"=d"(xSaveLR) );

Ein operand constraint ist das "r" in "=r"(x). %0 ist bloss der Verweis 
darauf. Aber ob da "r" oder "d" oder "D" oder ... richtig ist kann ich 
nicht erraten.
OP
Hallo Mario,
hab in einem anderen Thread von dir eine Antwort gefunden, das es noch 
andere freeRTOS implementierungen für den TriCore gibt.
(Uni-Erlangen, Uni Budapest, TU Wien and University in Singapore)

Könntest du mir da auch die Kontakte zukommen lassen?
OP
Danke.
Das mit dem "=d" und "=D" hab ich heute morgen auch entdeckt. Die "=r" 
wird doch nicht für die TriCore GCC Portierung unterstützt.
Kompilieren tut das ganze jetzt auf jeden Fall mal.

Funktionieren noch nicht. Werde mir das morgen früh mal mit dem Debugger 
genauer anschauen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.