View previous topic :: View next topic |
Author |
Message |
Prashant Patel
Joined: 19 Jul 2004 Posts: 33
|
RAM used in variable declaration |
Posted: Tue Sep 14, 2004 6:51 pm |
|
|
Hi..
We are making a project(using 16F877) in which we require to
declare more variables. But I am worried about the RAM.
Can anybody give me an idea to declare variables which take
minimum RAM ?
And good tips of programming to reduce the RAM used.
Thanks...
Regards
Prashant |
|
|
bdavis
Joined: 31 May 2004 Posts: 86 Location: Colorado Springs, CO
|
|
Posted: Tue Sep 14, 2004 7:55 pm |
|
|
Use bit variables. Only one bit of ram per variable, and VERY efficient use of ram. These of course are a boolean type of variable to state on or off... |
|
|
alexbilo
Joined: 01 Jun 2004 Posts: 39 Location: Trois-Rivières
|
|
Posted: Tue Sep 14, 2004 8:18 pm |
|
|
The best way I know to save RAM is to use effeciently the different data types. Meaning that you should ask yourself what is the range needed for a given variable and choose the appropriate data type for this variable.
Moreover, you should use global variables only when it is absolutely necessary. If you can make a variable local to a function, then do it. That will make the code more readable, for a first, but it is also - supposed - to reduce the used RAM since the memory used by these local variables is allocated only when the function is executed. This may depends on the compiler, though.
These suggestions may seem obvious to many programmers, but since I don't know your knowledge level, I state them anyway.
Good luck, _________________ Alex |
|
|
Prashant Patel
Joined: 19 Jul 2004 Posts: 33
|
|
Posted: Tue Sep 14, 2004 8:38 pm |
|
|
Well, I know these things ..but want to know some detailed idea to manage the variables.
Thanks,
Prashant |
|
|
bdavis
Joined: 31 May 2004 Posts: 86 Location: Colorado Springs, CO
|
|
Posted: Tue Sep 14, 2004 9:26 pm |
|
|
Oh to just manage the variables - I thought you just wanted to declare more variables in the same amount of space. To manage them, you can use structures and unions. I think naming conventions could also fall into this category. |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Tue Sep 14, 2004 9:39 pm |
|
|
Quote: | Can anybody give me an idea to declare variables which take
minimum RAM ?
|
Don't use a data type bigger than what you need.
Use constants where possible. Especially when it comes to strings. |
|
|
Prashant Patel
Joined: 19 Jul 2004 Posts: 33
|
|
Posted: Tue Sep 14, 2004 9:41 pm |
|
|
Sorry, I was meant to have more variables in the same space.
I know struct, union and naming convention.
I want to have variable to not declare to take more space unnecessary.
Let me ask you,
Does it make any difference in memory usage if we declare the
variable like
[1]
int Mode;
int ExeMode;
and/or
int Mode, ExeMode; // Both are in same line...
[2]
#define PULSE_TIME 65036
or
int16 CONST PULSE_TIME= 65036;
Thanks..
Regards
Prashant
Last edited by Prashant Patel on Tue Sep 14, 2004 9:51 pm; edited 1 time in total |
|
|
bdavis
Joined: 31 May 2004 Posts: 86 Location: Colorado Springs, CO
|
|
Posted: Tue Sep 14, 2004 9:49 pm |
|
|
No need to appologize - I just mis-understood...
You probably want examples...
Try stuff like the below for your port pin definitions:
struct
{
unsigned char SWITCH_A0 : 1; /* 0 */
unsigned char SWITCH_A1 : 1; /* 1 */
unsigned char SWITCH_A2 : 1; /* 2 */
unsigned char SWITCH_A3 : 1; /* 3 */
unsigned char RESET_PIN : 1; /* 4 */
unsigned char MODE_SELECT : 1; /* 5 */
unsigned char NOT_USED_A6 : 1; /* 6 */
unsigned char NOT_EXIST_A7 : 1; /* 7 */
} PORTA_b;
#locate PORTA_b=0xF80
OR - if not using a struct, you could use something like...
#bit B_SWITCH_B0 = PORTB.0
#bit B_SWITCH_B1 = PORTB.1
#bit B_SWITCH_B2 = PORTB.2
#bit B_ICD_PIN_B3 = PORTB.3
#bit B_SWITCH_B3 = PORTB.4
#bit B_NOT_USED_B5 = PORTB.5
#bit B_ICD_PIN_B6 = PORTB.6
#bit B_ICD_PIN_B7 = PORTB.7
Hope that helps... |
|
|
bdavis
Joined: 31 May 2004 Posts: 86 Location: Colorado Springs, CO
|
|
Posted: Tue Sep 14, 2004 9:54 pm |
|
|
To answer your previous question - the answer is no.
Space used is number of variables multiplied by the size of each variable for all global variables. For local variables, the CCS compiler will optimize for you by reusing the same memory region for multiple variables that aren't used at the same time, which saves data memory.
You can also have constant data variables stored in Flash that won't take up local data memory in the PIC. |
|
|
Prashant Patel
Joined: 19 Jul 2004 Posts: 33
|
|
Posted: Tue Sep 14, 2004 10:15 pm |
|
|
Thanks... |
|
|
|