Ještě mám další trochu komplikovanější dotaz, který je nad mé síly a dost dobře nechápu proč to kompilátor po mě chce takhle.
Mám velkej kus kódu kterej dělá API pro obsluhu FT800 s LCD.
Text se do toho posílá funkcí
API_CMD_TEXT(scrRows[lineIdx].x, scrRows[lineIdx].y, 14, 0, scrRows[lineIdx].lineStr);
scrRows] je pole o 11 položkách podle počtu řádku, ale to zároveň struktura pojmenovaná jako aLine
typedef struct linet
{
int16_t x; //X position of text
int16_t y; //Y position of text
char lineStr[30]; //Text string
}aLine;
Zdrojový data pro to co se má zobrazit na LCD pak jsou zadefinovaný takto:
static const aLine M9_L1 = {15, 120, "Text on LCD"}; //X position, Y position, Text
// pak vlastně co chci napsat tak stačí jen zkopírovat kvůli většímu množství různých textů ze struktury do struktury
scrRows[0] = M9_L1; //Prekopirovani toho co chci zobrazit
API_CMD_TEXT(scrRows[0].x, scrRows[0].y, scrRows[0].lineStr);
Toto všechno funguje suprově, ale je to jako konstanta ve Flash paměti což já u některých věcí nepotřebuju. Potřebuju dynamicky měnit text a měnit jeho pozici. TAkže zkouším to zadefinovat jen jako
aLine M9_L1 = {Xpos, Ypos, "Text on LCD"};
A tady narážím na to, že kompilátor XC8 hlásí “Constant expression required”
Já s těma strukturama nemám vůbec zkušenosti a nepoužívám to. Teď musím a nemám tušení která bije.
Úplně ideálně bych potřeboval zobrazitelný text nasměrovat pointerem na pole se znakama, který budu pak dál měnit.
Naprd je, že do téhle knihovny nemůžu hrabat a musím ji použít jak je. Pak bych si to přepsal pro mě stravitelným způsobem.
Děkuji za radu, ztrácím se v tom.