По вашему примеру у меня вопросы.
Код:
CASE state_res OF
0:
res:=OwenFileOpenAsync('usb:test.dat','a',ADR(handle));
IF res=ASYNC_WORKING THEN
state:=1;
END_IF
1:
res:=OwenFileOpenAsync('test.dat','a',ADR(handle));
IF res=ASYNC_DONE THEN
IF handle<>0 THEN
state:=2;
ELSE
state:=0;
END_IF
ELSIF res<0 THEN
state:=0;
END_IF
1. Зачем сделано переприсваивание state_res := state; ?
Почему недостаточно одной переменной состояния state_res ?
2. Зачем состояние 0?
Оно не делает ничего другого, что делает состояние 1.
3. Почему в состоянии 0 открывается файл 'usb:test.dat',
а в состоянии 1 - 'test.dat' ? Это ошибка?
Код:
2:
res:=OwenFileWriteAsync(handle,ADR(bufout),14,ADR(result));
IF res=ASYNC_WORKING THEN
state:=3;
ELSE
state:=6;
END_IF
3:
res:=OwenFileWriteAsync(handle,ADR(bufout),14,ADR(result));
IF res=ASYNC_DONE THEN
IF result=14 THEN
state:=4;
ELSE
state:=6;
END_IF
ELSIF res<0 THEN
state:=6;
END_IF
4. При первом вызове записи в файл (состояние 2), если результат не ASYNC_WORKING,
сразу уходим на закрытие файла, а в состоянии 3 еще проверяем ELSIF res<0 .
В этом есть какой-то особый смысл? Почему в состоянии 2 res не проверяется на отрицательность?
5. Состояние 2 не делает ничего другого, что делает состояние 3. Зачем оно?
(этот же вопрос для состояний 4 и 5)