Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
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: 22055
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: 22055
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


Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
The Duskbloods potrebbe arrivare a fine ...
Il miglior pesce d'aprile del mondo Linu...
Monopattini elettrici a 62 km/h fermati ...
OpenAI porta la modalità vocale d...
Mercedes-Benz introduce lo steer-by-wire...
Hacker agli Uffizi, il museo smentisce: ...
Nvidia mostra il futuro della grafica co...
Windows 11, scattano gli aggiornamenti f...
TIM lancia l'offerta di Pasqua: Giga ill...
Prime foto reali per OPPO Find X9 Ultra:...
Il leak di Claude Code diventa un'esca: ...
Netflix, batosta in Italia: aumenti ille...
UFO e complotti: chi si cela dietro la n...
Batterie EV difficili da riciclare: il p...
Non vuoi targare il monopattino? Engwe h...
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:27.


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