I have a table that defines symbols appearance on a 5×7 dot display. Something like:
extern UINT8 symbols[][5] = {
{0x0,0x0,0x0,0x0,0x0},
{0x0,0x0,0x5F,0x0,0x0},
{0x0,0x7,0x0,0x7,0x0},
{0x14,0x7F,0x14,0x7F,0x14}, // etc.
The leading part of the table matches ASCII table, followed by a set of special symbols, e.g. an arrow, or a check-mark. To reference those I have a list of macros:
#define SYMBOL_LEFT_ARROW 120 // 120 is the entry in the table
#define SYMBOL_RIGHT_ARROW (SYMBOL_LEFT_ARROW+1)
#define SYMBOL_UP_ARROW (SYMBOL_RIGHT_ARROW+1)
Now I need to say something like (won’t compile):
const char * const message = "Next" + SYMBOL_RIGHT_ARROW;
Question: How do I turn SYMBOL_RIGHT_ARROW into “\x79”, or whole string into "Next\x79" AT COMPILE TIME so I can have the string in R/O section?
Freescale HC08 C-compiler.
You can concatenate strings in C source:
To do that with your symbols is a lot of work, but maybe you can live with that.
UPDATE
If you can make the value of the symbol match its position in the symbol table (120 match “\x78”), try these macros
Edit (SO doesn’t like my browser)
After macro expansion
SYMBOL_NUM(32)is transformed to a integer literal (0x78); andSYMBOL_STR(78)is transformed to a string literal ("\x78").You can use the literals as if you had typed them in.