Hi allerseits, habe gerade ein etwas ungewöhnliches Problem und frage mich, ob es da nicht einen Algorithmus gibt, der mein Problem lößt. Ich möchte für den PIC32 (32-Bit Timer) eine allgemeine Funktion schreiben, die für einen beliebigen Zeitwert, angegeben Befehlszyklen bis hin zu einigen Tagen, einen Matchwert für den 32 Bit Timer berechnet, sowie einen Wert für einen Software-Postscaler. requiredDivider=80000000; // pro Sekunde (das Ding läuft mit 80 MIPS) requiredDivider*=60; // für eine Minute requiredDivider*=60; // für eine Strunde requiredDivider*=24; // für einen Tag requiredDivider ist also eine __int64 Zahl, welche die Anzahl von Taktzyklen für einen Tag enthält. Da diese sich nicht mehr mit 32-Bit darstellen läßt, muß ich daraus einen möglichst großen Matchwert für den Timer und einen möglichst kleinen Software-Prescalerwert errechnen. Da ich nicht weiß, wie sich der Timer bei 0x0001:0000:0000 verhält, verwende ich nur 31 Bit. postscaler = (requiredDivider/0x80000000)+1; timerMatch = requiredDivider/postscaler; delta = requiredDivider-(postscaler*timerMatch); Delta gibt nun den Unterschied meiner Berechnung und dem wirklich daraus resultierenden Wert (Timermatch*Postscaler) an. Wie kann ich nun timerMatch und postscaler so bestimmen, daß delta == 0 wird. Außerdem sollte der timerMatch-Wert so groß wie möglich werden (was halt mit 32 Bit geht). Hat einer von Euch eine Idee, wie man da vorgehen könnte? Aufgrund der großen Werte halte ich das Ausproblieren aller Kombinationen für nicht Praktikabel.
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.