Probleme de recursion CCS

yummyu - 22 avril 2013 à 19:13
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 22 avril 2013 à 21:35
bonjour tout le monde ,
Voila je suis en terminal pour mon projet je dois réaliser toute la programmation d'un projecteur de lumières du type rvb-56 . Dans le projecteur il y a un micro qui permet lorsqu'il fonctionne de faire changer le jeux de lumières pour ce faire je dois donc réaliser une fonction réception son je travaille sur un pic 18F4550 sous CCS j'ai donc réaliser la fonction .Problème CCS n'arrête pas de me dire que j'ai un problème de récursion dans ma fonction principal. je vous en prie aidez moi.

cordialement speedygoncalesse.


#include "d:\Documents and Settings\Bureau\recep_son.h"

void main();
void lecture();
void affichage();


void init()
{

setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab

// TODO: USER CODE!!

}


void lecture()
{
int1 x;
do
{
x==input_state(PIN_B0);
}
while(x==0);
}

void affichage()
{
int8 compteur;
compteur++;
switch(compteur)
{
case (1):
do
{
output_toggle(PIN_D5);
}
while(delay_ms(300));
break;

case (2):
do
{
output_toggle(PIN_D6);
}
while(delay_ms(300));
break;

case (3):
do
{
output_toggle(PIN_D7);
}
while(delay_ms(300));
break;

case (4):
do
{
output_high(PIN_D5);
delay_ms(100);
output_low(PIN_D5);
output_high(PIN_D6);
delay_ms(100);
output_low(PIN_D6);
}
while(delay_ms(300));
break;

case (5):
do
{
output_high(PIN_D6);
delay_ms(100);
output_low(PIN_D6);
output_high(PIN_D7);
delay_ms(100);
output_low(PIN_D7);
}
while(delay_ms(300));
break;

case (6):
do
{
output_high(PIN_D5);
delay_ms(100);
output_low(PIN_D5);
output_high(PIN_D7);
delay_ms(100);
output_low(PIN_D7);
}
while(delay_ms(300));
break;

case (7):
do
{
output_toggle(PIN_D5);
delay_ms(100);
output_toggle(PIN_D6);
delay_ms(100);
output_toggle(PIN_D7);
delay_ms(100);
}
while(delay_ms(900));
break;

default:
if(compteur>8)
{
compteur=0;
lecture();
}
else
{
main();
}
break;
}
lecture();
}

void main()
{
init();
lecture();
affichage(); // voila ou il m'affiche mon problème de récursion
}

1 réponse

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
22 avril 2013 à 21:35
Salut

c'est légal ça ?

int8 compteur;
compteur++; //<-------
switch(compteur)

normalement on a une erreur du style "uninitialized variable"

A mon avis, si l'erreur sur compteur non initialisé passe chez toi,
tu dois toujours entrer dans le cas
else
{
main();
}
ce qui fait un explosion de la stack
puisque compteur n'est jamais > à 8


bye...
0
Rejoignez-nous