Bonjour,
Je me bats toujours avec mon PIC 18F45K20 (code via MPLAB en C). Mon programme devient "important" (program memory = 12000 lignes en ASM).
Je développe avec un PICKIT3.
Depuis mes dernières modifications je me suis rendu compte que mon pic plante de manière assez aléatoire.
En affichant le registre RCON sur le LCD c'est le bit 2 qui passe à 0 après le plantage : soit "Watchdog Time-out".
Je souhaitais savoir si avec simplement un pickit3 j'avais un moyen d'isoler un peu plus précisément la cause du problème.
(effectivement, je peux revenir en arrière niveau software et hardware mais 1-je n'est pas de versioning et 2-le bug est +/- aléatoire).
Pour info si certaines personnes expérimentées ont déjà rencontré ce genre de problèmes, je vous mets les bits de config :
Je pensais à un overflow sur des variables ou quelque chose d'équivalent tout en sachant que j'utilise des structures de taille importantesCode:// CONFIG1H #pragma config FOSC = HS // CONFIG2H #pragma config WDTEN = OFF // CONFIG3H #pragma config MCLRE = ON #pragma config PBADEN = OFF #pragma config HFOFST = ON // CONFIG4L #pragma config STVREN = OFF #pragma config LVP = OFF #pragma config XINST = OFF #pragma config DEBUG = OFF TRISB = 0xFF; OSCCONbits.SCS0 = 0; // Internal oscillator block (P.29) OSCCONbits.SCS1 = 0; // Internal oscillator block (P.29) OSCCONbits.OSTS = 1; // device is running from the clock defined by FOSC<2:0> (P.29) ADCON0bits.ADON = 0; // ADC is disabled and consumes no operating current (P.271) SSPCON1bits.SSPM0 = 0; SSPCON1bits.SSPM1 = 0; SSPCON1bits.SSPM2 = 0; SSPCON1bits.SSPM3 = 0; SSPCON1bits.SSPEN = 1; // Timer 0 T0CONbits.TMR0ON = 1; // Enables Timer0 T0CONbits.T08BIT = 1; // Timer0 is configured as a 8-bit timer/counter T0CONbits.T0CS = 0; // Internal instruction cycle clock (CLKOUT) T0CONbits.T0SE = 1; // Increment on high-to-low transition on T0CKI pin T0CONbits.PSA = 0; // Timer0 prescaler is assigned. Timer0 clock input comes from prescaler output T0CONbits.T0PS0 = 1; // Timer0 Prescaler Select bits (1:2) 000=204.8µs, 111=26ms (presc = 1:16, TMR0L = 101 => 1ms) T0CONbits.T0PS1 = 1; T0CONbits.T0PS2 = 0; // ISR INTCONbits.GIE = 1; // Global Interrupt Enable bit INTCONbits.PEIE = 1; // Peripheral Interrupt Enable bit RCONbits.IPEN = 1; // Enable priority levels on interrupts // ISR-Timer0 INTCONbits.TMR0IF = 0; // TMR0 register did not overflow INTCON2bits.TMR0IP = 1; // Timer0 Interrupt Priority bit (high) INTCONbits.TMR0IE = 0; // Disable the TMR0 overflow interrupt (default = watch stopped) // Timer1 T1CONbits.RD16 = 0; // Enables register read/write of Timer1 in two 8-bit operations T1CONbits.T1CKPS0 = 0; // 1:1 Prescale value T1CONbits.T1CKPS1 = 0; T1CONbits.T1OSCEN = 0; // Timer1 oscillator is shut off T1CONbits.TMR1CS = 1; // External clock from pin RC0/T1OSO/T13CKI (on the rising edge) T1CONbits.TMR1ON = 1; // Enables Timer1 // ISR-INT1 INTCON3bits.INT1IF = 0; // The port B1 interrupt did not occur INTCON3bits.INT1IP = 0; // Port B1 Interrupt Priority bit (low) INTCON3bits.INT1IE = 1; // Enables the port B1 interrupt // ISR-INT2 INTCON3bits.INT2IF = 0; // The port B2 interrupt did not occur INTCON3bits.INT2IP = 0; // Port B2 Interrupt Priority bit (low) INTCON3bits.INT2IE = 0; // Enables the port B2 interrupt // ISR-RB4/7 INTCONbits.RBIF = 0; // The port B4-7 interrupt did not occur INTCON2bits.RBIP = 0; // Port B4-7 Interrupt Priority bit (low) INTCONbits.RBIE = 1; // Enables the port B4-7 interrupt IOCBbits.IOCB4 = 1; // Enables the port B4 interrupt IOCBbits.IOCB5 = 1; // Enables the port B5 interrupt IOCBbits.IOCB6 = 1; // Enables the port B6 interrupt IOCBbits.IOCB7 = 0; // Enables the port B7 interrupt // I2C OpenI2C(MASTER, SLEW_OFF); // Initialize I2C module SSPADD = 0x3F; // I2C CLK Adjust
Pour info j'ai du modifier mon fichier LKR :
Et dans le .c :Code:DATABANK NAME=gpr0 START=0x60 END=0xFF DATABANK NAME=gpr1 START=0x100 END=0x1FF DATABANK NAME=big START=0x200 END=0x37F PROTECTED DATABANK NAME=gpr3 START=0x380 END=0x3FF DATABANK NAME=gpr4 START=0x400 END=0x4FF SECTION NAME=buffer_scn RAM=big
Voilà si quelqu'un a une piste sur laquelle je pourrai m'orienter ...Code:#pragma idata buffer_scn static unsigned short long buffer[25][4] = {0}, (*splittime_history)[4] = buffer; #pragma idata
-----