ReefAngel.ShowInterface() memory issue?
ReefAngel.ShowInterface() memory issue?
I can't seem to build any of the SketchBook code from curtbinder. All of them exceed the maximum size limit. However when I comment out the line ReefAngel.ShowInterface() the size of the source code drops by approximately 20Kb. Why does the ReefAngel.ShowInterface() function require so much memory? Am I doing something wrong?
Thanks
Thanks
Re: ReefAngel.ShowInterface() memory issue?
It's the function that takes care of everything for you, from simply drawing the interface to checking all timers and turning relays on/off.
If you are exceeding in memory usage, try not using some of the other features, for example: Date/Time setup (which uses about 2K of memory) and some other ones.
This might help you:
https://github.com/curtbinder/ReefAngel ... Features.h
http://forum.reefangel.com/viewtopic.php?f=12&t=94
If you are exceeding in memory usage, try not using some of the other features, for example: Date/Time setup (which uses about 2K of memory) and some other ones.
This might help you:
https://github.com/curtbinder/ReefAngel ... Features.h
http://forum.reefangel.com/viewtopic.php?f=12&t=94
Roberto.
Re: ReefAngel.ShowInterface() memory issue?
ShowInterface displays the main screen and draws the menu.javisaman wrote:I can't seem to build any of the SketchBook code from curtbinder. All of them exceed the maximum size limit. However when I comment out the line ReefAngel.ShowInterface() the size of the source code drops by approximately 20Kb. Why does the ReefAngel.ShowInterface() function require so much memory? Am I doing something wrong?
Thanks
The way the compiler works is if a function is not called, it is stripped out of the library. If you remove ShowInterface(), the relays will not get toggled on/off, the wifi requests will not be processed, the overheat checks will not be processed, the main display will not be updated, you will not have a menu, etc.
The more functions the controller has in the PDE file, the larger the memory footprint will be. If you include the Date/Time setup, that takes up 1900 bytes (give or take a few). If you enable wifi, that takes up a lot of memory usage too. There are some ways to improve the memory size.
Could you post your complete PDE file so we can take a look at it and see what all is going on?
Also, what version of the libraries are you using?
curt
Re: ReefAngel.ShowInterface() memory issue?
It's pretty barebones.
I'm using development libraries 0.8.5.15
In the ReefAngel_Features.h file I have the following defined
Do I have too much enabled? At least those are all/most of the functions I want.
Code: Select all
//Custom Reef Angel Code
//standard libs
/*
#include <OneWire.h>
#include <Wire.h>
#include <EEPROM.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <ReefAngel.h>
#include <avr/pgmspace.h>
*/
//dev libs
#include <ReefAngel_Features.h>
#include <ReefAngel_Globals.h>
#include <ReefAngel_Wifi.h>
#include <Wire.h>
#include <OneWire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <ReefAngel_EEPROM.h>
#include <ReefAngel_NokiaLCD.h>
#include <ReefAngel_ATO.h>
#include <ReefAngel_Joystick.h>
#include <ReefAngel_LED.h>
#include <ReefAngel_TempSensor.h>
#include <ReefAngel_Relay.h>
#include <ReefAngel_PWM.h>
#include <ReefAngel_Timer.h>
#include <ReefAngel_Memory.h>
#include <ReefAngel.h>
#define WhiteLED 1
#define BlueLED 2
#define FugeLight 3
#define Vortech 4
#define ATO 5
#define Return 6
#define Heater 7
#define Chiller 8
#define KoraliaTank 9
#define KoraliaFuge 10
#define Skimmer 11
#define LiterMeter 12
#define Feeder 13
#define WaterChangePump 14
#define WaterChangeHeat 15
prog_char menu0_label[] PROGMEM = "Feed (sinking)";
prog_char menu1_label[] PROGMEM = "Feed (floating)";
prog_char menu2_label[] PROGMEM = "Water Change";
prog_char menu3_label[] PROGMEM = "Manage LED Lighting";
prog_char menu4_label[] PROGMEM = "Manage Fuge Light";
prog_char menu5_label[] PROGMEM = "Manage Temperature";
prog_char menu6_label[] PROGMEM = "Calibrate Temp Probe";
prog_char menu7_label[] PROGMEM = "Calibrate pH Probe";
prog_char menu8_label[] PROGMEM = "Date/Time";
void setup(){
ReefAngel.Init();
ReefAngel.LCD.DrawText(200, 26, 10, 10, "Reef (Beta)");
ReefAngel.Relay.On(Return);
ReefAngel.Relay.On(LiterMeter);
ReefAngel.Relay.On(Skimmer);
ReefAngel.Relay.On(Vortech);
ReefAngel.Relay.On(KoraliaTank);
ReefAngel.Relay.On(ATO);
}
void loop() {
ReefAngel.ShowInterface();
}
void DrawCustomMain(){
ReefAngel.LCD.DrawText(200, 26, 30, 2, "Reef");
ReefAngel.LCD.DrawDate(6, 119);
pingSerial();
ReefAngel.LCD.DrawMonitor(15, 63, ReefAngel.Params,
// ReefAngel.PWM.DaylightPWMValue, ReefAngel.PWM.ActinicPWMValue); //standard
ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue()); //development
pingSerial();
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay != ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox(12, 93, TempRelay);
#ifdef RelayExp
TempRelay = ReefAngel.Relay.RelayDataE[0];
TempRelay &= ReefAngel.Relay.RelayMaskOffE[0];
TempRelay != ReefAngel.Relay.RelayMaskOnE[0];
ReefAngel.LCD.DrawOutletBox(12, 105, TempRelay);
#endif RelayExp
}
void DrawCustomGraph(){
}
In the ReefAngel_Features.h file I have the following defined
Code: Select all
#define DateTimeSetup
#define ATOSetup
#define StandardLightsSetup
#define DirectTempSensor
#define wifi
#define DisplayLEDPWM
#define RelayExp
#define InstalledRelayExpansionModules 1
Re: ReefAngel.ShowInterface() memory issue?
There are some things that you have that shouldn't be there. It looks like you converted your PDE from the standard libraries to the development libraries. Some stuff can be taking up memory. Here's a simpler PDE file for you (but not much simpler than what you have)javisaman wrote:It's pretty barebones.
Do I have too much enabled? At least those are all/most of the functions I want.
Code: Select all
//Custom Reef Angel Code
//dev libs
#include <ReefAngel_Features.h>
#include <ReefAngel_Globals.h>
#include <ReefAngel_Wifi.h>
#include <Wire.h>
#include <OneWire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <ReefAngel_EEPROM.h>
#include <ReefAngel_NokiaLCD.h>
#include <ReefAngel_ATO.h>
#include <ReefAngel_Joystick.h>
#include <ReefAngel_LED.h>
#include <ReefAngel_TempSensor.h>
#include <ReefAngel_Relay.h>
#include <ReefAngel_PWM.h>
#include <ReefAngel_Timer.h>
#include <ReefAngel_Memory.h>
#include <ReefAngel.h>
#define WhiteLED 1
#define BlueLED 2
#define FugeLight 3
#define Vortech 4
#define ATO 5
#define Return 6
#define Heater 7
#define Chiller 8
#define KoraliaTank 9
#define KoraliaFuge 10
#define Skimmer 11
#define LiterMeter 12
#define Feeder 13
#define WaterChangePump 14
#define WaterChangeHeat 15
void setup(){
ReefAngel.Init();
ReefAngel.Relay.On(Return);
ReefAngel.Relay.On(LiterMeter);
ReefAngel.Relay.On(Skimmer);
ReefAngel.Relay.On(Vortech);
ReefAngel.Relay.On(KoraliaTank);
ReefAngel.Relay.On(ATO);
}
void loop() {
ReefAngel.ShowInterface();
}
void DrawCustomMain(){
ReefAngel.LCD.DrawText(200, 26, 30, 2, "Reef");
ReefAngel.LCD.DrawDate(6, 119);
pingSerial();
ReefAngel.LCD.DrawMonitor(15, 63, ReefAngel.Params,
// ReefAngel.PWM.DaylightPWMValue, ReefAngel.PWM.ActinicPWMValue); //standard
ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue()); //development
pingSerial();
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay != ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox(12, 93, TempRelay);
#ifdef RelayExp
TempRelay = ReefAngel.Relay.RelayDataE[0];
TempRelay &= ReefAngel.Relay.RelayMaskOffE[0];
TempRelay != ReefAngel.Relay.RelayMaskOnE[0];
ReefAngel.LCD.DrawOutletBox(12, 105, TempRelay);
#endif RelayExp
}
void DrawCustomGraph(){
}
Code: Select all
#define ATOSetup
#define StandardLightsSetup
#define DirectTempSensor
#define wifi
#define DisplayLEDPWM
#define RelayExp
#define InstalledRelayExpansionModules 1
I know that having wifi enabled uses up a lot of memory. Also my setup menus use a lot of memory too.
Do you use Dave's Client Suite application to get data from the RA? If so, his next release will have the ability to update the memory values via wifi thus elminating the need for the setup menus. You can then enable the SIMPLE_MENU and remove out a lot of the setup screens that are not needed. It's just a suggestion.
curt
Re: ReefAngel.ShowInterface() memory issue?
Thank you curt.
I removed some stuff from the features file as you mentioned. I'm trying do make custom main and menus. I think I was using a tutorial for the standard libraries for the menus. I don't know if there is a better way using the development libraries. Comments do not contribute to the memory do they?
I removed some stuff from the features file as you mentioned. I'm trying do make custom main and menus. I think I was using a tutorial for the standard libraries for the menus. I don't know if there is a better way using the development libraries. Comments do not contribute to the memory do they?
Re: ReefAngel.ShowInterface() memory issue?
I just realized the "CUSTOM_MENU" feature hasn't been implemented yet. I'm sticking with the SIMPLE_MENU now. There is also a compile error if you enable the DateTimeSetup feature and the SIMPLE_MENU. Directives for DateTimeSetup are need around line 1831 in ReefAngel.cpp
Re: ReefAngel.ShowInterface() memory issue?
Comments do not use up any space. They get stripped out by the compiler so you can add as many comments in as you would like.javisaman wrote:I just realized the "CUSTOM_MENU" feature hasn't been implemented yet. I'm sticking with the SIMPLE_MENU now. There is also a compile error if you enable the DateTimeSetup feature and the SIMPLE_MENU. Directives for DateTimeSetup are need around line 1831 in ReefAngel.cpp
RAGen is a good program to start with generating your standard PDE file for use with the development libraries. It explains what each feature and about how much memory it uses. It's not been updated in a while with some of the newer stuff, so you will have to manually add stuff in like you currently do.
Yes, CUSTOM_MENU hasn't been implemented yet. I'm trying to determine a "good" and simple way to handle it.
I'm not familiar with any errors with having DateTimeSetup and SIMPLE_MENU both enabled. That's how I'm running my unit. I'll look into it though and see what I can come up with.
curt
Re: ReefAngel.ShowInterface() memory issue?
You will want to update your libraries to the latest. Make sure that Arduino is closed before you update the libraries otherwise it won't recognize the changes. I have been updating the code pretty regular lately so things have been changing. Right now, line 1831 you were talking about references PWM expansion device code.
What version / commit of the master branch do you have?
curt
What version / commit of the master branch do you have?
curt
Re: ReefAngel.ShowInterface() memory issue?
I guess I'll try the RAGen. I don't have any problems coding, but it just takes me a while to figure out what the library functions do, like you mentioned.
Sorry I meant 1821 in ReefAngel.cpp
i simply changed it to
Sorry I meant 1821 in ReefAngel.cpp
Code: Select all
case MainMenu_DateTime:
{
SetupDateTime();
break;
}
Code: Select all
#ifdef DateTimeSetup
case MainMenu_DateTime:
{
SetupDateTime();
break;
}
#endif DateTimeSetup
Re: ReefAngel.ShowInterface() memory issue?
binder wrote: What version / commit of the master branch do you have?
curt
I use the RA library updater. I'm using development libraries 0.8.5.15
Re: ReefAngel.ShowInterface() memory issue?
Ok. 0.8.5.15 hasn't "officially" been released yet, it's in my main branch and I'm getting close to calling it official. So no worries there.javisaman wrote:binder wrote: What version / commit of the master branch do you have?
curt
I use the RA library updater. I'm using development libraries 0.8.5.15
curt