CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

Declaring variables in wrong order breaks it (Solved!)

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Scottzilla



Joined: 17 Jul 2012
Posts: 14

View user's profile Send private message

Declaring variables in wrong order breaks it (Solved!)
PostPosted: Tue Jul 17, 2012 7:56 pm     Reply with quote

I'm writing code for a project, and I've got two hardware prototypes. The code works great in one, but when I program it into the other it acts funny (continuously restarts, etc.). The weird part is that if I go back into the C and randomly change the order in which I declare my variables, I can get it to work on both versions. The "problem" unit isn't always the same one, either, so I don't think it's a bad chip.

The only difference between the two units is that one is SMT and one is through-hole.

Has anyone ever run into an issue where variable declaration order causes things not to run?

Chip: PIC18F4553 (both rev. 7)
Programmer: PICkit3
IDE: MPLAB X
Compiler version: 4.130

I can't really boil the problem down into simple sample code unfortunately.


Last edited by Scottzilla on Wed Oct 03, 2012 8:22 pm; edited 1 time in total
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Jul 17, 2012 8:41 pm     Reply with quote

Look for a pointer that's writing past the end of an array. Or look for a
non-array variable which is accessed with a pointer, which is writing
beyond the size limit of the variable.

When you change the declaration order, you change the variable that
is corrupted. If the variable is a loop counter, or is a flag that controls
an if() statement, you will see weird program operation.
Ttelmah



Joined: 11 Mar 2010
Posts: 19227

View user's profile Send private message

PostPosted: Wed Jul 18, 2012 4:41 am     Reply with quote

Some 'extra' possibilities:

A simple text array, used for a string, where the original programmer has forgotten that a string always needs one more character of storage, than it's 'length' (basically the same as the pointer suggestion from PCM_programmer, but perhaps less obvious).
Another slightly less 'obvious' problem is that changing the order may also change the speed with which variables can be accessed. If something is very timing critical, this may become significant.
If you have access to a slightly older compiler, it might also be worth 'switching back' (around the mid 4.12x if available). A few of the latest versions seem to give incorrect results with some arrays that cross page boundaries, 're-introducing' a problem here, that existed on much older compilers...

Best Wishes
Scottzilla



Joined: 17 Jul 2012
Posts: 14

View user's profile Send private message

PostPosted: Wed Jul 18, 2012 7:13 pm     Reply with quote

Thanks for the ideas. I'll go see what I can figure out.
Scottzilla



Joined: 17 Jul 2012
Posts: 14

View user's profile Send private message

PostPosted: Wed Oct 03, 2012 8:21 pm     Reply with quote

Just wanted to provide an update just in case anybody else experiences this weirdness.

Rearranging memory declarations (but not what was declared) and getting different results indicated it was a memory problem. Changing the length of the code (but not the function) and getting different results indicated it was a code problem. It didn't seem like both theories would be correct, so I just combined all the individual weird things the chip was doing into one symptom, "acts crazy".

It acted crazy in the PCB version, but not the hand-wired version. I verified that they were both electrically identical. Eventually I started hooking the two boards together, replacing sections of the PCB version one-by-one with the corresponding sections on the hand-wired version. Finally I found the answer.

I needed to run fatter power traces to the PIC.

The meter/scope didn't see any significant power drops originally and I added plenty of caps with no change, so I didn't think that would be the problem. Turns out it was.

So simple now that I know what it is. Smile

Anyway, I hope this helps somebody someday.
temtronic



Joined: 01 Jul 2010
Posts: 9114
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Thu Oct 04, 2012 5:25 am     Reply with quote

Happy you you found the problem and a solution!
In the good old days, I'd run 50thou traces for power as well as a perimeter ground 'guard ring' and copper was 2oz back then.
I've even soldered bare wirewrap wire or 22ga 'phone quad' to ensure solid reliable power on PCBs,especially those driving 'noisy' relays or valves.
Today's 'gotta be ultramicro small' mentality can bite back, as you found out.
Cheers
jay
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group