www.mikrocontroller.net

Forum: Compiler & IDEs WinAVR -> IAR - Compiler


Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Ich habe mein funktionstüchtiges WinAVR - Programm für den mega 128
gestern mal in die Testversion des IAR-Compilers gestopft. sei(); und
cli(); kannte er nicht und auch die Einleitung der Interruproutine ist
nicht SIGNAL, sondern mit

#pragma vector=TIMER0_COMP_vect
__interrupt void irqHandler_t0(void)

einzuleiten, glaube ich zumindest. Naja, jedenfalls läuft es nicht,
kaum 1 sek nach dem Programmstart gib es einen Rest.
Ich vermute den Fehler bei meiner abgekupferten Zeile zur Einleitung
der Interruptroutine.
Wie müßte das richtig aussehen, oder woher könnte der Rest kommen?

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich sollte das Forum "gcc" genau den anderen Weg beschreiben,
denke ich :)

So weit ich mich da erinnere geht das auch folgendermaßen:

interrupt[VECTOR] void irqHandler_foobar(void)
{
    /* some code */
}

Ansonsten sind doch bestimmt Beispiele bei dem IAR-Compiler dabei!?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> sei(); und cli(); kannte er nicht ... <<

jkdfjkldash(); Kennt er auch nicht. Steht auch nicht in der Doku.
Komisch.

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@OldBug
Das oben ist ja aus dem Beispiel, ich hab nur keine Ahnung was es
bedeutet. Dein Beispiel werd ich mal ausprobieren.

<< das Forum "gcc" genau den anderen Weg beschreiben,

Na ja! Das ist schon richtig und ich mag WinAVR ja eigentlich auch
lieber als den IAR schon der Anschaffungskosten wegen, aber wenn der
WinAVR meine doubles zu floats macht, ist die Genauigkeit meiner
Berechnug zum Teufel und die ganze Arbeit schlicht und ergreifend für
den A....

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube, die double/float-Thematik wurde schon in nem anderen Thread
besprochen, richtig?

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#pragma vector = 0x08
__interrupt void timer2_ovf_isr(void)
Das ist die Deklaration für Timer 2 Überlauf. Du mußt für deinen
Controller die richtige Vectoradresse einfügen.
MW

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für eine Performance erreicht man denn so mit 64-bit-
Gleitkommazahlen?  Da braucht ja jede Zahl 8 Register für die
Darstellung, ich stelle mir das grausig vor.

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Michael
Na das sollte er ja auch sein und die Vectoradresse kommt doch aus der
can128.h, oder?

@Jörg
Naja, ich brauche es ja nicht für alle Zahlen, aber für ein Paar eben
schon. Im Moment liegt die Berechnungszeit bei knapp 1 sec. Das ist,
finde ich, nicht schlecht.

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es hat übrigens auch mal jemand ein 64-bit-FP-package gepostet,
entweder an die avr-libc-dev oder an die avr-gcc-list Mailingliste.
Allerdings hatte das Teil eine ziemlich unorthodoxe
Operandenzugriffsmethode (eigener Softwarestack), sodass es sich nicht
direkt in den Compiler integrieren lässt.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Da braucht ja jede Zahl 8 Register für die Darstellung, ich stelle mir
das grausig vor."

Das täuscht. MUL/DIV als 'float' braucht um die 40µs für die
Operation und 'double' so 120 - 150µs, soweit ich es in Erinnerung
habe. Und bevor jetzt wieder das Geschreie losgeht, man dürfe nichts
und wieder nichts miteinander vergleichen, die double-Berechnung ist
echt fix !
Die Routinen selber zu schreiben, traut sich in der Regel niemand; aber
wenn man es macht, warum sollte es nicht fix sein ? Auch 'float'
anstatt 'int' zu nehmen trifft immer wieder auf unzutreffende
Vorurteile.

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.