Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 07 marzo 10, 16:50   #1 (permalink)  Top
User
 
L'avatar di lol21
 
Data registr.: 16-11-2008
Residenza: Riva del Garda - TN
Messaggi: 429
ok grazie dell'aiuto vi farò sapere
ma le variabili comunque non occupano RAM? io ho problemi di ROM

ciao
lol21
lol21 non è collegato   Rispondi citando
Vecchio 07 marzo 10, 16:53   #2 (permalink)  Top
User
 
L'avatar di frank
 
Data registr.: 29-11-2002
Residenza: Mountain View, CA
Messaggi: 4.390
Citazione:
Originalmente inviato da lol21 Visualizza messaggio
ok grazie dell'aiuto vi farò sapere
ma le variabili comunque non occupano RAM? io ho problemi di ROM

ciao
lol21
Se sono array statici non è detto, il compilatore potrebbe allocarle in ROM. Ma dovrebbe essere documentato nel manuale.
__________________
The number you dialed is imaginary. Please rotate your phone 90 degrees and redial.
frank non è collegato   Rispondi citando
Vecchio 08 marzo 10, 13:10   #3 (permalink)  Top
User
 
L'avatar di lol21
 
Data registr.: 16-11-2008
Residenza: Riva del Garda - TN
Messaggi: 429
oooooooooooooooooooooooooooooooooooooook, vaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaa bene

ora provo con il metodo degli array (si sono duro di testa ) poi magari riprovo coi cicli cercando anche altri esempi online perchè non ho mai fatto come hai detto tu

grazie a tutti intanto, vi farò sapere se funziona

ciao
lol21
lol21 non è collegato   Rispondi citando
Vecchio 08 marzo 10, 14:21   #4 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Ho guardato un po' il codice e devo dire che con un ciclo FOR non risolveresti: hai delle eccezioni da gestire che riguardano i casi 'somma', voglio dire i valori 3,5,6,9 che non sono diretta potenza di 2.
Probabilmente hai già una buona riduzione del codice raccogliendo tutti i casi in una funzione che richiamerai da tutto il codice.
ad esempio

unsigned int function check_porta()
{
switch(PORTA) {
case 1: return 1;
case 2: return 2;
case 3: return 9;
etc etc
}
}

Nel codice scriveresti, per esempio:
arciereb[freb] = check_porta();

Attenzione che comunque hai un paio di eccezioni, come qui:
case 6:
arciereb[freb] = 0;
freb = freb-1;
break;
in questo caso devi comunque controllare porta==6 e decrementare freb

Non conoscendo bene il funzionamento, non credo che si possa fare sempre dentro la funzione. Ma insomma, vedi tu...
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 08 marzo 10, 14:27   #5 (permalink)  Top
User
 
L'avatar di lol21
 
Data registr.: 16-11-2008
Residenza: Riva del Garda - TN
Messaggi: 429
per il case 6 infatti mettevo un if
il fatto che non siano potenze di 2 in realtà è perchè per alquni tasti uso un solo bit acceso per altri anche 2
ad esempio
case 1 (0b00000001)
case 2 (0b00000010)
case 4 (0b00000100)
...
case 3 (0b00000011) da quì non sono più potenze di 2

uso questo modo per non usare pin eccessivi.

grazie dell'aiuto, appena ho un po di tempo butto giù il codice completo

ciao
lol21
lol21 non è collegato   Rispondi citando
Vecchio 08 marzo 10, 14:37   #6 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Citazione:
Originalmente inviato da lol21 Visualizza messaggio
per il case 6 infatti mettevo un if
il fatto che non siano potenze di 2 in realtà è perchè per alquni tasti uso un solo bit acceso per altri anche 2
ad esempio
case 1 (0b00000001)
case 2 (0b00000010)
case 4 (0b00000100)
...
case 3 (0b00000011) da quì non sono più potenze di 2

uso questo modo per non usare pin eccessivi.

grazie dell'aiuto, appena ho un po di tempo butto giù il codice completo

ciao
lol21
I tasti quanti sono? Li hai messi in matrice?
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 16 marzo 10, 14:22   #7 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Citazione:
Originalmente inviato da illez Visualizza messaggio
I tasti quanti sono? Li hai messi in matrice?
Non te lo avevo già suggerito?

Cerco qualcosa che ti possa aiutare, ma non è difficile!
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 08 marzo 10, 14:28   #8 (permalink)  Top
User
 
L'avatar di frank
 
Data registr.: 29-11-2002
Residenza: Mountain View, CA
Messaggi: 4.390
Citazione:
Originalmente inviato da lol21 Visualizza messaggio
magari riprovo coi cicli cercando anche altri esempi online perchè non ho mai fatto come hai detto tu
Guarda qui:

Codice:
// MAXPAGLIONI e' il numero massimo di paglioni
int mask, i;
if (PORTA) 
        for (mask=1, i=1; mask < (1 << MAXPAGLIONI); mask = mask << 1, i++) 
	        if (PORTA & mask) break;
// al termine del ciclo, i contiene il numero del paglione colpito
Questo funziona se, come nel tuo codice, può essere colpito un solo paglione per volta. Se è possibile che vengano colpiti più bersagli insieme, bisogna modificare le cose.
__________________
The number you dialed is imaginary. Please rotate your phone 90 degrees and redial.
frank non è collegato   Rispondi citando
Vecchio 08 marzo 10, 14:37   #9 (permalink)  Top
User
 
L'avatar di frank
 
Data registr.: 29-11-2002
Residenza: Mountain View, CA
Messaggi: 4.390
Anzi, meglio ancora e più efficiente:

Codice:
// MAXPAGLIONI e' il numero massimo di paglioni
int mask, i;
if (PORTA) 
        for (mask=1, i=1; i < MAXPAGLIONI+1; mask = mask << 1, i++) 
	        if (PORTA & mask) break;
// al termine del ciclo, i contiene il numero del paglione colpito
__________________
The number you dialed is imaginary. Please rotate your phone 90 degrees and redial.
frank non è collegato   Rispondi citando
Vecchio 08 marzo 10, 14:40   #10 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Citazione:
Originalmente inviato da frank Visualizza messaggio
Anzi, meglio ancora e più efficiente:

Codice:
// MAXPAGLIONI e' il numero massimo di paglioni
int mask, i;
if (PORTA) 
        for (mask=1, i=1; i < MAXPAGLIONI+1; mask = mask << 1, i++) 
            if (PORTA & mask) break;
// al termine del ciclo, i contiene il numero del paglione colpito
Ci sono le eccezioni in alcuni casi (vedi 3, 5 etc)
i < MAXPAGLIONI+1; è inefficiente. Fai una somma ad ogni ciclo.
piuttosto:
i <= MAXPAGLIONI;
__________________
.......
illez non è collegato   Rispondi citando
Rispondi

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Messaggio
alimentatore insufficiente??? molale81 Batterie e Caricabatterie 2 09 aprile 09 23:35



Tutti gli orari sono GMT +2. Adesso sono le 13:03.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2026
www.baronerosso.it - www.toymagazine.it