写真をプログラミングしていて、データを送信しようとしているときにシリアルポートにデータを送信すると、プログラムがロックされると診断しました(テストすると、Pythonコードとハイパーターミナルの両方がクラッシュします)。ハイパーターミナルで動作し、ゆっくりと入力し(ストローク間で> .5秒)、キーボードをバッシングするとクラッシュしました。したがって、0.5秒より長いtime.sleepを導入しましたが、それでも機能していません。
これがテストコードです。
import serial
import time
ser = serial.Serial("COM1")
ser.baudrate=2400
while 1:
for i in range(23):
ser.write(0x41)
time.sleep(.5)
print("ok")
rec = ser.read()
rec2 = ser.read()
rec3 = ser.read()
print(rec)
print(rec2)
print(rec3)
for i in range(23):
data = ser.read()
print(data)
print("ok")
time.sleep(5)
データ受信機能。以前は、charを受信するたびに「ok」が送信されていました(これにより、3回の反復後にフリーズすることがわかります)。それが問題の原因であるかどうかを確認するためにループの外に持ってきましたが、そうではありませんでした。このコードでは「ok」をまったく送信していません。
unsigned char receiveData(unsigned char *rxData, int length){
// 1. Flag bit, RCIF, will be set when reception is complete and an interrupt will be generated if enable bit, RCIE, was set.
char send[3] = "ok";
int index = 0;
if(rxData==(void*)0 || rxInitialized==FALSE) return FAILURE;
while(index<length){
while(PIR1bits.RCIF==0);
rxData[index]= RCREG;
Delay1KTCYx(5);
index++;
}
configureTransmission();
sendData(send,3);
// 2. Read the RCSTA register to get the 9th bit (if enabled) and determine if any error occurred during reception.
// 3. Read the 8-bit received data by reading the RCREG register.
// 4. If any error occurred, clear the error by clearing enable bit CREN.
return SUCCESS;
}