Forum: Mikrocontroller und Digitale Elektronik TC1796 FreeRTOS Port


von M. H. (kroggy)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

Was ist portLONG?

von (prx) A. K. (prx)


Lesenswert?

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...

von M. H. (kroggy)


Lesenswert?

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.

von M. H. (kroggy)


Lesenswert?

Kleiner Nachtrag.
Hab das gerade im Handbuch nachgelesen.
Die "=r" wird unterstützt.

Mist

von (prx) A. K. (prx)


Lesenswert?

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.

von M. H. (kroggy)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

M. H. schrieb:

> Das schon war, hab mich da nur gefragt wie der Erfinder dieses Codes es
> geschafft hat zu kompilieren.

Andere Version?

von mario (Gast)


Lesenswert?

Hi,

you will find a TriCore training for GCC and Inline Assembler at 
http://www.hightec-rt.com/de/downloads/cat_view/58-documentation.html

von M. H. (kroggy)


Lesenswert?

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?

von M. H. (kroggy)


Lesenswert?

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.

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.