bei einem Programm für die Steuerung von mehreren Heizungspumpen mit dem Raspberry bekomme ich einen Sigsegv Fehler wenn ich von einem SpinEdit den Wert an die delay Procedure übergebe. Wenn ich den Wert manuell im delay eintrage, funktioniert das Programm problemlos. Zuerst dachte ich, es hängt damit zusammen, dass SpinEdit Longint liefert und delay word erwartet. In einem Testprogramm nur mit einem SpinEdit und delay funktioniert dies jedoch. Auch Typumwandlung brachte nichts.
Jetzt vermute ich, dass ich evtl. etwas bei der Übertragung sPIN := PIN falsch mache (PChar nach string [2]) und dadurch im Speicher etwas überschrieben wird. Der Wert im sPIN kommt jedoch korrekt an. Dennoch könnte es irgendwie damit zusammenzuhängen.
Hat jemand eine Idee, wo der Fehler liegen könnte?
Vielen Dank.
Code: Alles auswählen
procedure GPIOSwitchRelais (PIN : pChar; PINOn : boolean);
var
fileDesc: integer;
sPIN : string [2];
begin
sPIN := PIN;
delay (Config.SpinEditSwitchDelay.Value);
if PINOn then
begin
{ Relais An (Low aktiv) }
try
fileDesc := fpopen('/sys/class/gpio/gpio'+sPIN+'/value', O_WrOnly);
gReturnCode := fpwrite(fileDesc, PIN_OFF[0], 1);
finally
gReturnCode1 := fpclose(fileDesc);
end;
end
else
begin
{ Relais aus }
try
fileDesc := fpopen('/sys/class/gpio/gpio'+sPIN+'/value', O_WrOnly);
gReturnCode := fpwrite(fileDesc, PIN_ON[0], 1);
finally
gReturnCode1 := fpclose(fileDesc);
end;
end;
end;