Dobrý den,
u funkce Memcpy je v manuálu napsáno:
POZOR ! Proměnné source a dest nesmí být typu BOOL ! Funkce Memcpy nebude fungovat správně, pokud je některý z parametrů source resp. dest typu BOOL.
Co to znamená, že nebude fungovat správně? Dojde pouze k vyčtení/přepsání následujících cizích registrů z důvodu přesahu bytu(což by mě nevadilo), nebo se BOOL vůbec, ani ve struktuře, nesmí použít?
Děkuji.
Pelán
Odpovědi 1
Dobrý den, pro funkci Memcpy je důležité, aby na vstupně výstupní proměnné byl typ, který není BOOL nebo pole BOOL. BOOL a pole BOOL mají totiž bitové reference místo bytových, jinými slovy jejich pointery jsou 8x větší. Struktury obsahující BOOLy nebo BOOLeovská pole se kopírují správně, vzhledem k tomu, že jsou vždy zarovnané na celé byty a ukazatele na ně jsou taktéž bytové.
Viz příklad níže:
TYPE
TS : STRUCT
a : BOOL;
END_STRUCT;
END_TYPE
PROGRAM prgMain
VAR
t1 : TS;
t2 : BYTE;
END_VAR
//dobre
Memcpy(length := sizeof(TS), source := void(t1), dest := void(t2));
//spatne - zde se data vezmou ze spatne adresy
Memcpy(length := sizeof(TS), source := void(t1.a), dest := void(t2));
END_PROGRAM
Tento dotaz je vyřešený.