ceckovy kviz
Jan Waclawek
konfera na efton.sk
Neděle Září 3 23:00:41 CEST 2023
Mam funkciu
void LcdBPrint(uint32_t x, uint32_t y, char * s);
ktora vypise retazec na LCD s rozmermi LCD_XMAX, LCD_YMAX na poziciu x, y
pixelov od laveho horneho rohu.
Vypisuje to neproporcionalnym fontom s rozmermi znaku FONT_XSIZE,
FONT_YSIZE.
Z nejakych dovodov chcem vypisovat retazce zarovnane jeden za druhym; ale
niekedy chcem vypisovat retazce pod seba zarovnane na pravy okraj. To prve
vedie na volania typu:
LcdBPrint(doteraz_napocitane_znaky_od_laveho_okraja * FONT_XSIZE, riadok
* FONT_YSIZE , retazec);
a to druhe na
LcdBPrint(LCD_XMAX - strlen(retazec) * FONT_XSIZE, riadok * FONT_YSIZE,
retazec);
Vravim si, takto je to dost neprehladne, a pritom sa tam to nasobenie furt
opakuje. A tiez, tie dve veci su navzajom dostatocne podobne. Tak co keby
ze si napisem makro, do ktoreho bud zadam kladne x, co znamena pocet
znakov od laveho okraja, alebo zaporne x, co znamena pocet znakov od
praveho okraja:
#define LcdBXPrint(xx, yy, s) LcdBPrint( (((xx) < 0) ? LCD_XMAX : 0) +
(xx) * FONT_XSIZE, (yy) * FONT_YSIZE, s)
Ked pisem zlava, tak mam
LcdBXPrint(doteraz_napocitane_znaky_od_laveho_okraja, riadok, retazec);
co je pekne, prehladne, a funguje. Ale ked pisem zlava, tak
LcdBXPrint(-sizeof(retazec), riadok, retazec);
nefunguje.
Preco?
wek
Další informace o konferenci Hw-list