"Not enough RAM" dans mikroC
Résolu
handballeur68
Messages postés
119
Date d'inscription
Statut
Membre
Dernière intervention
-
loupius -
loupius -
Bonjour,
Comme l'indique le titre du sujet, je travaille sur mikroC, dans le but de programmer un PIC. Cependant, lorsque je veux compiler, il me dit qu'il n'y a pas assez de RAM. Or je trouve que mon programme n'est pas très long comparé aux grands programmes que j'ai déjà vu.
Quelqu'un aurait il une solution ? Je travaille sur un PIC P16F887A et voici le code :
void main()
{
unsigned char e = 3;
unsigned char premiere = 0;
unsigned char deuxieme = 0;
unsigned char troisieme = 0;
unsigned char quatrieme = 0;
unsigned int codeEnVigueur = 1234;
unsigned int premiereP = 0;
unsigned int deuxiemeP = 0;
unsigned int troisiemeP = 0;
unsigned int quatriemeP = 0;
unsigned int total = 0;
char i = 0;
Glcd_Init(&PORTB, 0,1,2,3,5,4, &PORTD);
Glcd_Fill(0);
Glcd_Set_Font(FontSystem5x8, 5, 8, 32);
ADCON1 = 0b00000110;
TRISA = 0b11111111;
TRISB = 0b11111100;
while(1)
{
Glcd_Write_Text("Il vous reste", 0, 0, 1);
Glcd_Write_Text(e, 0, 1, 1);
Glcd_Write_Text("essai", 3, 1, 1);
if(e == 0)
{
Glcd_Write_Text("Serrure bloquée pour 10 secondes", 0, 0, 1);
Delay_ms(10000);
}
else
{
if(i < 4)
{
Glcd_Write_Text("Saisir code!", 0, 0, 1);
}
switch (i)
{
case 0:
while(i != 1)
{
if (PORTA.F0==1)
{
premiere = 0;
i++;
}
else if(PORTA.F1 == 1)
{
premiere = 1;
i++;
}
else if(PORTA.F2 == 1)
{
premiere = 2;
i++;
}
else if(PORTA.F3 == 1)
{
premiere = 3;
i++;
}
else if(PORTA.F4 == 1)
{
premiere = 4;
i++;
}
else if(PORTA.F5 == 1)
{
premiere = 5;
i++;
}
else if(PORTA.F6 == 1)
{
premiere = 6;
i++;
}
else if(PORTA.F7 == 1)
{
premiere = 7;
i++;
}
else if(PORTC.F0 == 1)
{
premiere = 8;
i++;
}
else if(PORTC.F1 == 1)
{
premiere = 9;
i++;
}
}
break;
case 1:
while(i != 2)
{
if (PORTA.F0 == 1)
{
deuxieme = 0;
i++;
}
else if(PORTA.F1 == 1)
{
deuxieme = 1;
i++;
}
else if(PORTA.F2 == 1)
{
deuxieme = 2;
i++;
}
else if(PORTA.F3 == 1)
{
deuxieme = 3;
i++;
}
else if(PORTA.F4 == 1)
{
deuxieme = 4;
i++;
}
else if(PORTA.F5 == 1)
{
deuxieme = 5;
i++;
}
else if(PORTA.F6 == 1)
{
deuxieme = 6;
i++;
}
else if(PORTA.F7 == 1)
{
deuxieme = 7;
i++;
}
else if(PORTC.F0 == 1)
{
deuxieme = 8;
i++;
}
else if(PORTC.F1 == 1)
{
deuxieme = 9;
i++;
}
}
break;
case 2:
while(i != 3)
{
if (PORTA.F0 == 1)
{
troisieme = 0;
i++;
}
else if(PORTA.F1 == 1)
{
troisieme = 1;
i++;
}
else if(PORTA.F2 == 1)
{
troisieme = 2;
i++;
}
else if(PORTA.F3 == 1)
{
troisieme = 3;
i++;
}
else if(PORTA.F4 == 1)
{
troisieme = 4;
i++;
}
else if(PORTA.F5 == 1)
{
troisieme = 5;
i++;
}
else if(PORTA.F6 == 1)
{
troisieme = 6;
i++;
}
else if(PORTA.F7 == 1)
{
troisieme = 7;
i++;
}
else if(PORTC.F0 == 1)
{
troisieme = 8;
i++;
}
else if(PORTC.F1 == 1)
{
troisieme = 9;
i++;
}
}
break;
case 3:
while(i != 4)
{
if (PORTA.F0 == 1)
{
quatrieme = 0;
i++;
}
else if(PORTA.F1 == 1)
{
quatrieme = 1;
i++;
}
else if(PORTA.F2 == 1)
{
quatrieme = 2;
i++;
}
else if(PORTA.F3 == 1)
{
quatrieme = 3;
i++;
}
else if(PORTA.F4 == 1)
{
quatrieme = 4;
i++;
}
else if(PORTA.F5 == 1)
{
quatrieme = 5;
i++;
}
else if(PORTA.F6 == 1)
{
quatrieme = 6;
i++;
}
else if(PORTA.F7 == 1)
{
quatrieme = 7;
i++;
}
else if(PORTC.F0 == 1)
{
quatrieme = 8;
i++;
}
else if(PORTC.F1 == 1)
{
quatrieme = 9;
i++;
}
}
break;
}
}
}
premiereP = premiere*1000;
deuxiemeP = deuxieme*100;
troisiemeP = troisieme*10;
quatriemeP = quatrieme*1;
total = premiereP + deuxiemeP + troisieme + quatriemeP;
e--;
if(total == codeEnVigueur)
{
Glcd_Write_Text("Code OK", 0, 0, 1);
Glcd_Write_Text("Ouverture gache.", 0, 1, 1);
PORTB.F1 = 1;
Delay_ms(5000);
PORTB.F1 = 0;
}
}
Comme l'indique le titre du sujet, je travaille sur mikroC, dans le but de programmer un PIC. Cependant, lorsque je veux compiler, il me dit qu'il n'y a pas assez de RAM. Or je trouve que mon programme n'est pas très long comparé aux grands programmes que j'ai déjà vu.
Quelqu'un aurait il une solution ? Je travaille sur un PIC P16F887A et voici le code :
void main()
{
unsigned char e = 3;
unsigned char premiere = 0;
unsigned char deuxieme = 0;
unsigned char troisieme = 0;
unsigned char quatrieme = 0;
unsigned int codeEnVigueur = 1234;
unsigned int premiereP = 0;
unsigned int deuxiemeP = 0;
unsigned int troisiemeP = 0;
unsigned int quatriemeP = 0;
unsigned int total = 0;
char i = 0;
Glcd_Init(&PORTB, 0,1,2,3,5,4, &PORTD);
Glcd_Fill(0);
Glcd_Set_Font(FontSystem5x8, 5, 8, 32);
ADCON1 = 0b00000110;
TRISA = 0b11111111;
TRISB = 0b11111100;
while(1)
{
Glcd_Write_Text("Il vous reste", 0, 0, 1);
Glcd_Write_Text(e, 0, 1, 1);
Glcd_Write_Text("essai", 3, 1, 1);
if(e == 0)
{
Glcd_Write_Text("Serrure bloquée pour 10 secondes", 0, 0, 1);
Delay_ms(10000);
}
else
{
if(i < 4)
{
Glcd_Write_Text("Saisir code!", 0, 0, 1);
}
switch (i)
{
case 0:
while(i != 1)
{
if (PORTA.F0==1)
{
premiere = 0;
i++;
}
else if(PORTA.F1 == 1)
{
premiere = 1;
i++;
}
else if(PORTA.F2 == 1)
{
premiere = 2;
i++;
}
else if(PORTA.F3 == 1)
{
premiere = 3;
i++;
}
else if(PORTA.F4 == 1)
{
premiere = 4;
i++;
}
else if(PORTA.F5 == 1)
{
premiere = 5;
i++;
}
else if(PORTA.F6 == 1)
{
premiere = 6;
i++;
}
else if(PORTA.F7 == 1)
{
premiere = 7;
i++;
}
else if(PORTC.F0 == 1)
{
premiere = 8;
i++;
}
else if(PORTC.F1 == 1)
{
premiere = 9;
i++;
}
}
break;
case 1:
while(i != 2)
{
if (PORTA.F0 == 1)
{
deuxieme = 0;
i++;
}
else if(PORTA.F1 == 1)
{
deuxieme = 1;
i++;
}
else if(PORTA.F2 == 1)
{
deuxieme = 2;
i++;
}
else if(PORTA.F3 == 1)
{
deuxieme = 3;
i++;
}
else if(PORTA.F4 == 1)
{
deuxieme = 4;
i++;
}
else if(PORTA.F5 == 1)
{
deuxieme = 5;
i++;
}
else if(PORTA.F6 == 1)
{
deuxieme = 6;
i++;
}
else if(PORTA.F7 == 1)
{
deuxieme = 7;
i++;
}
else if(PORTC.F0 == 1)
{
deuxieme = 8;
i++;
}
else if(PORTC.F1 == 1)
{
deuxieme = 9;
i++;
}
}
break;
case 2:
while(i != 3)
{
if (PORTA.F0 == 1)
{
troisieme = 0;
i++;
}
else if(PORTA.F1 == 1)
{
troisieme = 1;
i++;
}
else if(PORTA.F2 == 1)
{
troisieme = 2;
i++;
}
else if(PORTA.F3 == 1)
{
troisieme = 3;
i++;
}
else if(PORTA.F4 == 1)
{
troisieme = 4;
i++;
}
else if(PORTA.F5 == 1)
{
troisieme = 5;
i++;
}
else if(PORTA.F6 == 1)
{
troisieme = 6;
i++;
}
else if(PORTA.F7 == 1)
{
troisieme = 7;
i++;
}
else if(PORTC.F0 == 1)
{
troisieme = 8;
i++;
}
else if(PORTC.F1 == 1)
{
troisieme = 9;
i++;
}
}
break;
case 3:
while(i != 4)
{
if (PORTA.F0 == 1)
{
quatrieme = 0;
i++;
}
else if(PORTA.F1 == 1)
{
quatrieme = 1;
i++;
}
else if(PORTA.F2 == 1)
{
quatrieme = 2;
i++;
}
else if(PORTA.F3 == 1)
{
quatrieme = 3;
i++;
}
else if(PORTA.F4 == 1)
{
quatrieme = 4;
i++;
}
else if(PORTA.F5 == 1)
{
quatrieme = 5;
i++;
}
else if(PORTA.F6 == 1)
{
quatrieme = 6;
i++;
}
else if(PORTA.F7 == 1)
{
quatrieme = 7;
i++;
}
else if(PORTC.F0 == 1)
{
quatrieme = 8;
i++;
}
else if(PORTC.F1 == 1)
{
quatrieme = 9;
i++;
}
}
break;
}
}
}
premiereP = premiere*1000;
deuxiemeP = deuxieme*100;
troisiemeP = troisieme*10;
quatriemeP = quatrieme*1;
total = premiereP + deuxiemeP + troisieme + quatriemeP;
e--;
if(total == codeEnVigueur)
{
Glcd_Write_Text("Code OK", 0, 0, 1);
Glcd_Write_Text("Ouverture gache.", 0, 1, 1);
PORTB.F1 = 1;
Delay_ms(5000);
PORTB.F1 = 0;
}
}
A voir également:
- "Not enough RAM" dans mikroC
- Mon pc ram - Guide
- Memoire ram - Guide
- 2 paires de ram différentes - Forum Carte-mère/mémoire
- Ram low profile - Forum Matériel & Système
- Comment savoir combien de ram a mon pc - Guide
23 réponses
Tu dévis du sujet
Si c'est possible et je le sais. Tout ce qui est " const char..." il le met dans le ROM.
C'est sur ça que je m'appuie. Je stocke mon texte là bas. Ce que j'attends c'est le code qui permette d'afficher un 'char' sur le LCD. Le connais tu ?
Merci
Si c'est possible et je le sais. Tout ce qui est " const char..." il le met dans le ROM.
C'est sur ça que je m'appuie. Je stocke mon texte là bas. Ce que j'attends c'est le code qui permette d'afficher un 'char' sur le LCD. Le connais tu ?
Merci
Voila la réponse qu'il me fallait =)=)
Merci de ta disponibilité et pour la rapidité de tes réponses.
Merci de ta disponibilité et pour la rapidité de tes réponses.
Lcd_Chr (1, 2, 'h') ou Lcd_Chr_Cp ('i').