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?
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!?
>> sei(); und cli(); kannte er nicht ... <<
jkdfjkldash(); Kennt er auch nicht. Steht auch nicht in der Doku.
Komisch.
@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....
Ich glaube, die double/float-Thematik wurde schon in nem anderen Thread besprochen, richtig?
#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
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.
@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.
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.
"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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.