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 CCS Technical Support

To many variable? PIC18f452/458.

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







To many variable? PIC18f452/458.
PostPosted: Sat Feb 25, 2006 6:13 am     Reply with quote

I've a problem with a big program, so a write small program for a test.
My program:

VOID main(){
WHILE ( 1 ) {
output_high ( pin_A0 );
delay_ms ( 1000 );
output_low ( pin_A0 );
delay_ms ( 1000 );
}
}

At the beginning of this program I’ve many variable. If variables takes less then 96 bytes it works ok, and part of .lst file looks like:
RAM used: 95 (6%) at main() level
96 (6%) worst case
.............................
00F8: CLRF 06
00FA: CLRF 08
00FC: CLRF 09
00FE: CLRF 0A
0100: CLRF 0B
0102: CLRF 0C

But if I add only one variable program don’t works correctly and part of .lst file looks like:
RAM used: 96 (6%) at main() level
97 (6%) worst case
......................................
0034: CLRF x60
0036: CLRF x61
0038: CLRF x62
003A: CLRF x63

No ERRORs and no wornings from compiler.

What does the ‘x’ means, and why the program don’t work correctly when I’ve more then 96 bytes takes for variables?

I’m using: PCH 3.242
PIC18f452/458

Any ideas?

P.S. Sorry for my english
Ttelmah
Guest







PostPosted: Sat Feb 25, 2006 9:09 am     Reply with quote

The 'x', means this is using bank addressing. There will be a line just in front of this block, setting the bank value to be used.
This is normal.
Below 96 bytes, everthing fits into the bottom bank, so this does not happen.
Your 'test'program should work right in either case, but you don't show enough to know for sure. What are the fuses set to?. Show the variable declarations.
There are some memory allocation oddities that have appeared with the latest compilers. These are tied up with these really being in part 'betas' for the forthcoming linker. What happens with 3.229?. 3.243, fixes some of these problems. Generally, the problems don't seem to appear if you stick to simple variable declarations. Unless you need the new features offered by the 'latest' compiler, you will be safer using the earlier posted version(s), especially when there are major changes happening.

Best Wishes
Guest








PostPosted: Mon Feb 27, 2006 3:55 am     Reply with quote

After Your answer Ttelmah I've start searching something about bank adressing,and I found:
A new #TYPE option has been added to allow the default address space for
a block of code to be specified. For example to allocate a block of variables
to the memory area 0x100 to 0x1FF do this:

typemod <,,,0x100,0x1ff> user_ram_block;

#type default=user_ram_block

... all variable declarations in this area
... will be in 0x100-0x1FF

#type default=

... memory allocation back to normal

When I apply this the program start works correctly.

THX
ckielstra



Joined: 18 Mar 2004
Posts: 3680
Location: The Netherlands

View user's profile Send private message

PostPosted: Mon Feb 27, 2006 4:08 am     Reply with quote

Quote:
#type default=

... memory allocation back to normal

When I apply this the program start works correctly.
Sounds to me like you are using one of the latest compiler releases like v3.240 or 3.242 which were buggy. Please note that the most recent releases are always considered Beta versions by CCS, don't use these unless you need the new features. On the CCS download page you will also find an older version which is considered to be stable, currently v3.236.
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