-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Dividieren

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    61
    Beiträge
    531

    Dividieren

    Anzeige

    Hallo,

    Mein Program lauft nicht wenn die Zeile mit code:

    MeinVar1 = MeinVar2 / 100;
    anwesend ist.

    In die Listdatei sehe ich folgendes:

    rcall __udivmodqi4
    Mit Google finde ich dass es sich um eine function handelt die sich in 'stdlib.h' befinded.

    Wie kann ich obenstehendes dividieren ohne die library function zu benutzen? Oder bei welchen umstande oder aktionen wird '__udivmodqi4' angerufen?

    Gruss

    Henk

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.062
    Blog-Einträge
    2
    Falls ein Fehler in der Lib sein sollte, ist der sicher vom Variablentyp abhängig. Vielleicht kannst Du ja den Variblentyp einfach mal ändern, damit eine andere Divisionsroutine aufgerufen wird. Ansonsten würde ich empfehlen AVR-Studio zu installieren, da ist ein Simulator drin und man kann die Funktion mal durchsteppen.

    Gruss,
    stochri

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    61
    Beiträge
    531
    Ich habe herausgefunden dass die Funktion '__udivmodqi4' richtig angerufen wird und functioniert wenn ein dividierung statt finden soll,

    aber, es functioniert nicht wenn angerufen von einen dividierung innerhalb ein Interrupt.

    Dass Program hangt sich nicht aber die nachher kommende interrupt zeilen werden nicht mehr ausgefuhrt.

    Dass ist etwas wass ich nicht verstehe.

    Irgendwo sehe ich etwas uber dem Kopf.

    Gruss

    Henk

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.062
    Blog-Einträge
    2
    Hallo Henk,
    mal ne ganz andere Frage: das Musikspielprogramm für den ASURO stammte doch von Dir, oder nicht? Villeicht könnte man eine kleine Subroutine zum Töne ausgeben machen und in die ASURO-lib
    http://sourceforge.net/project/showf...roup_id=155217
    mit einfügen, damit man die Möglichkeit hat, in den eigenen ASURO-Programmen akkustische Effekte einzubauen.
    Was hältst Du davon ?

    Gruss,
    stochri

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    61
    Beiträge
    531
    Hallo Stochri,

    Ja, stimmt, dass Musikprogram stammt von mir, und eine Art Beep() function fuhr die Asuro daruber hab ich mir schon gedacht.

    Meine frage ist, wer ist die Author/Besitzer vom Asuro Lib auf SourceForce?

    Wenn Du die Asuro-Musik source anschaut kannst du vielleicht selbst so etwas zufugen?

    gruss

    Henk

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Kannst du mal das entsprechende Code-Stück hier reinstellen, so daß man es nachvollziehen kann? evtl aus das list-file

    udivmodqi4 wird genommen für 8bit-Werte.
    Disclaimer: none. Sue me.

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.062
    Blog-Einträge
    2
    @henk
    Meine frage ist, wer ist die Author/Besitzer vom Asuro Lib auf SourceForce?
    Der Hauptmaintainer ist m.a.r.v.i.n, der hat hier im Forum vor kurzem den Vorschlag gemacht, eine gemeinsame Lib zu schaffen und er hat dann das Projekt in source-forge eingetragen.
    Wo finde ich denn die Soucen zu Deinem Musik-Programm? Deine alte Seite ist ja nicht mehr erreichbar.

    Gruss,
    stochri

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Ich vermute mal der Fehler liegt woanders in deiner Interrupt-Routine. Wenn ich ne Division in einer ISR mache, sieht das asm ok aus.
    Disclaimer: none. Sue me.

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    61
    Beiträge
    531
    Hallo SprinterSB un storchi

    Auch eine eigene einfache function zum Led steurung lief nicht wenn angerufen innerhalb ein interrupt, ich verwende den timer1 output compare interrupt dazu. Ich nutze die Asuro Robot ProgrammersNotepad2 mit Gcc.exe und eine makefile von die Asuro. Vielleicht gibts dort irgendwo die antwort. Ich vermute da geht etwas falsch beim stack. Vielleicht werden da die programcounter oder sonstiges nicht auf stack gespeichert. Es hat nicht unbedingt mit dividieren zu tun sondern mit anrufen eine function.
    Meine code listing



    //OCR1BL=ucMeinVar*128/110;

    993 .stabn 68,0,1207,.LM159-__vector_7
    994 .LM159:
    995 03c6 8091 0000 lds r24,ucMeinVar
    996 03ca 9927 clr r25
    997 03cc 9695 lsr r25
    998 03ce 982F mov r25,r24
    999 03d0 8827 clr r24
    1000 03d2 9795 ror r25
    1001 03d4 8795 ror r24
    1002 03d6 6EE6 ldi r22,lo8(110)
    1003 03d8 70E0 ldi r23,hi8(110)
    1004 03da 00D0 rcall __divmodhi4
    vorangehend an 'rcall' keine 'stack-pop' actionen oder sonstiges!
    Vielleicht sollte im makefile einige compiler flaggen zugefugt werden.


    zu storchi

    Die Musik sourcode ist hier zu finden:

    http://www.arexx.com/downloads/Asuro_Henk/AsuroIdx.htm

    irgendwo by Arexx Asuro downloads

    gruss

    Henk

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2005
    Alter
    64
    Beiträge
    157
    Hallo Henk,

    das ganze sieht nach einem Stack-Fehler aus (konkurrierende Interrupts oder so). Der Assembler-Code ist so in Ordnung. Wie leitest du die Interrupt-Routine ein? mit SIGNAL oder INTERRUPT?

    Bitte 'mal die gesamten Interrupt-Routine posten (in C).

    Gruß Red Baron

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •