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.