MECCANICA e DINTORNI
http://meccanicaedintorni.morpel.it/phpbb/

dsPIC30F4011 dichiarazione variabili
http://meccanicaedintorni.morpel.it/phpbb/viewtopic.php?f=80&t=9510
Pagina 1 di 1

Autore:  Bit79 [ sab mar 23, 2013 18:29 ]
Oggetto del messaggio:  dsPIC30F4011 dichiarazione variabili

Sto cominciando ad usare i dspic. Quello che non riesco a trovare nei manuali, è il modo di dichiarare un blocco di variabili, specificando in che punto della ram voglio che siano allocate.
Tutti i sistemi di dichiarazione che ho trovato collocano la prima variabile nella prima locazione libera (nel caso del processore in oggetto alla locazione 0x0800), e le altre a seguito. Ma se per qualche motivo voglio che più variabili (al limite anche tutte) siano posizionate a partire da un'altra locazione (ad esempio perchè alla locazione 0x0800 ho posizionato lo stack) come faccio?
Come compilatore uso mplab con il pacchetto c30 lite, anche se programmo in asm, perchè mi permette di utilizzare direttive di compilazione che nell'asm30 non ci sono...

Ciao e grazie a tutti!

Autore:  Raban [ sab mar 23, 2013 19:26 ]
Oggetto del messaggio:  Re: dsPIC30F4011 dichiarazione variabili

se ti puo' aiutare :

#include "p30f4011.h"
#include "p30fxxxx.h"
#include "LCD_44780.h"
#include "delay.h"
#include "qei.h"
#define FCY 30000000UL //Unsigned Long
#include "libpic30.h"

/* impostazioni micro :*/
_FOSC(CSW_FSCM_OFF & FRC_PLL16); /* Set up for FCR and PLL x 16 120 mhz fcy 30mhz 30 mips */
_FWDT(WDT_OFF); /* Turn off the Watch-Dog Timer. */
_FBORPOR(MCLR_EN & PWRT_OFF); /* Enable MCLR reset pin and turn off the power-up timers. */
_FGS(CODE_PROT_OFF); /* Disable Code Protection */


//-------------------------------------------------------------------//
// DEFINIZIONE COSTANTI //
//-------------------------------------------------------------------//

#define led1 LATFbits.LATF4
#define led2 LATFbits.LATF5
#define step LATEbits.LATE4
#define direzione LATEbits.LATE3
#define enable LATEbits.LATE0
#define reset LATEbits.LATE5

#define pulsante1 PORTDbits.RD2
#define pulsante2 PORTFbits.RF1
#define pulsante3 PORTFbits.RF0
#define pulsante4 PORTEbits.RE8
#define ventola PORTEbits.RE2
#define PWMVREF 400
#define PWMFREF 000
#define RAPPORTO_RIDUZIONE 0.05495
#define RAPPORTO_CONVERSIONE_CORRENTE 2.5615
#define FWD 1
#define RWD 0
// ingressi digitali

//#define LCD-BACK LATFbits.LATF6


//-------------------------------------------------------------------//
// VARIABILI GLOBALI //
//-------------------------------------------------------------------//
unsigned char state;
unsigned int pos_value;
unsigned int valore_eeprom[16];
unsigned int valore2_eeprom[16];
unsigned int table_ram[16];
char contatore_riga;
char contatore_riga1;
char contatore_riga_back;
unsigned char conferma_salvataggio;
unsigned char fase_ciclo;
unsigned int n_impulsi_fw;
unsigned int n_impulsi_rw;
unsigned int n_impulsi_pausa;
unsigned int n_impulsi;
unsigned char status_step;
unsigned char status_direzione;
unsigned int velocita_FW;
unsigned int velocita_RW;
unsigned int lunghezza_FW;
unsigned int lunghezza_RW;
unsigned int t_pausa;
unsigned int Tempo1;
unsigned int Tempo2;
unsigned int contatore_timer1;
unsigned int canale0;
unsigned int canale1;
unsigned int canale2;
unsigned int canale3;
unsigned int canale0_old;
unsigned int canale1_old;
unsigned int canale2_old;
unsigned int canale3_old;
unsigned int FIR_1;
unsigned int FIR_2;
unsigned int contatore_timer2;
unsigned int valore_corrente_start;
unsigned int valore_corrente_stop;
unsigned char fase_prog0;
int corrente_misurata;

//-------------------------------------------------------------------//
// INIZIALIZZAZIONE EEPROM //
//-------------------------------------------------------------------//

unsigned int _EEDATA(32) table0[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};
unsigned int _EEDATA(32) table1[16] = {1, 30, 5, 5, 5, 0, 1, 8, 2, 1, 1, 3, 8, 14, 15, 16,};
unsigned int _EEDATA(32) table2[16] = {2, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,};
unsigned int _EEDATA(32) table3[16] = {3, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,};
unsigned int _EEDATA(32) table4[16] = {4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,};

//-------------------------------------------------------------------//
// PROTOTIPI DI FUNZIONE //
//-------------------------------------------------------------------//

void _ISR _INT0Interrupt(void);
void _ISR _INT1Interrupt(void);
void _ISR _INT2Interrupt(void);
void _ISR _T1Interrupt(void);
void _ISR _T2Interrupt(void);
void _ISR _ADCInterrupt(void);
void QEI_setup(void);
void PWM_setup(void);
void ADC_setup(void);

Autore:  Bit79 [ dom mar 24, 2013 16:09 ]
Oggetto del messaggio:  Re: dsPIC30F4011 dichiarazione variabili

Eh... fino qui c'ero... però in questo modo il compilatore mette la prima variabile ("state" nel tuo esempio) alla locazione 0x800. Se voglio inziare da un'altra locazione non so come fare...

Autore:  Raban [ ven apr 12, 2013 14:15 ]
Oggetto del messaggio:  Re: dsPIC30F4011 dichiarazione variabili

Devi guardare il manuale del compilatore C30 li c'e' scritto come si dichiara , ci sono gli attributi far e near , da usare
piuttosto che altri

Autore:  Bit79 [ sab apr 13, 2013 15:39 ]
Oggetto del messaggio:  Re: dsPIC30F4011 dichiarazione variabili

Hai il link microchip del manuale?

Autore:  Raban [ lun apr 15, 2013 13:02 ]
Oggetto del messaggio:  Re: dsPIC30F4011 dichiarazione variabili

pagina 12 del manuale C30_users_guide

int foo __attribute__((section("mysection"),address(0x900)));

Autore:  Bit79 [ gio apr 18, 2013 22:30 ]
Oggetto del messaggio:  Re: dsPIC30F4011 dichiarazione variabili

thank you

Pagina 1 di 1 Tutti gli orari sono UTC +1 ora
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/