Du hast nicht sehr viel Hintergrundinfo geliefert, deshalb muss ich auf Annahmen bauen.
Delphi-Quellcode:
type
TChannel = array [0..FPGAMax-1] of Word;
TCustArr = array [1..2] of TChannel;
var
FPGAData : TCustArr;
AnalogArr : TChannel;
DataArr : TChannel;
procedure ExtractData(fpga: TCustArr; analog, data: TChannel; iPort, iWidth, n: Cardinal);
var
i: Integer;
begin
for i := 0 to Pred(n) do
begin
Move(fpga[iPort, i * (iWidth + 4)], analog[i * iWidth], iWidth shl 1);
Move(fpga[iPort, i * (iWidth + 4) + iWidth], data[i shl 2], iWidth shl 1);
end;
end;
// Aufruf:
var
n: Cardinal;
begin
n := inBuf div (iWidth + 4);
ExtractData(FPGAData, AnalogArr, DataArr, iPort, iWidth, n);
end;
Getippt und nicht getestet.
Warum legst du den Speicher statisch an?
Freundliche Grüße