BaroneRosso.it - Forum Modellismo

BaroneRosso.it - Forum Modellismo (https://www.baronerosso.it/forum/)
-   Circuiti Elettronici (https://www.baronerosso.it/forum/circuiti-elettronici/)
-   -   pic con memoria insufficiente (https://www.baronerosso.it/forum/circuiti-elettronici/165697-pic-con-memoria-insufficiente.html)

frank 07 marzo 10 12:28

Fai un ciclo, e in ciascun passo confronti la variabile con una maschera a bit, che sposti di volta in volta con l'operatore di spostamento bitwise a sinistra. Quando trovi che l'AND bitwise è 1, hai trovato quale bit è acceso, quindi quale paglione.

lol21 07 marzo 10 13:42

ma degli array come quell'esempio che ho fatto prima non potrebbe andare bene? :blink:
conta che questo è uni dei miei primi programmi ed è per questo che uso anche le librerie esterne, non mi pareva così complicato, programmi di gestione lcd led e pulsanti ne avevo già fatti, questo sarebbe più un'unione di più programmi già fatti.

dunque non sarebbe più facile fare una cosa del genere sapendo poi che dovrei probabilmente fare altre modifiche in futuro e se aggiungessi pulsanti mi basterebbe aggiungere un valore all'array? :wacko:

ciao e grazie
lol21

roberto88m 07 marzo 10 14:03

per illez:::
ma che fine hai fatto? ti ho mandato pm e nn rispondi....

frank 07 marzo 10 15:42

Citazione:

Originalmente inviato da lol21 (Messaggio 1963194)
ma degli array come quell'esempio che ho fatto prima non potrebbe andare bene? :blink:
conta che questo è uni dei miei primi programmi ed è per questo che uso anche le librerie esterne, non mi pareva così complicato, programmi di gestione lcd led e pulsanti ne avevo già fatti, questo sarebbe più un'unione di più programmi già fatti.

dunque non sarebbe più facile fare una cosa del genere sapendo poi che dovrei probabilmente fare altre modifiche in futuro e se aggiungessi pulsanti mi basterebbe aggiungere un valore all'array? :wacko:

ciao e grazie
lol21

Anche gli array statici occupano memoria. Se devi risparmiare all'ultimo byte, credo che niente batta l'uso di un ciclo già a partire da 4-5 paglioni.

lol21 07 marzo 10 16:50

ok grazie dell'aiuto vi farò sapere :wink:
ma le variabili comunque non occupano RAM? io ho problemi di ROM

ciao
lol21

frank 07 marzo 10 16:53

Citazione:

Originalmente inviato da lol21 (Messaggio 1963427)
ok grazie dell'aiuto vi farò sapere :wink:
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.

lol21 08 marzo 10 13:10

oooooooooooooooooooooooooooooooooooooook, vaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaa bene :P

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

grazie a tutti intanto, vi farò sapere se funziona :wink:

ciao
lol21

illez 08 marzo 10 14:21

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...:wink:

lol21 08 marzo 10 14:27

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

frank 08 marzo 10 14:28

Citazione:

Originalmente inviato da lol21 (Messaggio 1964772)
magari riprovo coi cicli cercando anche altri esempi online perchè non ho mai fatto come hai detto tu :D

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.


Tutti gli orari sono GMT +2. Adesso sono le 07:48.

Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002