Posted by Greg Fletcher on October 24, 2010 at 3:27pm
This is a general programing issue, not flying. I was adding some functions to a experimental version of 2.7. Things didn't work so I started adding Serial.print statements at certain points for de-bugging purposes. Ther was a lot of stuff printing on the serial monitor so I started adding long lines of *,#,% ect. to make the lines more visible as they rolled by. Strange things started happening that were logically impossible. The more de-bugging flags I added it got worse and then it just locked up after about 10 sec. I saw that I was using a lot of RAM (from the freeRAM() function), and when it got down to 106 bytes it would just lock up. I didn't understand the quickly increasing RAM usage. Then I did a little testing and quickly found that every char you have in a Serial.print statement uses a byte of RAM. I had assumed that they would be in program space. I commented out a lot of unnecessary Serial.print statements and gained 400 bytes of RAM. I tried putting the strings in the defines and it didn't have very much affect. It even used a little more. I don't know if any thing can be done about this. I put the freeRAM() in my Ardustation and saw that it was down to 213 bytes out of 2048, and I wanted to ad more stuff. Will have to abbreviate the lcd.print statements as they seem to work the same way. There must be a way to put char arrays into flash mem but that's way beyond my skills. My only C experience is with the Ardupilot, there's a lot I don't know. Maybe it's not fixable? Any one here know?
You need to be a member of diydrones to add comments!
The _P means its looking for a pointer to flash memory.
If you include:
#include
#include
AP_Common.h is part of the Mega Libraries. You should have access to print_f and the PSTR macro. Maybe Michael Smith can correct me if I've missed something.
Jason
Replies
Serial.printf_P(PSTR("r: %d\tp: %d\t"), (roll_sensor/100), (pitch_sensor/100));
The _P means its looking for a pointer to flash memory.
If you include:
#include
#include
AP_Common.h is part of the Mega Libraries. You should have access to print_f and the PSTR macro. Maybe Michael Smith can correct me if I've missed something.
Jason