View Single Post
  #4   Spotlight this post!  
Unread 12-02-2006, 01:33
Mark McLeod's Avatar
Mark McLeod Mark McLeod is offline
Just Itinerant
AKA: Hey dad...Father...MARK
FRC #0358 (Robotic Eagles)
Team Role: Engineer
 
Join Date: Mar 2003
Rookie Year: 2002
Location: Hauppauge, Long Island, NY
Posts: 8,809
Mark McLeod has a reputation beyond reputeMark McLeod has a reputation beyond reputeMark McLeod has a reputation beyond reputeMark McLeod has a reputation beyond reputeMark McLeod has a reputation beyond reputeMark McLeod has a reputation beyond reputeMark McLeod has a reputation beyond reputeMark McLeod has a reputation beyond reputeMark McLeod has a reputation beyond reputeMark McLeod has a reputation beyond reputeMark McLeod has a reputation beyond repute
Re: Problem with idata_user_routines.o?

There are two of these particular kinds of limits that can be at fault in this case.

1) We are restricted to declaring a maximum of 256 bytes of global and static variables within any single .c file. So an array of 256 bytes by itself will actually fit, but the same array plus one byte more, e.g.,
char myarray[256];
char onetoomany;
will cause it to bomb. Easy work arounds include using smaller arrays of course, moving the array to the Program memory if it will never change and th values can all be preset, a la
rom const char myarrary[256]={0,1,2,3,4,...255};
or moving the 256 byte array to a dummy .c file and referencing it locally as an "extern".

2) Each of our routines within a .c file is limited to no more than 120 bytes of local variables, so char myarray[120]; would be it.

e.g., these represent the maximums and not one byte more:
Code:
/************
*  my_routines.c
************/

char myglobal[256];

void myroutine()
{
  char mylocal[120];
...
}
__________________
"Rationality is our distinguishing characteristic - it's what sets us apart from the beasts." - Aristotle

Last edited by Mark McLeod : 12-02-2006 at 09:37.