Diskuse Elektrika.cz

HYBRIDNÍ zóna => Technická podpora výrobce TECO Kolín radí odborníkům => Téma založeno: Luboš Zelinka 09.12.2012, 22:50



Název: Pracuje Mosaic správně s polem ukazatelů na BOOL?
Přispěvatel: Luboš Zelinka 09.12.2012, 22:50
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.


Název: Re: Pracuje Mosaic správně s polem ukazatelů na BOOL?
Přispěvatel: Milan Bydžovský 10.12.2012, 07:38
V překladači je skutečně chyba.  :-\

Pokusíme se tento problém, co nejdříve napravit.


Název: Re: Pracuje Mosaic správně s polem ukazatelů na BOOL?
Přispěvatel: Luboš Zelinka 12.12.2012, 12:58
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.



Název: Re: Pracuje Mosaic správně s polem ukazatelů na BOOL?
Přispěvatel: Milan Bydžovský 13.12.2012, 09:11
Na problém se určitě podíváme. Děkujeme za report.