|The stupid question is the question not asked|
Re^6: Call function no more than every 0.1 secondsby jmlynesjr (Chaplain)
|on Aug 14, 2020 at 00:24 UTC||Need Help??|
Sorry, I know this is not ArduinoMonks, but to close the loop... From: "Arduino Projects for Amateur Radio" by Jack Purdum, W8TEE (Any book by Jack is an excellent reference)
The F() Macro
Suppose you have the following statement in your program code:Serial.println("Don't forget to activate all of the external sensors.");
The message contained within the double quotation marks in the statement is called a string literal. A string literal is a sequence of text characters that does not change as the program executes. These string literals are imbedded in your program's memory space and, hence, do use up Flash memory. The problem is that the compiler sees these string literals and copies them into SRAM just before the program starts executing! In other words, the same string literal is duplicated in Flash and SRAM memory! With the message above, you just wasted 53 bytes of precious SRAM. However, if you change the statement to:Serial.println(F("Don't forget to activate all of the external sensors.");
Note that the string literal is contained within the parentheses of the F() macro. Without going into the mechanics of how this works, the end result is that the F() macro prevents the compiler from copying the string literal to SRAM.
There's never enough time to do it right, but always enough time to do it over...