Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-04-2007, 02: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, 11: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, 09: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, 10: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, 13: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, 13: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, 17: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, 08: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 08:51.
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 27-04-2007, 09: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, 12: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


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Roscosmos ha posticipato (ancora) il lan...
Isar Aerospace si prepara al secondo lan...
Tory Bruno è entrato in Blue Orig...
Fujifilm lancia la cartuccia per archivi...
Dreame H15 Mix: la soluzione 7-in-1 per ...
AirPods Pro 3 in forte sconto su Amazon:...
36 offerte Amazon, molte appena partite:...
2 caricatori multipli eccezionali: da 28...
OLED e 360 Hz a un prezzo senza preceden...
Roborock Q10 S5+ a un prezzo molto conve...
Upgrade PC a prezzo ridotto: le migliori...
Sono i 6 smartphone migliori su Amazon: ...
Google Pixel 9a a 361€, mai così ...
Super sconti sugli spazzolini Oral-B, an...
Aspira a 6000Pa, lava bene, costa 139€: ...
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: 22:19.


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