linvinus писал(а):
Цитата:
Потом ПК ждет когда PIC отработает и снова проверяет, готово ли или нет
![Rolling Eyes :roll:](http://roboforum.ru/images/smilies/rolleyes.gif)
А это каким образом происходит? Опять тестовый байт?
Ага. ПК отдал команду, PIC сказал "команду принял все отлично"
ПК ждет 1секунду (я считаю это достаточно для всех дел у PIC).
Как только PIC завершил выполнение команды,
он отсылает ПК 1 байт (ТЕСТ-БАЙТ).
// Command arrived to uC
// Wait for "test" byte from uC; 1000 ms for command execution
если тестовый байт не пришел, то это проблемы пика, его watchdog перегрузит,
и ПК имеет пустой ответ.
Если тест байт пришел от PIC на ПК,
то ПК шлет READY-БАЙТ (=говорит "я готов, давай результат работы")
и PIC видя готовность ПК, шлет результат (тоже с длиной, чексуммой и т.д.)
ПК читает, проверяет сумму и выдает ответ в программу которая вызывала PIC.
Немножко мудрено, но такие переговоры своего рода искусственные паузы,
которые позволяют не засирать канал и не переспрашивать.
Сделал давно, работает без проблем. PIC никогда не перегружается по watchdog.
linvinus писал(а):
А что произойдёт если по ошибке придёт 255 в месте
// Get the number of bytes in cmd + args + RTC (4 bytes)
count = svs_byte_read(); SVS_Command[0] = count;
в то время когда PC передаст только 10ть байт и будет считать что всё правильно и будет ждать ответа.
...
PIC будет читать 255 байт, но их не будет, сработает watchdog.
это CCS C
Код:
#include <18F2520.h>
#device ADC=10
#fuses HS,WDT256,NOPROTECT,NOLVP,NODEBUG,NOPUT,NOBROWNOUT,NOWRT
#use delay(clock=20000000,restart_wdt)
#use rs232(baud=38400, xmit=PIN_C4, rcv=PIN_B6, stream=SABERTOOTH_SS, bits=8, parity=N, stop=1, errors)
#use rs232(baud=230400, xmit=PIN_C6, rcv=PIN_C7, UART1, stream=HW_USART, errors)
// It is Rover 20
// Robot with Core 2 Duo CPU P8800
Жаль они PIC32 не осваивают, я привык к CCS C
![Crazy :crazy:](http://roboforum.ru/images/smilies/crazy.gif)