"Not enough RAM" dans mikroC
Résolu
handballeur68
Messages postés
123
Statut
Membre
-
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
- Telecharger de la ram ✓ - Forum Téléchargement
- 2 paires de ram différentes - Forum Carte-mère/mémoire
- Ram low profile - Forum Matériel & Système
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').