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

# of stack levels for 16F877A

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



Joined: 05 Mar 2008
Posts: 9

View user's profile Send private message

# of stack levels for 16F877A
PostPosted: Fri Aug 15, 2008 11:59 am     Reply with quote

I've got an unusual result in my statistics output file:

Quote:
ROM used: 2585 (32%)
2982 (36%) including unused fragments

2 Average locations per line
6 Average locations per statement

RAM used: 65 (18%) at main() level
77 (21%) worst case

Stack used: 5 worst case (out of 6 total available)

Lines Stmts % Files
----- ----- --- -----
537 321 76 pc2_ngp.c
71 0 0 pc2_ngp.h
313 0 0 ..\..\..\PROGRA~1\PICC\devices\16F877A.h
224 102 24 ..\pc2.c
----- -----
1145 423 Total


The PIC 16 should have 8 stack levels! Also according to the call tree, my code only uses 3 stack levels. I understand that I need to budget another stack level for an interrupt, but I can't guess why I would need two additional stack levels...

Is it possible that the compiler stats file decreases the available stack level to show the stack levels available to the user? Does it also increase the number of stack levels I have used to accurately reflect the maximum expected stack usage? It seems it should only do one of these things, not both.

When I first discovered this, the report said 8 stack levels used out of 6 available, and did not generate a warning/error. I have de-nested some functions to reduce the stack usage. I would like to be more than just 1 stack level away from overflow.... can someone confirm that this comment is wrong/flawed, or explain what is happening?

Thanks!

PCW 4.069
ckielstra



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

View user's profile Send private message

PostPosted: Sat Aug 16, 2008 12:01 pm     Reply with quote

I performed some tests:

1) A simple program calling 0 functions and no interrupts
Stack used: 0 worst case (out of 8 total available)
OK

2) A simple test program calling 1 function and no interrupts
Stack used: 1 worst case (out of 8 total available)
OK

3) A simple test program calling 0 functions and 1 interrupt (not calling functions)
Stack used: 1 worst case (out of 7 total available)
Strange.

4) A simple test program calling 0 functions and 1 interrupt (calling 1 function)
Stack used: 2 worst case (out of 6 total available)
Strange.

5) A simple test program calling 0 functions and 1 interrupt (calling 6 nested functions)
Stack used: 7 worst case (out of 1 total available)
Strange; 7 used out of a total of 1 available ???


It seems like the number for 'total available' stack levels indicates the stack levels available to the main program. But the 'worst case' number is the total number of stack levels used by the main program _and_ the interrupts.

Like you said, it looks like the compiler is mixing two strategies where it should only do one.
jallum



Joined: 05 Mar 2008
Posts: 9

View user's profile Send private message

PostPosted: Mon Aug 18, 2008 10:25 am     Reply with quote

Thanks, I'm glad someone was able to duplicate what I was seeing.

My interrupt functions do call built in functions, which would explain the need for 2 stack levels by the interrupt functions.

I'll assume that my stats file means either 5 used out of 8, or 3 used out of 6 (depending on how I want to interpret the # of stack levels used). And I'll submit this for a bugfix.
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