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

How can i clear my mcu ram ( release the ram block )

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



Joined: 28 Feb 2020
Posts: 2

View user's profile Send private message Send e-mail

How can i clear my mcu ram ( release the ram block )
PostPosted: Fri Feb 28, 2020 12:59 pm     Reply with quote

Hi everybody !

I need help. I have very big integer array and I use it only in a certain part of the program then I have to release the array because i have not much more space.

Attention guys I don't mention the fill arrays zero. It should be as never created, so the compiler behave like it empty and use for different variables.

Summary i want to delete the array that I created.

I'm about to go crazy. I am waiting for your advice.
Thank you for now.
temtronic



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

View user's profile Send private message

PostPosted: Fri Feb 28, 2020 1:22 pm     Reply with quote

You'll need to declare that array within the function that uses it as 'global' variables, once used are always 'used'.
The 'hardware solution is to use a 'bigger' PIC that is pin compatible, from the same family.
fy9466



Joined: 28 Feb 2020
Posts: 2

View user's profile Send private message Send e-mail

...
PostPosted: Fri Feb 28, 2020 1:52 pm     Reply with quote

Guy is there anyone to help me !

My request is quite basic.

I want to delete the big array for save my ram space at the execution.

That's all it.
jeremiah



Joined: 20 Jul 2010
Posts: 1329

View user's profile Send private message

Re: ...
PostPosted: Fri Feb 28, 2020 2:34 pm     Reply with quote

fy9466 wrote:
guy is there anyone to help me !

My request is quite basic

I want to delete the big array for save my ram space at the execution

that's all it


The request is not basic at all. You have options, but they all have pros and cons:

1. Use an external memory for the array. PRO: you can control usage of the memory directly. CON: extra part and logic.

2. Do what temtronic suggested and move your array as far into your calling tree as possible (right next to the calculations). Don't pass it into any parameters for any functions and only call this function from the main. PRO: CCS will handle it for you. CON: It requires a lot of tricky program logic to pull off correctly EX:

Code:

#include <33ep128gp506.h>

void big_var_processing(/*your params here*/){
   unsigned int thing1[2000] = {100};
   // Do your stuff, any functions you call here or that call this function
   // cannot share this variable space.
}

void all_your_other_stuff(/*your params here*/){
   unsigned int thing2[100] = {20};
   // The rest of your program logic.  Treat this like your new main, just
   // pass out data so that big_var_processing can take it in and process it
   // and pass in the results from big_bar_processing so it can be evaluated
   // as needed
}

void main()
{
   big_var_processing(/*your params here*/);
   all_your_other_stuff(/*your params here*/);

}


You can see doing it this way reuses your memory.
Code:

1002-1FA1 big_var_processing.thing1
1002-10C9 all_your_other_stuff.thing2
4F80-4FFF _STACK_


3. Use heap memory (malloc/free). PRO: you can control when memory is used and released. CON: you have to do this for any variables you want to share memory with the big array or else this method doesn't help at all. Additionally you have to manually remember to correctly free everything or you get memory leaks and eventually run out of memory to use. It is also (relatively) slow to use heap memory instead of stack memory due to the extra processing heap memory needs to work. Your memory usage will still look high because the compiler will have to reserve a large block of memory to cover your needs.
Ttelmah



Joined: 11 Mar 2010
Posts: 19375

View user's profile Send private message

PostPosted: Sat Feb 29, 2020 1:16 am     Reply with quote

Understand something about RAM usage:

Code:

int an_array[100];

void main(void)
{

}
//declared like this 'an_array' is global and can be used anywhere. It's space
//is permanently used.

void main(void)
{
    int an_array[100];

}
//declared like this, 'an_array' exists so long as 'main' or any subroutine
//called by 'main' exists. So is effectively 'permanent'.

void my_sub(void)
{
    int an_array[100];
}

void my_second_sub(void)
{
    int a_second_array[100];
}

void main(void)
{
     //do something
     my_sub();
     my_second_sub();
}
//declared like this, the space used by 'an_array', is _only_ reserved,
//while the code is running 'my_sub'. The same space can be re-used
//in other subroutines, so 'a_second_array', can re-use the space (and
//will do so).

You need to start to declare variables _locally_ for routines. Then the space
can be re-used in other routines.
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