Вот эта программа зацикливается, хотя FreePascal компилирует так как и должно работать
program RGB_PWM_Mutator;
Procedure Delay_ms(i:Integer); Begin WriteLn('Delay(',i,')'); End;
Type
Intensity = Byte;
RGB = Record
r,g,b:Intensity;
End;
Tcol = Record
color:RGB; Delay:Byte;
End;
Const
Col_Sz = 6;
Col:Array[0 .. Col_Sz] of Tcol = (
(color:(r:255; g: 0; b: 0); Delay:3), (* 0 *)
(color:(r:255; g: 30; b: 0); Delay:3), (* 1 *)
(color:(r:255; g: 70; b: 0); Delay:3), (* 2 *)
(color:(r: 0; g: 0; b: 0); Delay:3), (* 3 *)
(color:(r: 51; g:153; b:255); Delay:3), (* 4 *)
(color:(r: 0; g: 0; b:255); Delay:3), (* 5 *)
(color:(r:100; g: 0; b:255); Delay:3) (* 6 *)
);
(* ------------------------------------------------------------------------- *)
Procedure colorSetHW(color:RGB);
Begin
With color Do Begin
End;
End;
(* ------------------------------------------------------------------------- *)
Function mapIntensityTo(cLimit:Intensity; var cIn:Intensity):Boolean;
Begin
If cIn = cLimit Then mapIntensityTo := False Else Begin
If cIn < cLimit Then cIn := cIn + 1 Else cIn := cIn - 1;
mapIntensityTo := True
End
End;
Function colorMutate(var color:RGB; limit:RGB):Boolean;
Var rFlag, gFlag, bFlag:Boolean;
Begin
Write(color.r,' ', color.g,' ', color.b,' ', ' ');
rFlag := mapIntensityTo(limit.r, color.r);
gFlag := mapIntensityTo(limit.g, color.g);
bFlag := mapIntensityTo(limit.b, color.b);
Write(
color.r,' = ', limit.r, ' ? ', rFlag,' ',
color.g,' = ', limit.g, ' ? ', gFlag,' ',
color.b,' = ', limit.b, ' ? ', bFlag,' ',
' ');
colorMutate := rFlag OR gFlag OR bFlag
End;
(* ------------------------------------------------------------------------- *)
Var i:Byte; CurrentColor:RGB = (r:0; g:0; b:0);
Begin
While True Do
Begin
For i := 0 To Col_Sz Do (* Main interpretation cycle *)
Begin
While colorMutate(CurrentColor, Col[i].color) Do
Begin
colorSetHW(CurrentColor);
Delay_ms(Col[i].Delay
+ Col[i].Delay
+ Col[i].Delay
+ Col[i].Delay
+ Col[i].Delay
);
End;
Break;
Delay_ms(3000);
End;
Break;
End
End.
проблема в mapIntensityTo которая должна возвращать False для 255 = 255