InfiniSim icon indicating copy to clipboard operation
InfiniSim copied to clipboard

SIGFPE (division by zero) in random number app

Open lmamane opened this issue 1 year ago • 3 comments

Enter the random number app. Click the "generate random number" button, or one of the "+" or "-" buttons, a few times. Most of the times, this will stop the simulator process with a SIGFPE due to a division by zero in InfiniTime/src/components/motion/MotionController.cpp, function MotionController::ShouldShakeWake, because time == lastTime

This looks like having time == lastTime could be a simulator bug, not an issue on actual hardware, not sure.

Here's the patch I have applied locally to InfiniTime; let me know if you think it should go to InfiniTime (cleaned up of debugging output to cerr, obviously) for better robustness or is just a work-around for a simulator bug.

InfiniTime_FPE.zip

(sorry I upload it as a ZIP file, github doesn't let me attach a patch file with a messaging listing the supported file types, among which "PATCH")

lmamane avatar Oct 26 '24 12:10 lmamane

Another way to trigger: enter settings, wake up setttings, enable "Shake Wake", then disable it again

lmamane avatar Oct 26 '24 13:10 lmamane

I also experienced this issue today, and I don't know were it came from because you reported it on October 26 and I am quite sure I had successful InfiniSim runs since then. The bug happened randomly for me, even with just a right click on the watchface after infinisim starts. Your (@lmamane ) patch seems to fix it, thanks.

Eve1374 avatar Dec 11 '24 15:12 Eve1374

I also experienced this crash in the shake calibration screen when clicking the start button.

This crash is caused by MotionController::Update() being called faster than the tick rate of xTaskGetTickCount() (which uses configTICK_RATE_HZ=1024). As a result, the values of time and lastTime are equal. I don't know whether this is the case as well on the PineTime, its main loop may be running slow enough that this can never happen there.

Interestingly, my logging in MotionController::Update() showed that its call frequency increases when you click the simulator screen, making it more likely to hit this crash.

dariusarnold avatar Mar 09 '25 21:03 dariusarnold