2016-06-08 9 views
2

In CCS6 konnte ich dieses Programm nicht ordnungsgemäß ausführen.Warum kann ich foo * const array [] keine Hexadezimalwerte zuweisen?

typedef volatile struct{ 
    unsigned int pin_in; 
    unsigned int pin_out; 
    unsigned int pin_dir; 
    unsigned int pin_ren; 
    unsigned int pin_ds; 
    unsigned int pin_sel; 
    unsigned int reserved[10]; 
}io_hw_t; 
//#define PABASE ((io_hw_t*) (0x200)) // this part is working 

#define PABASE 0x200 
#define PBBASE 0x220 

io_hw_t *const io[] = {PABASE, PBBASE}; // error 

Die Warnung, die ich habe ist:

"# 145-D ein Wert vom Typ "int" kann nicht eine Entität des Typs initialisiert werden "io_hw_t * const"

wie kann ich dieses Problem beheben

+0

Wie wäre es 'io_hw_t * const io [] = {{PABASE}, {PBBASE}};' –

+0

leider nicht –

+0

Leider funktionierten Es ist ein Zeiger .... –

Antwort

3

explizite Umwandlung in Initialisierung stellen so:

io_hw_t *const io[] = {(io_hw_t *)PABASE, (io_hw_t *)PBBASE}; 

io wird als Array von const Zeiger auf io_hw_t deklariert. Jedes Mitglied muss also ein Zeiger sein. Aber PABASE ist eine Ganzzahlkonstante und muss explizit in den Zeiger umgewandelt werden.

Alternativ können Sie die Abgüsse in Ihre Makros auch hinzufügen, wie:

#define PABASE ((void *)0x200) 
Verwandte Themen