Hallo,
mir sind zwei Dinge aufgefallen:
1. folgendes lässt sich nicht kompilieren, sondern liefert einen "Error: Pipe: type not supported":
2. Bei dem folgenden Beispiel rechnet er im Prozess teilweise ungenau. Er springt von 0.007 auf 0.00799999... Ich hätte vielleicht noch akzeptiert, dass er bei 0.007 + 0.001 IMMER ungenau rechnet, aber dem ist nicht so. Siehe Beispiel (nur im Simulator getestet).
Robert
mir sind zwei Dinge aufgefallen:
1. folgendes lässt sich nicht kompilieren, sondern liefert einen "Error: Pipe: type not supported":
Code
var
f : fix64;
p : pipe[10] of fix64;
...
PipeSend(p, f);
f : fix64;
p : pipe[10] of fix64;
...
PipeSend(p, f);
2. Bei dem folgenden Beispiel rechnet er im Prozess teilweise ungenau. Er springt von 0.007 auf 0.00799999... Ich hätte vielleicht noch akzeptiert, dass er bei 0.007 + 0.001 IMMER ungenau rechnet, aber dem ist nicht so. Siehe Beispiel (nur im Simulator getestet).
Robert
Code
program bla;
Device = mega128, VCC=5;
Import
SysTick,
SerPort;
From System import
Processes,
Pipes,
Fix64,
longword;
from SysTick import
SystemTime32;
Define
ProcClock = 16000000; {Hertz}
SysTick = 10; {msec}
StackSize = $0100, iData;
FrameSize = $0100, iData;
Scheduler = 100, 100, iData;
{----------------------------------------------------------------------------}
SerPort = 57600, Stop2; {Baud, StopBits|Parity}
RxBuffer = 8, iData;
TxBuffer = 8, iData;
uses ;
Implementation
{$IDATA}
const
type
tt = record
f1 : fix64;
f2 : fix64;
end;
var
t : tt;
u : tt;
pt: pipe[10] of tt;
p : pipe[10] of fix64;
f : Fix64;
g : fix64;
s : string[30];
process f_inc(100, 100 : iData);
begin
t.f1 := t.f1 + 0.001; //hier rechnet er teilweise ungenau
repeat until (pipesend(pt, t));
end;
begin
ENABLEINTS;
WriteLn(SerOut, 'Los');
f := 0.007;
g := f + 0.001; //hier rechnet er richtig
s := Fix64ToStr(g);
t.f1 := 0;
// pipesend(p, f); //Compiler Error
loop
if PipeStat(pt) > 0 then
if PipeRecv(pt, u) then
s := Fix64ToStr(u.f1);
WriteLn(SerOut, s);
endif;
endif;
endloop;
end bla.
Device = mega128, VCC=5;
Import
SysTick,
SerPort;
From System import
Processes,
Pipes,
Fix64,
longword;
from SysTick import
SystemTime32;
Define
ProcClock = 16000000; {Hertz}
SysTick = 10; {msec}
StackSize = $0100, iData;
FrameSize = $0100, iData;
Scheduler = 100, 100, iData;
{----------------------------------------------------------------------------}
SerPort = 57600, Stop2; {Baud, StopBits|Parity}
RxBuffer = 8, iData;
TxBuffer = 8, iData;
uses ;
Implementation
{$IDATA}
const
type
tt = record
f1 : fix64;
f2 : fix64;
end;
var
t : tt;
u : tt;
pt: pipe[10] of tt;
p : pipe[10] of fix64;
f : Fix64;
g : fix64;
s : string[30];
process f_inc(100, 100 : iData);
begin
t.f1 := t.f1 + 0.001; //hier rechnet er teilweise ungenau
repeat until (pipesend(pt, t));
end;
begin
ENABLEINTS;
WriteLn(SerOut, 'Los');
f := 0.007;
g := f + 0.001; //hier rechnet er richtig
s := Fix64ToStr(g);
t.f1 := 0;
// pipesend(p, f); //Compiler Error
loop
if PipeStat(pt) > 0 then
if PipeRecv(pt, u) then
s := Fix64ToStr(u.f1);
WriteLn(SerOut, s);
endif;
endif;
endloop;
end bla.