HexDEF6
22-03-2007, 11:23
Ho alcuni problemi con la serale:
ho un circuitino con un PIC (un microchip 16f876) che trasmette dati al computer via seriale...
volevo usare linux per il trattamento dei dati (anche perche' poi volevo fare qualche grafico via php ecc.), ma ho notato che la seriale sotto linux fa un po schifo, e leggendo in giro ho notato che e' un problema "comune".
Con la stessa macchina sotto win, non perdo mai un dato (il pic trasmette a 19200 baud in asincrono), sotto linux, ogni tanto mi salta qualche byte (e per via di come trasmettiamo e' decisamente una rogna).
Leggendo in giro potrebbe essere un problema di irq, nel senso che il buffer della seriale genera un irq ogni 8byte ricevuti (il buffer dovrebbe essere da 16byte), e che ogni tanto questo puo' dare problemi. Volevo abbassare a ogni byte ricevuto la generazione dell'irq, ma sembra che il tool per farlo (irqtune) non funzioni molto bene (almeno sotto ubuntu 6.10) e non riesco nemmeno a compilarlo dai sorgenti (ho come l'impressione che funzionava con kernel piu' vecchi)... ho provato anche con setserial a mettere la porta in low_latency, ma il risultato non cambia: ogni tanto perdo qualche byte (e sotto win no!)
Non so cosa potrei fare (voglia di mettere mano ai sorgenti del driver della seriale ne ho ben poca)... idee?
ho un circuitino con un PIC (un microchip 16f876) che trasmette dati al computer via seriale...
volevo usare linux per il trattamento dei dati (anche perche' poi volevo fare qualche grafico via php ecc.), ma ho notato che la seriale sotto linux fa un po schifo, e leggendo in giro ho notato che e' un problema "comune".
Con la stessa macchina sotto win, non perdo mai un dato (il pic trasmette a 19200 baud in asincrono), sotto linux, ogni tanto mi salta qualche byte (e per via di come trasmettiamo e' decisamente una rogna).
Leggendo in giro potrebbe essere un problema di irq, nel senso che il buffer della seriale genera un irq ogni 8byte ricevuti (il buffer dovrebbe essere da 16byte), e che ogni tanto questo puo' dare problemi. Volevo abbassare a ogni byte ricevuto la generazione dell'irq, ma sembra che il tool per farlo (irqtune) non funzioni molto bene (almeno sotto ubuntu 6.10) e non riesco nemmeno a compilarlo dai sorgenti (ho come l'impressione che funzionava con kernel piu' vecchi)... ho provato anche con setserial a mettere la porta in low_latency, ma il risultato non cambia: ogni tanto perdo qualche byte (e sotto win no!)
Non so cosa potrei fare (voglia di mettere mano ai sorgenti del driver della seriale ne ho ben poca)... idee?