2011-12-02 7 views
1

En utilisant l'IDE uvision pour le développement STM32, je veux que certaines variables de minuterie ne soient pas initialisées au démarrage. J'ai essayé:STM32: variables non initialisées?

volatile unsigned int system_time __attribute__((section(".noinit"))); 

et

__attribute__((zero_init)) volatile int system_timer; 

, mais rien ne semble fonctionner. En suivant les indications d'elswhere, j'ai également coché NoInit sur options/target/IRAM1. Néanmoins, les variables sont mises à zéro après la réinitialisation.

Quelqu'un peut-il aider?

Répondre

3

Vous devez vérifier l'adresse de cette variable à partir du fichier .MAP et utiliser le Le mot-clé à

vous permet de spécifier l'adresse des variables non initialisées dans vos fichiers source C. Le

exemple suivant montre comment localiser plusieurs différents types de variables en utilisant la à exemple keyword.for ......

struct link { 
    struct link idata *next; 
    char  code *test; 
}; 

struct link idata list _at_ 0x40;  /* list at idata 0x40 */ 
char xdata text[256] _at_ 0xE000; /* array at xdata 0xE000 */ 
int xdata i1   _at_ 0x8000; /* int at xdata 0x8000 */ 
char far ftext[256] _at_ 0x02E000; /* array at xdata 0x03E000 */ 

void main (void) { 
    link.next = (void *) 0; 
    i1  = 0x1234; 
    text [0] = 'a'; 
    ftext[0] = 'f'; 
} 

J'espère que cela aide pour résoudre votre problème.

3

Vous devez suivre ces étapes. déclarer votre variable comme suit:

volatile unsigned int system_time __attribute__((section(".noinit"),zero_init)); 

Ensuite, vous devez utiliser un fichier de dispersion pour déclarer la section d'exécution avec l'attribut NOINIT et l'utiliser avec l'éditeur de liens. exemple fichier de dispersion:

LR_IROM1 0x08000000 0x00080000 { ; load region size_region 
    ER_IROM1 0x08000000 0x00080000 { ; load address = execution address 
     *.o (RESET, +First) 
     *(InRoot$$Sections) 
     .ANY (+RO) 
    } 
    RW_IRAM1 0x20000000 UNINIT 0x00000100 { ;no init section 
     *(.noinit) 
    } 
    RW_IRAM2 0x20000100 0x0000FFF0 {    ;all other rw data 
     .ANY(+RW +ZI) 
    } 
} 
Questions connexes