Pagina 1 di 1

disabilitazione "automatica" degli interrupt

MessaggioInviato: 21 mar 2010, 15:23
da Matteo91
quando compilo un programma in ccs mi da i seguinti warning:
"interrupt disabled during call to prevent re-entrancy :(@delay_ms(1))" (gli altri warning sono simili cambia solo l'istruzione...)
premetto che il delay è nel main,mentre tutti gli altri sono all'interno della sub di interrupt...

qualche consiglio??? :)

Re: disabilitazione "automatica" degli interrupt

MessaggioInviato: 21 mar 2010, 20:35
da Paolino
Matteo91 ha scritto:qualche consiglio??? :)

Sì, solo uno: all'interno delle routine di interrupt, i ritardi con funzioni tipo delay oppure "cicli for" di conteggio vanno evitati come la peste!
Se stai cercando di fare una routine di antirimbalzo ti consiglio caldamente altri approcci!
Altrimenti tutto il vantaggio che ne deriva dall'uso degli interrupt si vanifica...!

Ciao.

Paolo.

Re: disabilitazione "automatica" degli interrupt

MessaggioInviato: 21 mar 2010, 21:37
da Matteo91
Paolino ha scritto:all'interno delle routine di interrupt, i ritardi con funzioni tipo delay oppure "cicli for" di conteggio vanno evitati come la peste!

ahah infatti ho imparato la lezione...XD
però adesso mi da sempre lo stesso errore però non esiste !!! ç _ ç
cioè,mi dice "warning line 64..." il programma finisce a 59! :shock:
me lo da in "@delay_ms1" ....il problema è che li non ci sono delay!

Re: disabilitazione "automatica" degli interrupt

MessaggioInviato: 21 mar 2010, 21:41
da DonJ
Avrai fatto un poccio di quelli che ci perdi un'ora per poi scoprire che era una virgola. :mrgreen:

Posta il codice che ci diamo un'occhiata

Re: disabilitazione "automatica" degli interrupt

MessaggioInviato: 21 mar 2010, 22:38
da Matteo91
DonJ ha scritto:Avrai fatto un poccio di quelli che ci perdi un'ora per poi scoprire che era una virgola. :mrgreen:

sicuro!! :) spesso una virgola o un'istruzione ti fa penare più di una donna!!!ahaha
mah,guarda il codice è banale:
Codice: Seleziona tutto
void main()
{
   setup_adc_ports(AN0_VREF_VREF);//settaggio del canale A0 e vref+ = A3 ;Vref- = A2
   setup_adc(ADC_OFF);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
    setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_RB);
   lcd_init();
   PWM=10; //variabile di prova!
   while(1){
   lcd_putc("\f"); //pulitura il display
   lcd_gotoxy(1,1);
   lcd_putc("PWM al:");
   lcd_gotoxy(1,8);
   printf(lcd_putc,"%u",PWM); //scrive sul display il valore del PWM
   }
}
/// l'errore me lo da in questa linea...ma non c'è niente!!!  :shock:


quando lo compilo mi da il seguente warning:
interupts disabled during call to prevent re-entrancy:( @delay_ms1)

la variuabile PWM verrà in seguito generada da un'altra sub in base alle necessita...al momenento la fisso !XD

Re: disabilitazione "automatica" degli interrupt

MessaggioInviato: 22 mar 2010, 11:28
da c1b8
Il codice che hai postato non mi pare abbia problemi, ma è solo una parte del sorgente. Il problema potrebbe essere da altre parti.
Ad esempio in una funzione precedente al main ci potrebbero essere o mancare delle { o delle }.

Re: disabilitazione "automatica" degli interrupt

MessaggioInviato: 22 mar 2010, 20:15
da Matteo91
c1b8 ha scritto:Il codice che hai postato non mi pare abbia problemi, ma è solo una parte del sorgente. Il problema potrebbe essere da altre parti.
Ad esempio in una funzione precedente al main ci potrebbero essere o mancare delle { o delle }.

prima mi dava lo stesso warning in sottoprogrammi che richiedevano delay.....però stavano nell'interrupt!li ho tolti e messi fuori dall'interrupt....però "esistevano",cioè dove dava il warning c'èra l'istruzione!!!!!!
qui non c'è niente!!!! :shock: :shock:

Re: disabilitazione "automatica" degli interrupt

MessaggioInviato: 22 mar 2010, 23:03
da c1b8
Quello che volevo dire è che non è possibile verificare se è presente qualche errore solo vedendo una parte del codice, o lo si vede tutto o è difficile/impossibile formulare una ipotesi di soluzione.
Non per questo l'errore è necessariamente nel codice, potrebbe essere un problema di progetto: qualche flag impostato nel modo non corretto. Il fatto che ti segnali errore in righe di codice che non sono presenti potrebbe significare che nemmeno tenta di compilare o che tenta di compilare qualche cosa di diverso da quello che tu ti aspetti compili (altri file).
E', in definitiva, una situazione molto strana e dovrebbe essere valutata nel complesso.
perché non provi a creare ex novo un progetto e quindi copiare il codice che ti interessa, non copiare i file ma il codice.