Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Variabile globale... Help!
Forum - C/C++ - Variabile globale... Help! - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 10:23
Martedì, 04/05/2010

TheKane <3

PM Quote
Avatar
xeeynamo (Normal User)
Pro


Messaggi: 66
Iscritto: 14/03/2008

Segnala al moderatore
Postato alle 12:50
Martedì, 04/05/2010
@TheKaneB: "Chiudo l'OT aggiungendo che su PC non esiste la DTCM" sei intopic più di quanto credi :k: dato che (anche se non l'ho scritto all'inizio) stò programmando proprio sul nds :). Non ho capito bene di cosa parlavi poichè non conosco ancora il DTCM. Poi tu dici di leggere in stream dalla rom dati che metti nella ram e poi passi nella vram ma non è lentuccio questo sistema? Io con swiCopy copio da rom a vram senza problemi. E poi come mai una variabile globale è più lenta? Alla fine c'è solo un indirizzo memorizzato da qualche parte (nella DTCM in questo caso a quanto ho capito) che punta ad una variabile che può essere locale o globale oppure mi sbaglio?

:ot:: Come fai ad ottenere i fps? Sò che con le PAlib si può fare ma io adesso stò programmando tutto su libnds

@nessuno: Era una soluzione temporanea al mio problema. Dopo qualche ora a riscrivere parte del codice con questo sistema mi sono accorto che facevo meglio a trovare un'altra soluzione e poi quello che ho scritto era un esmepio che non avevo manco testato (anche se l'errore della variabile 'e' fuori i margini è qualcosa di scandaloso :rofl:)

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 14:23
Martedì, 04/05/2010
@xeeynamo:

è complicato spiegare in due parole tutto quello che ti ho accennato. Ti consiglio una buona lettura dai manuali di sistema della ARM, riguardo l'architettura ARMv5 e in particolare il core ARM9E che equipaggia l'ARM946E-S del NDS. Lì troverai tutti i dettagli relativi alle memorie TCM (Instruction TCM e Data TCM), e molto altro.
Per approfondimenti relativi al NDS fai riferimento al gbatek (lo trovi tra la documentazione dell'emulatore no$gba, si legge no-cash-gba), o mandami un PM per altre informazioni ( :yup: ).

Per il discorso dello streaming, mi riferivo al fatto che durante la fase di copia, passavo attraverso la DTCM che usavo come memoria tampone per applicare filtri grafici. Applicare questi filtri in SystemRAM e poi copiare con swiCopy sulla VRAM è certamente possibile, ma si spreca più tempo per questioni di tempi di accesso alla memoria (6 cicli per ogni parola ad accesso casuale, 4 cicli in modalità burst), mentre in DTCM gli accessi random impiegano 2 cicli di clock, 1 ciclo in modalità burst (se non ricordo male).
Per misurare gli FPS puoi usare un metodo molto semplice:

- setta una variabile intera a zero in fase di init (chiamiamola frameCounter)
- incrementala ogni volta che finisci il disegno di un frame
- nella routine di VBlank incrementa un secondo contatore (chiamiamolo vbCounter)
- sempre nella routine di VBlank, appena vbCounter raggiunge il valore di 60, fai così: currentFPS = frameCounter; frameCounter = 0; vbCounter = 0;

la variabile currentFPS verrà aggiornata ogni secondo.
Se vuoi aggiornarla più spesso (diciamo ogni decimo di secondo), ti basta contare fino a 6, anzichè fino a 60, e poi fare currentFPS = frameCounter * 10;

Una volta ottenuto il conteggio, puoi usare una routine di print sullo schermo per vedere il numeretto dove più ti aggrada.

PS: la routine di VBlank viene chiamata esattamente 1 volta ogni 16,66 millisecondi, cioè ogni sessantesimo di secondo, la sua esecuzione è asincrona, cioè scatta un interrupt che interrompe il codice corrente ed esegue questa funzione (come se fosse su un altro thread), e poi ritorna al codice di prima nonappena la routine fa return.

Ultima modifica effettuata da TheKaneB il 04/05/2010 alle 14:27
PM Quote
Avatar
napco (Normal User)
Pro


Messaggi: 64
Iscritto: 16/04/2010

Segnala al moderatore
Postato alle 18:25
Martedì, 04/05/2010
Scusate, ma al di là del problema della variabile ecc... non basterebbe un bel "#pragma once" all'inizio dell'header, oppure racchiudere l'header stesso tra un

Codice sorgente - presumibilmente C/C++

  1. #ifndef NOME_HEADER
  2. #define NOME_HEADER



ed un

Codice sorgente - presumibilmente Plain Text

  1. #endif



?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo