From: SourceForge.net <no...@so...> - 2006-11-21 17:23:26
|
Bugs item #1561330, was opened at 2006-09-19 04:09 Message generated for change (Settings changed) made by arcanum You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=520074&aid=1561330&group_id=68108 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: None Group: None Status: Open Resolution: None >Priority: 1 Private: No Submitted By: carcrosser (carcrosser) Assigned to: Nobody/Anonymous (nobody) Summary: problem with switch case Initial Comment: If I make a larger select case statement, the ATMEGA8 dies (haven't tried with other uC's) this happens after more than 7 cases. the microcontroller just halts all processes. I triple checked the case contents. If I empty the case contents, the thing starts working again??? I leave the cases, but only disable the content. I know the content is correct, bcause it's copied from other cases which worked perfectly: little example: switch (counter) { case 0: PORTB = 1; PORTD = PORTD & 239; break; case 5: PORTB = 38; PORTD = PORTD & 239; break; case 10: PORTB = 8; PORTD = PORTD & 239; break; case 15: PORTB = 52; PORTD = PORTD & 239; break; case 20: PORTB = 192; PORTD = PORTD & 239; break; case 25: PORTB = 36; PORTD = PORTD | 16; break; case 30: counter = -1; break; } ABOVE CODE WORKS!! switch (counter) { case 0: PORTB = 1; PORTD = PORTD & 239; break; case 5: PORTB = 38; PORTD = PORTD & 239; break; case 10: PORTB = 8; PORTD = PORTD & 239; break; case 15: PORTB = 52; PORTD = PORTD & 239; break; case 20: PORTB = 192; PORTD = PORTD & 239; break; case 25: PORTB = 36; PORTD = PORTD | 16; break; case 30: PORTB = 192; PORTD = PORTD & 239; break; case 35: counter = -1; break; } THIS CODE HALTS THE uC AFTER FEW CASES (yes, it's just a simple freaky shiftlight) if i make the content of case 30 comment with // it works again ? If I rewrite the code to iff statments everything works as well ---------------------------------------------------------------------- Comment By: Lou Cyphre (loucypher) Date: 2006-09-22 03:23 Message: Logged In: YES user_id=426923 What do you mean by "halting the microcontroller"? The only instruction able to "halt" the microcontroller is the SLEEP one, which isn't (for sure) generated by the compiler, unless you use it explicitely. Did you check the generated assembly code and/or followed your code in a simulated/debugging environment? (ATmega8 has no on-chip debugging features, though ATmega88 does, with a similar pinout/functions). A couple of side notes - the "case 30:" above executes the same code as per "case 20:", is that the intended behaviour? Optimizer could jump to same code for both cases. - the switch() statement has no "default:", while in "case 35:" there's an assignment that gives "counter" a value not present in cases; re-entering the switch() with that value won't make any changes on ports: is that on purpose? I think that before filing a "compiler bug" you could submit your problem to a forum such as www.avrfreaks.net ones. A compiler flaw should be detailed very well, like reporting a short piece of code, easy compilable by anyone, even better if analyzed along with generated assembly code. ---------------------------------------------------------------------- Comment By: Eric Weddington (arcanum) Date: 2006-09-19 13:16 Message: Logged In: YES user_id=543419 Can you attach a reduced test case that shows the bug? I would need enough source code that can compile that exhibits the bug. For example, in your snippet, the variable "counter" is not defined, so I cannot compile it to reproduce your problem. Also, let me know what compiler flags you are using on this. Thanks ---------------------------------------------------------------------- Comment By: carcrosser (carcrosser) Date: 2006-09-19 09:01 Message: Logged In: YES user_id=1601482 AVR-AS: 2.16.1 + coff-avr-patch (20050630) AVR-GCC: 3.4.6 ---------------------------------------------------------------------- Comment By: Nobody/Anonymous (nobody) Date: 2006-09-19 08:37 Message: Logged In: NO What are the versions of GNU Binutils, and GCC that you are using that causes this failure? To get the versions, go to a command line and do: avr-as --version avr-gcc --version ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=520074&aid=1561330&group_id=68108 |