From: SourceForge.net <no...@so...> - 2013-01-16 07:45:45
|
Bugs item #3600983, was opened at 2013-01-15 07:28 Message generated for change (Comment added) made by mbtronics You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3600983&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: pic16 target Group: non bugs Status: Closed Resolution: Fixed Priority: 5 Private: No Submitted By: Maarten Blomme (mbtronics) Assigned to: Raphael Neider (tecodev) Summary: Endless loop in modulong.c Initial Comment: I am working on a large piece of code for a 18F2550. I have had it several times that the watchdog went off. I was able to trace the problem to an endless loop in _modulong. I think this is the code in lib/pic16/libsdcc/long/modulong.c. The code for the pic14 target has an extra line with comments ("/* prevent endless loop (division by zero exception?!?) */") which the pic16 code does not have. Could this be the problem? ---------------------------------------------------------------------- Comment By: Maarten Blomme (mbtronics) Date: 2013-01-15 23:45 Message: I did some more debugging, and the original function call is a printf, but I don't know exactly with which parameters. If _modulong may not be called with b==0, there may be a problem somewhere between printf and _modulong. The problem is that I have a hard time reproducing this. My code prints the temperature every half second to the serial port, but the endless loop seems to happen at random. Sometimes it takes 9 hours, sometimes 1 hour. printf("Temp: %d\n\r", temperature); ---------------------------------------------------------------------- Comment By: Raphael Neider (tecodev) Date: 2013-01-15 14:55 Message: I "fixed" _modulong(a, b) to return ~0UL for b==0 instead of entering an infinite loop in r8388. However, if your program triggered this division-by-0 several times already, you may have to look into your code again: Division-by-0 triggers undefined behaviour as per the C standard (see, e.g., Clause 6.5.5.5 in draft N1548), so that an endless loop is a perfectly valid implementation. Raphael ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3600983&group_id=599 |