#include <avr/io.h>
// declaration of a global variable
unsigned int my_global_16bit_variable;
int main(void)
{
// declaration of a local variable
unsigned int my_local_16bit_variable = 0;
my_local_16bit_variable = OCR1A; // assign value to the local variable
my_global_16bit_variable = OCR1A; // assign value to the global variable
while(1)
{
}
}
La variable local solo es válida dentro de main, se puede acceder a la variable global desde cualquier lugar.
Si pretende utilizar la variable, se comparte entre una función y una interrupción, entonces debe declararse como global volátil.
#include <avr/io.h>
// declaration of a global variable
volatile unsigned int my_global_16bit_variable;
.....
Para almacenar una variable en el eeprom interno de AVR
#include <avr/io.h>
#include <avr/eeprom.h>
// macro for easier usage
#define read_eeprom_word(address) eeprom_read_word ((const uint16_t*)address)
#define write_eeprom_word(address,value) eeprom_write_word ((uint16_t*)address,(uint16_t)value)
//declare an eeprom variable
unsigned int EEMEM my_eeprom_word;
int main(void)
{
write_eeprom_word(&my_eeprom_word,OCR1A); // store value in eeprom
OCR1A = read_eeprom_word(&my_eeprom_word); // restore from eeprom
while(1)
{
}
}
La longitud de la variable se muestra en stdint.h
Tipos de enteros que tienen exactamente el ancho especificado
typedef signed char int8_t
typedef unsigned char uint8_t
typedef signed int int16_t
typedef unsigned int uint16_t
typedef signed long int int32_t
typedef unsigned long int uint32_t
typedef signed long long int int64_t
typedef unsigned long long int uint64_t
Puedes usar unsigned int
o unt16_t
, prefiero el formato uintxx_t