Nous programmons une image et nous avons diagnostiqué que si nous envoyons des données au port série alors qu'il essaie de nous envoyer des données, le programme se verrouille (notre code python et notre hyperterminal vont planter quand testé). Il travaillait en hyperterminal et l'entrait lentement (> 0,5 secondes entre les traits), et se bloquait lorsque le clavier était défoncé. Nous avons donc introduit un time.sleep qui est plus long que .5 secondes, mais il ne fonctionne toujours pas.pySerial gel après avoir lu 3 fois
Voici notre code de test.
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)
notre fonction de données de réception. Nous avions l'habitude d'avoir le "ok" étant envoyé chaque fois qu'il a reçu un char (qui est comment nous savons qu'il se fige après 3 itérations). Nous l'avons amené en dehors de la boucle pour voir si cela causait le problème et ce n'était pas le cas. Il n'envoie pas le "ok" du tout avec ce code.
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;
}
Probablement la question la plus importante ici est, est-ce un vrai port de communication ou un USB <-> dongle série? Si c'est un dongle, quelle est la marque et le modèle? – synthesizerpatel
Quel PIC? Parce que si c'est le PIC16F87XA ou similaire, cette fonction 'receiveData' est fausse - l'indicateur' RCIF' est placé quand le tampon de réception est plein, et est effacé quand 'RCREG' est vide, c.-à-d. lis. – detly
Attendez, j'ai mal lu le code. Je vais en penser plus. – detly