Torna indietro   Hardware Upgrade Forum > Software > Programmazione

GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
Il Gigabyte Gaming A16 offre un buon equilibrio tra prestazioni e prezzo: con Core i7-13620H e RTX 5060 Laptop garantisce gaming fluido in Full HD/1440p e supporto DLSS 4. Display 165 Hz reattivo, buona autonomia e raffreddamento efficace; peccano però le USB e la qualità cromatica del pannello. Prezzo: circa 1200€.
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-09-2010, 13:58   #1
Unrealizer
Senior Member
 
L'Avatar di Unrealizer
 
Iscritto dal: May 2006
Città: Milano&Palermo
Messaggi: 10273
[C] state machine e variabili globali

salve a tutti!

intanto, per cominciare una domanda stupida: per fare in modo che una variabile possa essere utilizzata da altre funzioni, devo semplicemente dichiararla all'esterno del main, no? e per fare in modo che ci possano accedere funzioni contenute in altri file devo solo aggiungere la keyword extern o devo fare altro?

sto lavorando ad un progetto su pic per una specie di timer, che però deve utilizzare un display lcd 16x2 per visualizzare un menu.

per creare questo menu sto utilizzando 2 state machine: una per decidere se visualizzare il menu, o eseguire le sue "funzioni" e un'altra per gestire le pagine di menu.

non ho ancora scritto il codice, sono idee che mi frullano per la mente ancora

ho intenzione di mettere la prima state machine nel main, e in una funzione apposita la state machine del menu, il tutto basandolo su cicli switch case...

suggerimenti? è la prima volta che utilizzo una state machine

la domanda sulle variabili globali era per permettere al menu di passare al ciclo timer le impostazioni xD

PS: piccola premessa, essendo il pic un microcontrollore, ho a disposizione una quantità limitata (ma comunque sufficiente) di ram, 368 byte, ma soprattutto si tratta di un processore a 8 bit, per questo motivo il menu sarà limitato a 255 pagine per evitare di appesantire troppo la state machine ma tanto abbonderanno di sicuro, ma resta il problema che devo limitare l'uso dei tipi da int a salire il più possibile, e limitarmi agli unsigned char ovunque possa
__________________
PC9Ryzen 9 3900X64GB Vengeance LPXGigabyte RTX3080TiCorsair MP600Aorus Elite X570 - PC10SQ216GB LPDDR4256 GB SSDSurface Pro X - PC11Core i9-9980HK64GB DDR4512GB SSDMacBook Pro 2019 - xboxlivekipters - originkipter - steamkippoz - psnkipters
Unrealizer è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2011, 16:54   #2
jedineon
Member
 
L'Avatar di jedineon
 
Iscritto dal: Jan 2011
Città: Napoli
Messaggi: 30
menu su lcd con pic

Ciao, spero di non essere arrivato tardi...
anche io sto lavorando ad un progetto simile, devo creare un menù per un lcd 40x2 interfacciato ad un PIC.

per prima cosa: che compilatore usi? io il CCS C, però sto pensando di passare al C18

per rispondere alla tua prima domanda, per fare vedere la variabile da una funzione, ovunque essa si trovi, dichiarala all'esterno del main, subito dopo i settaggi dei fuse e dell'oscillatore.

Il sistema per gestire i menù che ho pensato io è questo:

due variabili (menu_counter e selected_counter) contengono la pagina di menù attiva e il valore della variabile che essa cambia.
Nella routine di input vado ad assegnare (tramite un puntatore ad un array che contiene gli indirizzi delle variabili) alle variabili da modificare il relativo valore del selected_counter; un altro array contiene i valori minimi e massimi accettabili per quella variabile.
Chiaramente con questo sistema l'indice dell'array è proprio il menu_counter, per cui mi basta gestire tramite input l'aumento e diminuzione di queste sole due variabili per modificarne molte altre.

Ora sto cercando di creare un menù modulare, in cui vengono create nuove pagine a seconda dei dati salvati su eeprom...

fammi sapere se questi suggerimenti ti sono di aiuto e se tu ne hai per me...
ciao!
__________________
Membro dell'Hardware Upgrade Aerospace Group
Trattative concluse con: Gian92, rebagliatiedilio
jedineon è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2011, 18:49   #3
Unrealizer
Senior Member
 
L'Avatar di Unrealizer
 
Iscritto dal: May 2006
Città: Milano&Palermo
Messaggi: 10273
in effetti il thread è vecchio, ma quel progetto è per ora "in pausa"

io utilizzo 2 variabili, una contenente lo stato del sistema, un'altra contenente lo stato del menu. Ci sono anche due array, in memoria programma, uno contenente tutte le stringhe di menu, un'altro contenente tutti i "salti" (è un array bidimensionale, di una dimensione per 3, come 3 sono i pulsanti di scelta - avanti, indietro, OK). Nel caso il "salto" sia 0x00, viene interrogato un altro array contenente lo stato di impostare come stato sistema.

Come compilatore usavo l'hitech, ma da poco sono passato al C18
__________________
PC9Ryzen 9 3900X64GB Vengeance LPXGigabyte RTX3080TiCorsair MP600Aorus Elite X570 - PC10SQ216GB LPDDR4256 GB SSDSurface Pro X - PC11Core i9-9980HK64GB DDR4512GB SSDMacBook Pro 2019 - xboxlivekipters - originkipter - steamkippoz - psnkipters
Unrealizer è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2011, 07:42   #4
jedineon
Member
 
L'Avatar di jedineon
 
Iscritto dal: Jan 2011
Città: Napoli
Messaggi: 30
ok, ora ho implementato anche io un array che contiene le stringhe del menù, effettivamente è molto più comodo tenere da una parte tutti i dati relativi al menù; ad inizio programma dichiaro:

array stringhe;
array valore max;
array valore min;
array indirizzo variabili;

dopodichè cambiando l'indice dell'array ottengo la pagina di menù relativa.

hai idea di come potrei mettere il tutto in una struttura? non ne sono per nulla pratico...
__________________
Membro dell'Hardware Upgrade Aerospace Group
Trattative concluse con: Gian92, rebagliatiedilio
jedineon è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2011, 10:13   #5
Unrealizer
Senior Member
 
L'Avatar di Unrealizer
 
Iscritto dal: May 2006
Città: Milano&Palermo
Messaggi: 10273
mai usato strutture incredibile ma vero cmq adesso il menu è fermo, devo riuscire a far funzionare bene gli RTC (è incredibile che il più fornito negozio di elettronica di Palermo NON abbia quarzi da 32.768 kHz!), per ora un DS1307, più avanti un DS3232, e la comunicazione seriale col pc, tramite un client apposito in c# (per ora tramite la uart, successivamente con l'usb in emulazione seriale e poi forse tramite l'usb nativo )
__________________
PC9Ryzen 9 3900X64GB Vengeance LPXGigabyte RTX3080TiCorsair MP600Aorus Elite X570 - PC10SQ216GB LPDDR4256 GB SSDSurface Pro X - PC11Core i9-9980HK64GB DDR4512GB SSDMacBook Pro 2019 - xboxlivekipters - originkipter - steamkippoz - psnkipters
Unrealizer è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2011, 17:55   #6
!fazz
Moderatore
 
L'Avatar di !fazz
 
Iscritto dal: Nov 2006
Messaggi: 21816
per le strutture è facile basta mettere la dichiarazione di tutte le variabili che ti interessano all'interno della definizione struttura

es
Codice:
typedef	struct
{
	MyInt16T	tm_sec;
	MyInt16T	tm_min;
	MyInt16T	tm_hour;
	MyInt16T	tm_mday;
	MyInt16T	tm_mon;
	MyInt16T	tm_year;
	MyInt16T	tm_wday;
	MyInt16T	tm_yday;
	MyInt16T	tm_isdst;
}	MyTmT;

per usarle poi basta dichiarare una variabile del tipo della struttura e accedere ai campi con il punto
Codice:
MyTmT miaStruttura;
miaStruttura.tm_sec=1;
se si usano i puntatori viene comodo sostiturie *struttura.campo con l'equivalente struttura->campo


per il resto niente da dire a parte che se usate variabili globali in un diverso file rispetto a dove le avete dichiarate dovete dichiarale anche in questo file con il modificatore extern davanti
__________________
"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 25-02-2011, 18:49   #7
Unrealizer
Senior Member
 
L'Avatar di Unrealizer
 
Iscritto dal: May 2006
Città: Milano&Palermo
Messaggi: 10273
Quote:
Originariamente inviato da !fazz Guarda i messaggi
per le strutture è facile basta mettere la dichiarazione di tutte le variabili che ti interessano all'interno della definizione struttura

es
Codice:
typedef	struct
{
	MyInt16T	tm_sec;
	MyInt16T	tm_min;
	MyInt16T	tm_hour;
	MyInt16T	tm_mday;
	MyInt16T	tm_mon;
	MyInt16T	tm_year;
	MyInt16T	tm_wday;
	MyInt16T	tm_yday;
	MyInt16T	tm_isdst;
}	MyTmT;

per usarle poi basta dichiarare una variabile del tipo della struttura e accedere ai campi con il punto
Codice:
MyTmT miaStruttura;
miaStruttura.tm_sec=1;
se si usano i puntatori viene comodo sostiturie *struttura.campo con l'equivalente struttura->campo


per il resto niente da dire a parte che se usate variabili globali in un diverso file rispetto a dove le avete dichiarate dovete dichiarale anche in questo file con il modificatore extern davanti
grazie del chiarimento potrebbero essere utili per le flag dato che con pochi byte di ram è uno spreco usarne uno intero per ogni flag, dovrebbe bastare dichiarare una struttura con campi bit...

Il mio problema ora è con la seriale: tramite l'UART Tool del pickit2 funziona la trasmissione al pc, ma non dal pc al pic, mentre tramite il MAX232 e un convertitore RS232-USB basato sul PL-2303 non vedo assolutamente niente
__________________
PC9Ryzen 9 3900X64GB Vengeance LPXGigabyte RTX3080TiCorsair MP600Aorus Elite X570 - PC10SQ216GB LPDDR4256 GB SSDSurface Pro X - PC11Core i9-9980HK64GB DDR4512GB SSDMacBook Pro 2019 - xboxlivekipters - originkipter - steamkippoz - psnkipters
Unrealizer è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2011, 19:39   #8
!fazz
Moderatore
 
L'Avatar di !fazz
 
Iscritto dal: Nov 2006
Messaggi: 21816
Quote:
Originariamente inviato da Unrealizer Guarda i messaggi
grazie del chiarimento potrebbero essere utili per le flag dato che con pochi byte di ram è uno spreco usarne uno intero per ogni flag, dovrebbe bastare dichiarare una struttura con campi bit...

Il mio problema ora è con la seriale: tramite l'UART Tool del pickit2 funziona la trasmissione al pc, ma non dal pc al pic, mentre tramite il MAX232 e un convertitore RS232-USB basato sul PL-2303 non vedo assolutamente niente
per i flag usa un intero e lavoraci sopra bit a bit
__________________
"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 12-03-2011, 09:16   #9
jedineon
Member
 
L'Avatar di jedineon
 
Iscritto dal: Jan 2011
Città: Napoli
Messaggi: 30
Strutture, menù, nodi

Grande cosa le strutture, ho ridotto di tantissimo il codice del mio programma incapsulando variabili omologhe nella stessa struttura.

Il prossimo passo è creare un menù ad albero asimmetrico!
Mi spiego meglio:
voglio creare un menù con profondità variabile, ovvero dove si può scendere e salire di livello per arrivare a tutte le opzioni;
il problema di un menù del genere è ottimizzare sia la memoria programma in cui scriverlo sia la ram da tenere occupata a runtime.
Per ora ho pensato ad una struttura del genere:

dichiaro una struttura "nodo_menu" che ha come elementi
un puntatore ad un nodo_menu parent
un puntatore ad un array di nodo_menu children
un valore, per memorizzare un eventuale parametro/opzione
un puntatore a carattere, che rimandi alla stringa da visualizzare.

in questo modo quando devo costruire la schermata dell'LCD vado al nodo parent di quello attuale e prelevo l'array dei children, da cui rilevo le stringhe da caricare e gli indirizzi delle variabili da modificare...

chiaramente una cosa così complessa non mi riuscirà in breve tempo, se avete idee o miglioramenti aiutatemi!!!
__________________
Membro dell'Hardware Upgrade Aerospace Group
Trattative concluse con: Gian92, rebagliatiedilio
jedineon è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2011, 09:57   #10
Unrealizer
Senior Member
 
L'Avatar di Unrealizer
 
Iscritto dal: May 2006
Città: Milano&Palermo
Messaggi: 10273
Quote:
Originariamente inviato da jedineon Guarda i messaggi
Grande cosa le strutture, ho ridotto di tantissimo il codice del mio programma incapsulando variabili omologhe nella stessa struttura.

Il prossimo passo è creare un menù ad albero asimmetrico!
Mi spiego meglio:
voglio creare un menù con profondità variabile, ovvero dove si può scendere e salire di livello per arrivare a tutte le opzioni;
il problema di un menù del genere è ottimizzare sia la memoria programma in cui scriverlo sia la ram da tenere occupata a runtime.
Per ora ho pensato ad una struttura del genere:

dichiaro una struttura "nodo_menu" che ha come elementi
un puntatore ad un nodo_menu parent
un puntatore ad un array di nodo_menu children
un valore, per memorizzare un eventuale parametro/opzione
un puntatore a carattere, che rimandi alla stringa da visualizzare.

in questo modo quando devo costruire la schermata dell'LCD vado al nodo parent di quello attuale e prelevo l'array dei children, da cui rilevo le stringhe da caricare e gli indirizzi delle variabili da modificare...

chiaramente una cosa così complessa non mi riuscirà in breve tempo, se avete idee o miglioramenti aiutatemi!!!
buona idea che compilatore usi?

edit: scusa l'avevi scritto sopra xD cmq ti consiglio di passare al C18, a quanto so CCS ha vari problemi
__________________
PC9Ryzen 9 3900X64GB Vengeance LPXGigabyte RTX3080TiCorsair MP600Aorus Elite X570 - PC10SQ216GB LPDDR4256 GB SSDSurface Pro X - PC11Core i9-9980HK64GB DDR4512GB SSDMacBook Pro 2019 - xboxlivekipters - originkipter - steamkippoz - psnkipters
Unrealizer è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2011, 14:40   #11
jedineon
Member
 
L'Avatar di jedineon
 
Iscritto dal: Jan 2011
Città: Napoli
Messaggi: 30
lo so, anzi lo BEN so, però al momento questo progetto un pò vecchio è scritto in CCS e siccome ha delle gestioni degli interrput un pò complesse voglio evitare di fare il porting per C18, visto che lo utilizzo da poco e non sono abbastanza smaliziato; in ogni caso ho iniziato col C18 e credo proprio che lo userò, per ora ho dato un'occhiata soprattutto alla gestione della USB e in particolare alla USB - MIDI e usb audio
__________________
Membro dell'Hardware Upgrade Aerospace Group
Trattative concluse con: Gian92, rebagliatiedilio
jedineon è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2011, 19:24   #12
Unrealizer
Senior Member
 
L'Avatar di Unrealizer
 
Iscritto dal: May 2006
Città: Milano&Palermo
Messaggi: 10273
Quote:
Originariamente inviato da jedineon Guarda i messaggi
lo so, anzi lo BEN so, però al momento questo progetto un pò vecchio è scritto in CCS e siccome ha delle gestioni degli interrput un pò complesse voglio evitare di fare il porting per C18, visto che lo utilizzo da poco e non sono abbastanza smaliziato; in ogni caso ho iniziato col C18 e credo proprio che lo userò, per ora ho dato un'occhiata soprattutto alla gestione della USB e in particolare alla USB - MIDI e usb audio
USB-midi? o.o
io aspetto che mi arrivino i 18F4550 e la l'assegnazione del PID per smanettare con l'USB HID
__________________
PC9Ryzen 9 3900X64GB Vengeance LPXGigabyte RTX3080TiCorsair MP600Aorus Elite X570 - PC10SQ216GB LPDDR4256 GB SSDSurface Pro X - PC11Core i9-9980HK64GB DDR4512GB SSDMacBook Pro 2019 - xboxlivekipters - originkipter - steamkippoz - psnkipters
Unrealizer è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2011, 09:29   #13
jedineon
Member
 
L'Avatar di jedineon
 
Iscritto dal: Jan 2011
Città: Napoli
Messaggi: 30
assegnazione del pid? e a che ti serve? io la HID l'ho fatta andare senza problemi usando VID e PID a casaccio, oppure usando quelli Microchip!
__________________
Membro dell'Hardware Upgrade Aerospace Group
Trattative concluse con: Gian92, rebagliatiedilio
jedineon è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2011, 13:42   #14
Unrealizer
Senior Member
 
L'Avatar di Unrealizer
 
Iscritto dal: May 2006
Città: Milano&Palermo
Messaggi: 10273
Quote:
Originariamente inviato da jedineon Guarda i messaggi
assegnazione del pid? e a che ti serve? io la HID l'ho fatta andare senza problemi usando VID e PID a casaccio, oppure usando quelli Microchip!
sto aspettando proprio quelli Microchip... in ogni caso, aspetto pure i 4550
__________________
PC9Ryzen 9 3900X64GB Vengeance LPXGigabyte RTX3080TiCorsair MP600Aorus Elite X570 - PC10SQ216GB LPDDR4256 GB SSDSurface Pro X - PC11Core i9-9980HK64GB DDR4512GB SSDMacBook Pro 2019 - xboxlivekipters - originkipter - steamkippoz - psnkipters
Unrealizer è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Lapt...
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Decisione storica ad Amburgo: i cittadin...
Questo è il nuovo motore elettric...
HUAWEI WATCH GT 6: lo smartwatch 'infini...
Fotografia con AI: ecco Caria, la macchi...
PlayStation 6 vs Xbox Magnus: il rumor s...
DJI Osmo Action 4 a soli 208€ su Amazon:...
Irion, la data governance diventa strate...
EHang VT35: debutta in Cina il nuovo aer...
Cooler Master MasterLiquid Atmos II 360:...
Trapela in rete la roadmap dei nuovi gio...
In Germania la prima centrale solare gal...
Iliad lancia TOP 250 PLUS e TOP 300 PLUS...
UE: nuovi standard per i caricabatterie,...
Fine supporto Windows 10: breve guida pr...
Cyber Arena Tour: WINDTRE BUSINESS porta...
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: 15:40.


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