Torna indietro   Hardware Upgrade Forum > Software > Programmazione

FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7
FRITZ!Repeater 1700 porta il Wi-Fi 7 dual-band nelle case connesse. Mette a disposizione fino a 2.880 Mbit/s su 5 GHz e 688 Mbit/s su 2,4 GHz, integrazione Mesh immediata via WPS con FRITZ!Box e funzioni smart come MLO per bassa latenza. Compatto, plug-and-play e pronto per il futuro, è la soluzione ideale per chi vuole coprire ogni angolo senza cavi o complicazioni
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica
La Fondazione Chips-IT ha presentato a Pavia il piano strategico 2026-2028 per rafforzare l'ecosistema italiano dei semiconduttori. Con un focus su ricerca, design, talenti e infrastrutture, la Fondazione punta a consolidare il ruolo dell'Italia nel Chips Act europeo, sostenendo innovazione, collaborazione industriale e sovranità tecnologica.
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud
Al Museo Alfa Romeo di Arese, Nutanix ha riunito clienti, partner ed esperti per .Next On Tour Italia e per mostrare come l’infrastruttura hybrid multicloud possa diventare il fondamento dell’innovazione, con una piattaforma capace di unificare applicazioni tradizionali, moderne architetture cloud-native e nuovi scenari basati sull’intelligenza artificiale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-08-2011, 16:20   #41
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da misterx Guarda i messaggi
ma per come è costruita la funzione di lettura, io passo un puntatore ad un buffer e questa lo riempie ed ogni volta il ciclo si ripete allo stesso modo ogni tot millisecondi da me imposti.

Non mi viene in mente come accodare
dipende da come e' scritta la funzione di lettura.

Se e' una funzione di lettura e basta, giusto prima di chiamarla potresti fare una new di 1024 byte, passare alla funzione il nuovo puntatore e accodare il risultato ripempito nella coda condivisa.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 16:24   #42
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
dipende da come e' scritta la funzione di lettura.

Se e' una funzione di lettura e basta, giusto prima di chiamarla potresti fare una new di 1024 byte, passare alla funzione il nuovo puntatore e accodare il risultato ripempito nella coda condivisa.

è una funzione di libreria scritta dal produttore dell'apparato e al massimo posso giocare sul buffer.
In pagina 2 ho allegato il simulatore
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 16:29   #43
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da misterx Guarda i messaggi
è una funzione di libreria scritta dal produttore dell'apparato e al massimo posso giocare sul buffer.
In pagina 2 ho allegato il simulatore
Si', ma a quel simulatore puoi far fare quello che vuoi, anche cose che potenzilamente potresti non poter fare, e ovviamente non fa testo.
E comunque giocare sul buffer, l'unica cosa che puoi fare, e' proprio quello che proponevo di fare.
PRIMA di chiamare la funzione di lettura (che non e' ovviamente presente nel simulatore), allochi 1024 bytes e passi il nuovo puntatore alla funzione.
Ottenuto il risultato accodi il tutto in una coda condivisa che ovviamente nel simulatore non c'e'.
E il consumatore leggera' dalla coda condivisa quando piu' gli fa comodo.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 01-08-2011 alle 16:32.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 16:30   #44
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
marco.r,
quasi quasi se implemento solo due thread mi semplifico la vita.

//TH1
- riempio buffer da ethernet
- ciclo buffer se cambiato qualcosa creo evento e risveglio TH2

//TH2
- vislualizza e memorizza su disco
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 16:31   #45
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Si', ma a quel simulatore puoi far fare quello che vuoi, ovviamente non fa testo.
perhè non ho di mezzo la ethernet?
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 16:38   #46
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Si', ma a quel simulatore puoi far fare quello che vuoi, anche cose che potenzilamente potresti non poter fare, e ovviamente non fa testo.
E comunque giocare sul buffer, l'unica cosa che puoi fare, e' proprio quello che proponevo di fare.
PRIMA di chiamare la funzione di lettura (che non e' ovviamente presente nel simulatore), allochi 1024 bytes e passi il nuovo puntatore alla funzione.
Ottenuto il risultato accodi il tutto in una coda condivisa che ovviamente nel simulatore non c'e'.
E il consumatore leggera' dalla coda condivisa quando piu' gli fa comodo.
però se il buffer viene elaborato quando più fa comodo, come determino i tempi di cambiamento di stato da zero a uno e viceversa?
Il mio problema è determinare il cambiamento di stato e il tempo di permamenza in tale stato
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 16:57   #47
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da misterx Guarda i messaggi
Il mio problema è determinare il cambiamento di stato e il tempo di permamenza in tale stato
E questo implica che c'è bisogno di un thread per fare "polling continuo", o sbaglio?
Sapendo che i valori/bit del dispositivo sono N, io teoricamente farei così:

a) polling continuo con il thread Lettore:
- ha un buffer di N elementi;
- prima lettura in avvio: copia lo stato del dispositivo nel buffer;
- ciclo infinito, ad ogni iterazione:
- se i valori che legge nel dispositivo sono diversi da quelli presenti nel buffer
- copia i valori del dispositivo nel buffer (per futuri confronti)
- fa una copia del buffer Copia;
- crea un Elemento con Copia e un timestamp (per consumo da parte del thread Scrittore);
- acquisisce mutex di Coda;
- infila Elemento nella Coda;
- rilascia mutex di Coda;

- sleep brevissima

b) una struttura che faccia da Coda, condivisa con una mutex

c) thread Scrittore (con parametro X tarabile: numero di elementi da estrarre dalla Coda ad ogni iterazione)
- ciclo infinito, ad ogni iterazione:
- acquisisce mutex di Coda;
- rimuovi al più X Elementi da Coda;
- rilascia mutex di Coda;

- scrivi al più X Elementi su file;
- sleep moderata



@EDIT:
Invece di "salvare" tutto il buffer, se si salva in avvio lo stato iniziale del dispositivo (snapshot) poi si possono salvare solo le differenze (i delta).
Magari ogni tanto (se neccessario o si ritiene sia conveniente) si può fare un nuovo snapshot per poi continuare con i soli delta.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 01-08-2011 alle 17:44.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 17:43   #48
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
E questo implica che c'è bisogno di un thread per fare "polling continuo", o sbaglio?
Sapendo che i valori/bit del dispositivo sono N, io teoricamente farei così:

a) polling continuo con il thread Lettore:
- ha un buffer di N elementi;
- prima lettura in avvio: copia lo stato del dispositivo nel buffer;
- ciclo infinito, ad ogni iterazione:
- se i valori che legge nel dispositivo sono diversi da quelli presenti nel buffer
- copia i valori del dispositivo nel buffer (per futuri confronti)
- fa una copia del buffer Copia;
- crea un Elemento con Copia e un timestamp (per consumo da parte del thread Scrittore);
- acquisisce mutex di Coda;
- infila Elemento nella Coda;
- rilascia mutex di Coda;

- sleep brevissima

b) una struttura che faccia da Coda, condivisa con una mutex

c) thread Scrittore (con parametro X tarabile: numero di elementi da estrarre dalla Coda ad ogni iterazione)
- ciclo infinito, ad ogni iterazione:
- acquisisce mutex di Coda;
- rimuovi al più X Elementi da Coda;
- rilascia mutex di Coda;

- scrivi al più X Elementi su file;
- sleep moderata
aspetta scusa: la funzione che sto usando richiede un buffer di dimensione nota e lei la riempie

Inizialmente avevo tre thread con un semaforo comune tra produttore e consumatore ed un evento tra consumatore e scrittore.

Poi mi sono detto se ne valeva la pena mantenere un semaforo in quanto:
se produttore sta riempiendo consumatore non può accedervi e allora tanto vale eliminare consumatore e mettere in sequenza i due

//produttore
-------- riempe array
-------- cicla array e se trova bit a uno crea evento


//scrittore
----- attesa_evento
----- scrive tempi su disco
----- resetta evento

ma non so se ho fato bene ad eliminare consumatore, di primo acchito direi di si.

Sta di fatto che continuo a notare differenze di al max 20 millisecondi: forse significa che windows in determinate condizioni può essere usato a scopo real time?
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 17:52   #49
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da misterx Guarda i messaggi
Sta di fatto che continuo a notare differenze di al max 20 millisecondi: forse significa che windows in determinate condizioni può essere usato a scopo real time?
Che io sappia no, non ci si può appoggiare a Windows assumendo di avere a che fare con un sistema real time, perchè non lo è.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 18:05   #50
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Che io sappia no, non ci si può appoggiare a Windows assumendo di avere a che fare con un sistema real time, perchè non lo è.
non avendo mai scritto programmi per sistemi operativi real time, anche se la risposta sembrerebbe scontata significa che se portassi il mio programma così com'è sotto un sistema operativo real time avrei tempi corretti?

un link che non è chiarissimo se intendano che windows 2000/xp possono diventare RT http://www.codeguru.com/cpp/w-p/syst...cle.php/c14457

Ultima modifica di misterx : 01-08-2011 alle 18:14.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 18:53   #51
!fazz
Moderatore
 
L'Avatar di !fazz
 
Iscritto dal: Nov 2006
Messaggi: 21893
Quote:
Originariamente inviato da misterx Guarda i messaggi
non avendo mai scritto programmi per sistemi operativi real time, anche se la risposta sembrerebbe scontata significa che se portassi il mio programma così com'è sotto un sistema operativo real time avrei tempi corretti?

un link che non è chiarissimo se intendano che windows 2000/xp possono diventare RT http://www.codeguru.com/cpp/w-p/syst...cle.php/c14457
un sistema con un os. real time ti garantisce che il tuo codice girerà effettivamente ad una determinata frequenza: io uso spessissimo rtos su un pxi per fare acquisizione e controllo ma ha il difetto di essere piuttosto caro e di dover programmare con quello schifo che è G con tanti ringraziamenti a ni

in alternativa se il programma è semplice puoi pensare di portare l'acquisizione su un micro, salvare i dati su flash e postelaborarli offline
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX)
Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000
!fazz è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 19:28   #52
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da !fazz Guarda i messaggi
un sistema con un os. real time ti garantisce che il tuo codice girerà effettivamente ad una determinata frequenza: io uso spessissimo rtos su un pxi per fare acquisizione e controllo ma ha il difetto di essere piuttosto caro e di dover programmare con quello schifo che è G con tanti ringraziamenti a ni

in alternativa se il programma è semplice puoi pensare di portare l'acquisizione su un micro, salvare i dati su flash e postelaborarli offline
scusa ed un qualcosa di più noto?
Ti risulta windows CE oppure Linux o anche Windows XP Embedded?


p.s
guardacaso qua dice di no http://it.wikipedia.org/wiki/Sistema...tivo_real-time

Ultima modifica di misterx : 01-08-2011 alle 19:33.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 20:13   #53
starfred
Senior Member
 
Iscritto dal: Jul 2011
Messaggi: 381
Un sistema operativo real-time ti può garantire con altissima probabilità (nulla è 100%) che lo scheduling dei processi avverrà nella deadline previste.
Il fatto che il tuo codice funzioni ora sulla tua macchina windows xp non garantisce affatto che funzioni su un 8-core con windows xp.
Non ti garantisce nemmeno che funzioni sulla tua macchina domani.
__________________
Concluso positivamente con: Kamzata, Ducati82, Arus, TheLastRemnant, ghost driver, alexbull1, DanieleRC5, XatiX
starfred è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 20:35   #54
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da starfred Guarda i messaggi
Un sistema operativo real-time ti può garantire con altissima probabilità (nulla è 100%) che lo scheduling dei processi avverrà nella deadline previste.
Il fatto che il tuo codice funzioni ora sulla tua macchina windows xp non garantisce affatto che funzioni su un 8-core con windows xp.
Non ti garantisce nemmeno che funzioni sulla tua macchina domani.

dopo tutto quello che ho letto ed ho provato sulla mia pellaccia sono convinto!
Meno male che il bit relativo al dispositivo più "veloce", si fa per dire, cambia in circa 1,5 secondi.
Ciò vuol dire che dovrei riuscire anche con XP a determinare abbastanza frequentemente e con buona precisione tale tempo.

Ho provato anche con bit che cambiano ogni 188 ms come esperimento e tali 188 ms che sono stati rilevati prima strumentalmente, grande mistero per me, leggo la maggior parte delle volte proprio 188 ms con un errore di (+/- 16 ms) solo a volte.

E' un fatto che non riuscirò mai a spiegarmi boh.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2011, 21:56   #55
starfred
Senior Member
 
Iscritto dal: Jul 2011
Messaggi: 381
Un modo per evitare di fare tutta la storia delle temporizzazioni è quello di modificare il dispositivo in modo tale da effettuare un handshake con il thread nel momento in cui è pronto un nuovo dato.
__________________
Concluso positivamente con: Kamzata, Ducati82, Arus, TheLastRemnant, ghost driver, alexbull1, DanieleRC5, XatiX
starfred è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2011, 06:45   #56
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da starfred Guarda i messaggi
Un modo per evitare di fare tutta la storia delle temporizzazioni è quello di modificare il dispositivo in modo tale da effettuare un handshake con il thread nel momento in cui è pronto un nuovo dato.
cioè il dispositivo mi dovrebbe dire quando ha dati da inviarmi?
Un metodo forse ci sarebbe ma non so se risolverebbe il problema. Mi pare che nel momento in cui viene fatto un refresh dei dati viene alzato un particolare bit.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2011, 09:39   #57
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
dopo 3100 misurazioni ho ottenuto i seguenti risultati

Codice:
          A      B      C        D
medie	401	199	600	797
max	422	204	610	797
min	390	187	593	719
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2011, 16:47   #58
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
ho scoperto solo ora di avere un grosso problema nella mia implementazione: quando TH2 setta l'evento, TH3 non risponde in maniera così decisiva e quindi si perde dati per strada in quanto nel tempo in cui TH3 stra per rispondere TH2 ha già modificato li buffer, che soluzioni ci potrebbero essere?

Codice:
chari miobuf[80];

byte buf[1024];
//TH1
while(1)
{
      WaitForSingleObject(hMutex,INFINITE);

      RiempiArray(buf);

      ReleaseMutex(hMutex);

     Sleep(250);
}
Codice:
//TH2
while(1)
{
      WaitForSingleObject(hMutex,INFINITE);
      
      for(int i=0; i<1024; i++)
      {
             if(bit cambia stato)
             calcola_tempo();
             sprintf(miobuf,"%d.%d",a,b);

             SetEvent ( hEvent2 );

      }
      ReleaseMutex(hMutex);

     Sleep(50);
}
Codice:
//TH3
while(1)
{
            WaitForSingleObject(hEvent2 ,INFINITE);
      
             fprintf(fp,"X%s\n",miobuf);;

             ResetEvent( hEvent2 );


}

Ultima modifica di misterx : 02-08-2011 alle 17:35.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2011, 17:21   #59
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da misterx Guarda i messaggi
ho scoperto solo ora di avere un grosso problema nella mia implementazione: quando TH2 setta l'evento, TH3 non risponde in maniera così decisiva e quindi si perde dati per strada in quanto nel tempo in cui TH3 stra per rispondere TH2 ha già modificato li buffer, che soluzioni ci potrebbero essere?
Ma il buffer lo copi oppure ti passi un puntatore/riferimento?
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2011, 17:28   #60
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Ma il buffer lo copi oppure ti passi un puntatore/riferimento?
in TH2 uso la sprintf(miobuf,"%d.%d",a,b); con miobuf che è un array globale
misterx è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica Fondazione Chips-IT, l'Italia alla riscossa nei ...
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud Nutanix: innovazione, semplicità e IA al ...
Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il notebook gaming 'budget' che non ti aspetti Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il n...
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando Due mesi di Battlefield 6: dalla campagna al bat...
'Thank You', l'update gratuito per tutti...
L'IA è più brava degli uma...
Tutti i vincitori dei The Game Awards 20...
Instagram sta usando l'IA per migliorare...
Super prezzo per iPhone 16e: il modello ...
HP LaserJet MFP M234sdw, in prova la mul...
Phantom Blade Zero ha finalmente una dat...
Google e Apple stanno collaborando per r...
180 Hz in 5K? Il nuovo monitor di ASUS m...
L'Europa salva le auto termiche? Forse s...
Total War: Warhammer 40K è realt&...
NVIDIA rassicura il mondo HPC: il format...
Lenny Kravitz diventa un villain in 007 ...
Saros rinviato ad aprile 2026: il nuovo ...
EPYC Embedded 2005: AMD punta su efficie...
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:47.


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