So I have a Bunch of commonly used char arrays to build commands in my library. So to preserve memory, I have them put into flash, via PROGMEM ext,

typedef const char PROGMEM ProgChar;
ProgChar AT[] = "AT";
ProgChar AT_RST[] = "RST";

Then in my program I have it all go out to A port via:

*hws << AT << PLUS << CWMODE << EQUAL; //hws can be any Print type,

This is handled by overloading the << operator;

static Print &operator <<(Print &obj, ProgChar* arg) { 
  char pbuffbuffer[12]; //create a buffer,
  obj.print(loadProgmemVal(arg,pbuffbuffer)); //Load it, and then pass to obj print method.
  return obj; 
}

But this also overloads the << operator for all const char* Which makes me have to do a workaround:

hws->print(1); //HACK

At first, I thought I would overload the operator to handle both a char* and a Prog Char Object, But unfortunately, they are both treated as the same thing at run-time which makes that idea useless.

So after snooping I find the __FlashStringHelper type and macro. Which would allow me to have a sepperate type for these variables, and allow me to overload.

But the problem is, I cant find a good way to Create these:

const __FlashStringHelper MYVAR = F("Some text to be progchared");

Does not compile =/

Now I could probably make some helper method to load them all in, but that is just patching a hack with another hack... Is there any Clean way to do this? So I can use << for all types,

*hws << AT << PLUS << CWMODE << EQUAL << 1 << "\r\n"; //1 and Return break...
share|improve this question
    
Idea: Is the objects in Flash at a lower PTR value then Objects in Ram, and ifso, what is then cutoff? EG: 0-04f00 = Flash 04f01-fffff = Ram, ext. – Steven Venham Jan 3 at 17:49

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.