Ich implementiere einen Taschenrechner in einem Mikrocontroller, der über die serielle Schnittstelle gesteuert wird. Zum Beispiel würde ich senden 1234*5678=
und es würde mit antworten 7006652\r\n
. Ich habe den Code dafür mit dem C18-Compiler geschrieben.
Wenn ich sende 123456*789123=
, erhalte ich die Antwort 2932688576
, die falsch ist. Die richtige Antwort wäre gewesen 97421969088
, aber das läuft über unsigned long
.
Ich möchte das Überlauflimit nicht erhöhen, möchte aber eine Möglichkeit haben, zu überprüfen, ob ein Überlauf aufgetreten ist. In ASM wäre dies möglich, indem das relevante Bit im STATUS-Register überprüft wird. Mit C würde dieses Bit jedoch gelöscht, bevor ich es lesen könnte, nicht wahr?
Am besten wäre eine allgemeine Lösung, um festzustellen, ob ein Überlauf aufgetreten ist.