InfiniSim
InfiniSim copied to clipboard
SIGFPE (division by zero) in random number app
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.
(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")
Another way to trigger: enter settings, wake up setttings, enable "Shake Wake", then disable it again
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.
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.