www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TriCore Entwicklungsumgebung HighTec vs. Tasking


Autor: trabbie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

derzeitig bin ich dabei, eine PWM auf einem TriCore TC1166 (Infineon) zu 
realisieren. Da wir evaluieren möchten, ob uns die Altium Tasking 
Umgebung oder eben die HighTec Umgebung mehr taugt, versuche ich, mich 
gerade in Testversionen beider Systeme einzuarbeiten.

Die PWM selbst habe ich mit DAvE erzeugt, das funktioniert in beiden 
Systemen ganz gut, mit leichen Performance-Vorteilen der Executable vom 
HighTec-Compiler.
Dazu eine erste Frage: Da ich noch einige Zusatzfunktionen einbauen 
möchte, brauche ich eine Funktion, die aus zwei (unsigned) int den 
grösseren oder kleineren Wert zurückgibt. In Tasking gibt es dafür z.B. 
den Compilereigenen
int c = __minu(a,b)
Aber nirgendwo kann ich finden, wie ich so was mit dem GNU-Compiler des 
HighTec-Systems lösen kann?!?

Hättet ihr da eine Idee?

Besten Dank und
herzliche Grüsse :-)

Autor: Klaus B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ja gibt es natürlich. Dabei handelt es sich um spezielle Befehle des 
TriCore-Befehlssatzes (zB. diese hier habe ich selber öfters verwendet: 
_dsync(), _isync(), _nop(), _debug()).

Wie jetzt speziell der für min.u lautet, weiß ich aus dem Kopf jetzt 
nicht.
Aber der GNU-GCC stellt mit dem Inline-Assembler eine universelle 
Schnittstelle zu Verfügung, mit der man schlußendlich all diese 
"Spezialbefehle" auch selbst zusammenbauen kann:

Nur zur Veranschaulichung (da ich die Argumente von min.u nicht 
auswendig im Kopf haben):
uint32 x_u32;
uint32 y_u32;

asm (" min.u %0, %1"
    :"=d" (x_u32), "d" (y_u32)
    );

Übrgens würde ich dir die Hightec-Toolchain nahe legen. Ich habe sowohl 
mit Tasking als auch mit Hightec gearbeitet. Der Tasking-Compiler hat 
mir aber die letzten Nerven geraubt (vorallem mit der total 
undurchsichtigen Linker-Commandfile-Sprache) und deren Unflexibilität.
Der GNU-GCC ist da sehr leicht und transparent konfigurierbar. Vor allem 
die Linkerskripts sind einfach zu schreiben.

Gruß.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
trabbie schrieb:

> Dazu eine erste Frage: Da ich noch einige Zusatzfunktionen einbauen
> möchte, brauche ich eine Funktion, die aus zwei (unsigned) int den
> grösseren oder kleineren Wert zurückgibt. In Tasking gibt es dafür z.B.
> den Compilereigenen
int c = __minu(a,b)
> Aber nirgendwo kann ich finden, wie ich so was mit dem GNU-Compiler des
> HighTec-Systems lösen kann?!?
>
> Hättet ihr da eine Idee?

Das kann doch in normalem C ausgedrückt werden:
unsigned a, b, c;
// ...
c = a < b ? a : b;

Das ist portabel und man verheddert sich nicht in Inline-Assembler.

Falls man wirklich den Code mit Assembler spicken und möglichst 
kryptisch gestalten will: Die Constraints für D-Register ist "d" und für 
eine unsigned 9-Bit-Konstante AFAIR "I" oder "J" (im Handbuch 
nachlesen!)
asm ("min.u %0, %1, %2" : "=d" (c) : "d" (a), "dI" (b));

Je nach Compiler-Version hat tricore-gcc auch Builtin-Funktionen wie 
__builtin_minu oder so. Auch hier hilft ein Blick ins Handbuch, irgendwo 
bei "Builtin Functions" oder "Intrinsic Functions".

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.