Domanda

Qual è il modo migliore per ripristinare un Pic18 usando il codice C. Con il compilatore HiTech Pic18 C

Modifica:

Sto utilizzando ora

void reset()
{
#asm 
  reset
#endasm
}

ma deve esserci un modo migliore

È stato utile?

Soluzione

C'è una FAQ qui .

D: Come posso resettare il micro?

  

Un modo è reimpostare tutte le variabili su   i loro valori predefiniti, come elencato nel PIC   Manuale. Quindi, utilizzare il linguaggio assembly   per passare alla posizione 0x0000 in   micro.

     

#asm ljmp 0x0000

     

#endasm

     

Questo è abbastanza sicuro da usare, anche quando   chiamato all'interno di interrupt o   procedure. I micro serie PIC 16x   avere 8 livelli di stack. Ogni volta a   viene chiamata procedura, un livello di stack   è utilizzato per l'indirizzo di ritorno. esso   è un buffer circolare, quindi anche se   micro è profondo 7 livelli di procedura e   in un interrupt quando è un reset   chiamato, questo è il nuovo inizio di   stack buffer e micro volontà   continuare come di consueto.

     

Un altro modo è di impostare il watchdog   timer quando il chip è programmato e   utilizzare le istruzioni CLRWDT () per tutto   il codice. Quando vuoi il micro   reimpostare, interrompere la cancellazione del bit del watchdog   e il micro si ripristinerà dopo circa   18ms a 2 secondi a seconda del   prescaler.

Altri suggerimenti

I compilatori di solito hanno la loro funzione reset () incorporata, ma fa esattamente quello che fa la tua funzione e il nome effettivo può variare da compilatore a compilatore.

Lo stai già facendo nel modo migliore.

La tua risposta è il modo migliore che io conosca. La chiave è che hai un'istruzione assembly all'interno di una chiamata di funzione, tutto da solo.   Il compilatore non ottimizzerà una funzione che ha inline assembly in esso, quindi se si include l'istruzione reset inline a una funzione molto grande, il compilatore non ottimizzerà alcun codice in quella funzione. Lo hai evitato mettendo Reset nella sua propria funzione. Il codice in questa funzione non sarà ottimizzato, ma chi se ne frega, dal momento che è una funzione così piccola.

A meno che non ci sia una funzione di libreria definita dalla libreria di runtime del produttore del compilatore (se tale lib esiste anche nel mondo dei microcontrollori ... ma dovrebbe), allora no. C stesso certamente non ti aiuterà, facendo "un reset" è di gran lunga un problema specifico della piattaforma per C per coprirlo.

Uso il compilatore ccsinfo.com, che ha una chiamata API simile per ripristinare il PIC, ma penso che la soluzione del compilatore farebbe la cosa giusta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top