Questo il funzionamento per sommi capi:
Il programma memorizza un una matrice di 512 caselle, il valore dei singoli canali dmx (valore della luce) che vanno appunto da 1 a 512, per 255 livelli ciascuno.
Nel momento in cui modifico il valore di un canale, es il 10 lo porto al max, vado a modificare solo la casella,, ad esempio, generalech(10) =255.
Il protocollo prevere che questa matrice sia mandata in continuo da 1 a 512 sulla rete.
Di queste matrici, il protocollo ArtNet, ne prevede...16530.
Come si vede, io creo il byte da spedire , scansionando tutta la matrice dei calori dei canali DMX da 1 a 512 (il codice compreso tra XXX e YYY)
Usando solo una matrice, il ciclo for riesce a star dentro nel normale refresh dell'invio dei dati ( lo faccio ogni 10 ms)..se però utilizzo 3 matrici, il ciclo FOR mi fa perdere molti dati, perchè se io cambio il valore di un canale nella matrice 1, ma nel frattempo sta processando la matrice 2 e poi deve fare la matrice 3, perdo 3 informazioni.
La domanda è :esiste un metodo per evitare il ciclo for, per creare questi bytes tutto in un colpo?
Ho letto in forum inglesi di una API "
RtlMoveMemory API function to copy data" che muove appunto blocci di memoria.Purtroppo le mie conoscenze sono un po limitate.qualcuno potrebbe illuminarmi/suggerirmi la corretta sintassi
dovre essere una cosa del genere ma non riesco a capire la sintassi giusta
Codice sorgente - presumibilmente Visual Basic 6 |
CopyBytes buffer(da 17 a 512), ByVal generalech (da 1 a 512), 512
|
grazie a chiunque mi possa dare una mano.
Mario