Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è uno smartphone che unisce una fotocamera molto più versatile rispetto al passato grazie allo zoom ottico 5x, il supporto magnetico Pixelsnap e il nuovo chip Tensor G5. Il dispositivo porta Android 16 e funzionalità AI avanzate come Camera Coach, mantenendo il design caratteristico della serie Pixel con miglioramenti nelle prestazioni e nell'autonomia. In Italia, però, mancano diverse feature peculiari basate sull'AI.
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-04-2007, 01:05   #1
gurutech
Senior Member
 
L'Avatar di gurutech
 
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
programma porta RS232

ciao a tutti,
sto scrivendo per l'università un programma per spedire/ricevere dati dalla porta
seriale, per pilotare un robot.

penso di aver quasi finito (devo mettere una fork per gestire in parallelo l'invio e la ricezione) ma ho un problema:
sto provando il programma tra due pc collegati con un cavo null modem, ma pare che quando uno dei due invia all'altro un carattere 0x0d (carriage return) questo venga trasformato in un 0x0a (newline). qualcuno sa dirmi perchè? l'ora è tarda e non riesco più a concentrarmi, magari è una cavolata!

in allegato trovate il programma, il codice è coperto da licenza GPLv2 o, a vostra scelta, una versione successiva
Allegati
File Type: zip sendserial.zip (2.2 KB, 6 visite)
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella”
gurutech è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2007, 10:54   #2
gurutech
Senior Member
 
L'Avatar di gurutech
 
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
ecco, ho migliorato un po' il tutto.
ora i caratteri vengono spediti e ricevuti in maniera raw.
sono riuscito a trasferire un archivio tar.gz tra due pc
ho aggiunto il colore per differenziare i byte spediti da quelli ricevuti
ho messo i commenti al codice

ho bisogno di qualche parere sulle cose che si possono migliorare. grazie

http://www.gurutech.it/files/sendserial.zip
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella”
gurutech è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 08:40   #3
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
- Non hai indicato se intendi abilitare o meno il controllo di flusso hardwate (CRTSCTS). A meno che uno dei due nodi non lo supporta, sarebbe bene abilitarlo.
- Hai impostato l'fd come non bloccante, ma non controlli il risultato della write (potrebbe restituire -1 con errno==EAGAIN). Con una corretta gestione del flow control e dei risultati della write, potresti scrivere anche più di un byte alla volta, per una maggiore efficienza.
- Perché le usleep?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 09:07   #4
gurutech
Senior Member
 
L'Avatar di gurutech
 
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
Quote:
Originariamente inviato da ilsensine Guarda i messaggi
- Non hai indicato se intendi abilitare o meno il controllo di flusso hardwate (CRTSCTS). A meno che uno dei due nodi non lo supporta, sarebbe bene abilitarlo.

devo controllare se il sensore laser che voglio controllare lo supporta

- Hai impostato l'fd come non bloccante, ma non controlli il risultato della write (potrebbe restituire -1 con errno==EAGAIN). Con una corretta gestione del flow control e dei risultati della write, potresti scrivere anche più di un byte alla volta, per una maggiore efficienza.

provo ad aggiungerlo appena ho un po' di tempo.

- Perché le usleep?
nelle specifiche del sensore che voglio pilotare c'è scritto che devono passare almeno 55 usec tra una richiesta e l'altra. lo so che non essendo in realtime non potrò mai controllare bene questo parametro, ma io ci ho messo delle usleep da 100 usec e buonanotte al secchio.
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella”
gurutech è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 12:19   #5
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da gurutech Guarda i messaggi
nelle specifiche del sensore che voglio pilotare c'è scritto che devono passare almeno 55 usec tra una richiesta e l'altra. lo so che non essendo in realtime non potrò mai controllare bene questo parametro, ma io ci ho messo delle usleep da 100 usec e buonanotte al secchio.
/me molto confused...
A 9600 baud, considerando 8 bit/char + 1 bit di stop, occorrono almeno 940 us per trasferire un carattere...
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 12:29   #6
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da ilsensine Guarda i messaggi
/me molto confused...
A 9600 baud, considerando 8 bit/char + 1 bit di stop
Considerando anche il bit di start siamo sopra il millisecondo.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2007, 16:45   #7
gurutech
Senior Member
 
L'Avatar di gurutech
 
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
ecco un pezzo del manuale (niente di segreto, roba che si reperisce su internet)
Quote:
  • 4.3 Time Conditions During Bi-Directional Communication
  • No longer than 6 ms must elapse between two bytes within a telegram sent to the LMS 2xx, otherwise a timeout is detected. The telegram is then ignored.
  • An interval of up to 14 ms can elapse between two bytes sent from the LMS 2xx within a telegram.
  • The minimum interval between two bytes sent to the LMS 2xx should be at least 55 μs.
ad ogni modo inizialmente ho cercato di pilotare direttamente l'apparato con gtkterm ma ho avuto un po' di problemi... infatti mi metteva delle letture spurie e non capivo perchè. inserendo le usleep è tutto ok. l'apparato che sto cercando di pilotare è un lettore laser per ambienti interni, fa n misure nel raggio di 180° e te le ritorna. oggi ho ottenuto per la prima volta una scansione "pulita". ho chiuso l'intorno del sensore con 3 cartoni in modo da formare una stanza. eccola

__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella”
gurutech è offline   Rispondi citando il messaggio o parte di esso
Old 27-04-2007, 07:47   #8
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Non so, andrebbe studiato un pò meglio. Innanzitutto la usleep causa uno sleep effettivo di almeno 1 ms, che è il tick dello scheduler; nel tuo caso, visto l'intervallo esiguo di attesa, avrebbe forse più senso un busy-loop o l'utilizzo del timer rtc (in entrambi i casi, eventualmente con scheduler RR). Metterei anche due bit di stop invece di uno, introduci a costo 0 un ulteriore ritardo di 100us tra i byte. Se non funziona, allora hai un problema da qualche altra parte!
Nota inoltre che questa condizione
Quote:
No longer than 6 ms must elapse between two bytes within a telegram sent to the LMS 2xx, otherwise a timeout is detected.
rischia di non essere soddisfatta sui kernel 2.4. Per me l'intero "telegram" dovrebbe essere inviato dalla uart, quindi scritto con una unica write. Cercherei di farlo funzionare in questo modo, se ci riesci.
Ricapitolando, per me dovresti:
- due bit di stop
- invio di un "telegram" intero con una unica write (se il telegram è "piccolo", di pochi byte, entra completamente nel buffer della uart; altrimenti devi usare più write con delle poll per controllare lo stato del buffer)
- eventuale attesa tra l'invio di più "telegram". tcdrain può esserti di aiuto qui, per evitare usleep con valori "magici".
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12

Ultima modifica di ilsensine : 27-04-2007 alle 07:51.
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 27-04-2007, 08:13   #9
gurutech
Senior Member
 
L'Avatar di gurutech
 
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
Quote:
Originariamente inviato da ilsensine Guarda i messaggi
...nel tuo caso, visto l'intervallo esiguo di attesa, avrebbe forse più senso un busy-loop o l'utilizzo del timer rtc (in entrambi i casi, eventualmente con scheduler RR)....
una breve ricerca mi ha portato alla funzione sched_setscheduler, a
questo e a quest'altro.
però non so bene di cosa parla. non sono un programmatore del kernel, più che altro sono un programmatore della domenica (il mio avatar ricorda che sarò un ing. elettronico)
Quote:
Metterei anche due bit di stop invece di uno, introduci a costo 0 un ulteriore ritardo di 100us tra i byte.
questo dipende dalla velocità della seriale. su RS232 posso comunicare al massimo a 38400 con il sensore, ma in futuro potrei passare a RS422 per avere 500 Kbps.

Quote:
- due bit di stop
- invio di un "telegram" intero con una unica write (se il telegram è "piccolo", di pochi byte, entra completamente nel buffer della uart; altrimenti devi usare più write con delle poll per controllare lo stato del buffer)
- eventuale attesa tra l'invio di più "telegram". tcdrain può esserti di aiuto qui, per evitare usleep con valori "magici".
non so se posso configurare i bit di stop, ci devo guardare. comunque per il momento devo solo ricevere i dati, ma in futuro dovrò ricevere i dati nel minor tempo possibile, perchè devo ricostruire un ambiente durante il movimento del robot sul quale è montato il sensore.
per l'unica write provo e ti faccio sapere.
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella”
gurutech è offline   Rispondi citando il messaggio o parte di esso
Old 27-04-2007, 11:11   #10
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da gurutech Guarda i messaggi
questo dipende dalla velocità della seriale. su RS232 posso comunicare al massimo a 38400 con il sensore, ma in futuro potrei passare a RS422 per avere 500 Kbps.
Se l'intervallo tra i caratteri deve essere al max di 55us è abbastanza inutile alzare la velocità della porta oltre un certo limite.

Quote:
non so se posso configurare i bit di stop
Sì che puoi, abilita CSTOPB e verificalo. I bit di stop sono sostanzialmente dei "tempi morti", vengono ignorati da chi legge i dati.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
Iliad: si consolida la partnership tecno...
Il SoC a 2 nm di Samsung non sfigura nel...
Prezzo shock per i Galaxy Buds FE + nuov...
Il nuovo SoC di Qualcomm vuole stupire: ...
Offerta lampo per pulire l'auto: aspirap...
I robotaxi di Amazon entrano in azione: ...
ECOVACS DEEBOT T50 PRO OMNI Gen2 domina ...
iPhone 17 Pro su Amazon: tutti i colori,...
Disney Plus da 2,99 euro al mese per 3 m...
Nuovo test di accensione dei motori per ...
Novità dalle analisi dell'asteroi...
La PS6 sarà più potente del previsto: ec...
Sony svela Xperia 10 VII: è il nu...
Amazon Weekend da urlo: iPhone 16 a prez...
Spotify diffida ReVanced: chiesta la rim...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:36.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v