Pracuje Mosaic správně s polem ukazatelů na BOOL?
(1/1)
Luboš Zelinka:
Dobrý den,
řekl bych, že Mosaic má problém s polem ukazatelů na BOOL (všechny ostatní typy se zdají v pořádku). Je to názorně vidět v automaticky generovaném assembler kódu (z ST jazyka):
#srcline 36 ; pole_bool[1] := adr(b1);
LEAX b1
#debug pointer b1
LEAX pole_bool
WRIL
#debug_left pointer pole_bool[1]
#srcline 37 ; pole_bool[2] := adr(b2);
LEAX b2
#debug pointer b2
LEAX pole_bool
ADD 1 ; Index
WRIL
V předposledním řádku je přičtena pouze "1", což by znamenalo, že šířka adresy je pouze 1byte. Což není, protože je 4byte (Foxtrot CPU 1016). To dokazuje i následná instrukce WRIL, která je 32bitová (4byte). V praxi to znamená, že zápis do prvních 4 prvků pole přepisuje v paměti adresu prvním prvku pole.
Je to možné nebo dělám něco špatně já?
Předem děkuji.
Milan Bydžovský:
V překladači je skutečně chyba. :-\
Pokusíme se tento problém, co nejdříve napravit.
Luboš Zelinka:
Ok, díky. Když už budete šahat do překladače, ošetřete rovnou i to, že následující konstrukce způsobí zhroucení Mosaicu při překladu.
VAR
test : (a, b);
END_VAR
Ano, vím, že je to nesmyslná konstrukce, ale i tak by neměla způsobit pád systému.
Milan Bydžovský:
Na problém se určitě podíváme. Děkujeme za report.
Navigace
[0] Index zpráv