Тема: RS - 232 Програма завешується помилкою
Організовано обмін з мікроконтролером по СОМ порту.
Прога лягає: "Access violation fat address 00403694"
Ось такий й прийом:
Cnt:=0;
while true do
begin
TransMask:=0;
WaitCommEvent(CommHandle,TransMask,@Ovr);
if (TransMask and EV_RXCHAR)=EV_RXCHAR then
begin
ClearCommError(CommHandle,Errs,@Stat);
Kols := Stat.cbInQue;
ReadFile(CommHandle,Res,Kols,Kols,@Ovr);
if Kols>0 then
begin
Move(Res,Buff[Cnt],Kols);
Inc(Cnt,Kols);
if Cnt > 64 then
begin
GetMem(Reciv,sizeof(Cnt));
Move(Buff[0],Reciv^,Cnt);
PostMessage(Form1.Handle,rx_bup,Integer(Reciv),Cnt);
Cnt:= 0;
end;
end;
end;//mask
end;//while
Обробляю прийняте:
Bf := Pointer(msg.WParam);
Cnt := msg.LParam;
S := '';
for i := 0 to Cnt-1 do
begin
S := S + Chr(Byte(Bf^));
inc(Integer(Bf));
end;
if Form1.checkbox1.Checked then Form1.Memo2.lines.Add(S);
FreeMem(Pointer(msg.WParam),msg.LParam);
Дані передаються в основний потік і обробляються. Краш кажись при вивільненні памяті, ЧОМУ?