Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

control reaches end

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] control reaches end

Messaggioda Foto UtenteEcoTan » 11 gen 2019, 16:23

Per iniziare la programmazione di un dsPic33 nuovo, provo la cosa più semplice: blinking led? Ancora meno, accendere un led e basta. Il led fa una luce fioca, guardo con l'oscilloscopietto tascabile e vedo le cose più strane.
Dopo qualche ora persa a fare prove e confronti, noto un messaggio in rosso del compilatore: warning: control reaches end of non-void function.
Aggiungo while(1); prima della parentesi graffa finale e tutto va a posto. Chissà cosa succedeva?
Avatar utente
Foto UtenteEcoTan
5.350 4 10 13
Expert EY
Expert EY
 
Messaggi: 3225
Iscritto il: 29 gen 2014, 8:54

1
voti

[2] Re: control reaches end

Messaggioda Foto Utentegvee » 11 gen 2019, 16:28

EcoTan ha scritto:Chissà cosa succedeva?

Che hai una funzione non void (da quanto fai capire è la main) che non ritorna nulla se viene raggiunta la fine della sua esecuzione.
Avatar utente
Foto Utentegvee
570 2 6
Frequentatore
Frequentatore
 
Messaggi: 204
Iscritto il: 11 feb 2018, 20:34

1
voti

[3] Re: control reaches end

Messaggioda Foto Utentebanjoman » 11 gen 2019, 17:12

Sarebbe piu' istruttivo postare il codice che provocava il funzionamento anomalo e la tua correzione.
COsi' altri utenti potrebbero trarne vantaggio..... :-)
Se funziona quasi bene, è tutto sbagliato. A.Savatteri/M.Mazza
Avatar utente
Foto Utentebanjoman
7.203 5 8 11
Master EY
Master EY
 
Messaggi: 1130
Iscritto il: 19 set 2013, 19:27

0
voti

[4] Re: control reaches end

Messaggioda Foto UtenteEcoTan » 11 gen 2019, 17:54

Codice: Seleziona tutto
#include "fusebit.c"
#include "p33FJ128MC802.h"        //fusebit fastRC wPLL e tutto libero
//_FOSCSEL (FNOSC_FRCPLL & IESO_ON) //Oscillatore FastRC 7,37 MHz with PLL
//pin 12 ledv, 14 ledr,
#define ledv _LATA4        // RA4 pin12 led verde
#define ledr _LATB5        // RB5 pin14 led rosso

int main (void) {                   //Main Program
PLLFBDbits.PLLDIV=41;               // M=43 PLLDIV=41 clock oscillator Tcy=25 ns
CLKDIVbits.PLLPOST=0;               // N1=2  N2=2(default) 7.37*M/N1/N2=79Mhz~40MIPS
while (OSCCONbits.COSC != 0b001){}; // Sure for FastRC w PLL   
while(OSCCONbits.LOCK!=1) {};       // Wait for PLL to lock

TRISA = 0b1111111111101111;         //OUT RA4 PIN12 LED verde
TRISB = 0b1111111111011111;         //OUT RB5 PIN14 LED rosso

ledv=1; ledr=1;
//while (1);
}

Allora: il compilatore dà il warning, sul pin 14 vedo una tensione di circa 1 V (la alimentazione è 3,3V) con sovrapposto un bruttissimo dente di sega irregolare ogni cira 20 microsec.
Togliendo il // prima del while (e ovviamente riprogrammando il micro), il compilatore non dà il warning e la tensione sul pin 14 è pulita, oltre 3V.
Il compilatore è XC16 sotto MPLABX con Pickit3 marcato W MPLABIDE
Avatar utente
Foto UtenteEcoTan
5.350 4 10 13
Expert EY
Expert EY
 
Messaggi: 3225
Iscritto il: 29 gen 2014, 8:54

0
voti

[5] Re: control reaches end

Messaggioda Foto Utentegvee » 11 gen 2019, 18:02

Scusa ma a parte il warning, se togli il ciclo infinito, cosa ti aspetti che faccia il micro ? :roll:
Avatar utente
Foto Utentegvee
570 2 6
Frequentatore
Frequentatore
 
Messaggi: 204
Iscritto il: 11 feb 2018, 20:34

0
voti

[6] Re: control reaches end

Messaggioda Foto UtenteEcoTan » 11 gen 2019, 18:07

Io pensavo che accendesse i led e basta, ma è chiaro che sbagliavo.
Mi sembra incomprensibile però quel tipo di uscita (dimenticavo, abbiamo come carico un led rosso da 3 mm con 820 ohm in serie), capirei basso, alto, appeso, onda quadra, ma una uscita disturbata che senso avrebbe? Semplice curiosità.
Allegherei la foto dell'oscilloscopio ma purtroppo da quando ho il Samsung Galaxy J6 non riesco più a travasare le foto sul PC col cavetto USB.
Avatar utente
Foto UtenteEcoTan
5.350 4 10 13
Expert EY
Expert EY
 
Messaggi: 3225
Iscritto il: 29 gen 2014, 8:54

0
voti

[7] Re: control reaches end

Messaggioda Foto Utentegvee » 11 gen 2019, 18:15

Analizzare il disassembling del codice con il ciclo infinito commentato è uno spunto per vedere cosa fa il PIC.
Avatar utente
Foto Utentegvee
570 2 6
Frequentatore
Frequentatore
 
Messaggi: 204
Iscritto il: 11 feb 2018, 20:34

0
voti

[8] Re: control reaches end

Messaggioda Foto UtenteEcoTan » 11 gen 2019, 18:22

Si OK, ma per me è fuori portata, rimarrà la curiosità.
Avatar utente
Foto UtenteEcoTan
5.350 4 10 13
Expert EY
Expert EY
 
Messaggi: 3225
Iscritto il: 29 gen 2014, 8:54

0
voti

[9] Re: control reaches end

Messaggioda Foto UtenteIlGuru » 11 gen 2019, 18:53

Magari il micro si restarta all'infinito ogni volta che raggiunge la fine delle istruzioni.
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
4.134 1 10 13
Master
Master
 
Messaggi: 1372
Iscritto il: 31 lug 2015, 23:32

0
voti

[10] Re: control reaches end

Messaggioda Foto Utentebanjoman » 11 gen 2019, 22:16

Effettivamente non mi sono mai posto il problema su cosa succede all'uscita dal main() di un micro, dato che per ovvie ragioni praticamente nessuno lo fa terminare apposta.
Argomento interessante secondo me... :-)
Se funziona quasi bene, è tutto sbagliato. A.Savatteri/M.Mazza
Avatar utente
Foto Utentebanjoman
7.203 5 8 11
Master EY
Master EY
 
Messaggi: 1130
Iscritto il: 19 set 2013, 19:27

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti