AVR單片機(jī)三種存儲器使用問題
(2). FLASH 區(qū)數(shù)組應(yīng)用:
定義:
const prog_uchar flash_array[] = {0,1,2,3,4,5,6,7,8,9}; //定義
另外一種形式
const unsigned char flash_array[] RROGMEM = {0,1,2,3,4,5,6,7,8,9};
讀取示例:
unsigend char I, ram_val;
for(I=0 ; I10 ;I ++) // 循環(huán)讀取每一字節(jié)
{
ram_val = pgm_read_byte(flash_array + I);
… … //處理
}
(3).FLASH 區(qū)字符串常量的應(yīng)用
全局定義形式:
const char flash_str[] PROGMEM = “Hello, world!”;
函數(shù)內(nèi)定義形式:
const char *flash_str = PSTR(“Hello, world!”);
以下為一個FLASH 字符串應(yīng)用示例
#include avr/io.h>
#include avr/pgmspace.h>
#include stdio.h>
const char flash_str1[] PROGMEM = “全局定義字符串”;
int main(void)
int I;
char *flash_str2=PSTR(“函數(shù)內(nèi)定義字符串”);
while(1)
{
scanf(“%d”,I);
printf_P(flash_str1);
printf(“”);
printf_P(flash_str2);
printf(“”);
}
}
4. EEPROM 數(shù)據(jù)存儲器操作
#include avr/eeprom.h>
頭文件聲明了avr-libc 提供的操作EEPROM 存儲器的API 函數(shù)。
這些函數(shù)有:
eeprom_is_ready() //EEPROM 忙檢測(返回EEWE 位)
eeprom_busy_wait() //查詢等待EEPROM 準(zhǔn)備就緒
uint8_t eeprom_read_byte (const uint8_t *addr) //從指定地址讀一字節(jié)
uint16_t eeprom_read_word (const uint16_t *addr) //從指定地址一字
void eeprom_read_block (void *buf, const void *addr, size_t n) //讀塊
void eeprom_write_byte (uint8_t *addr, uint8_t val) //寫一字節(jié)至指定地址
void eeprom_write_word (uint16_t *addr, uint16_t val) //寫一字到指定地址
void eeprom_write_block (const void *buf, void *addr, size_t n)//寫塊
在程序中對EEPROM 操作有兩種方式
方式一:直接指定EERPOM 地址
示例:
#include avr/io.h>
#include avr/eeprom.h>
int main(void)
{
unsigned char val;
eeprom_busy_wait(); //等待EEPROM 讀寫就緒
eeprom_write_byte(0,0xaa); //將0xaa 寫入到EEPORM 0 地址處
eeprom_busy_wait();
val=eeprom_read_byte(0); //從EEPROM 0 地址處讀取一字節(jié)賦給RAM 變量val
while(1);
}
方式二:先定義EEPROM 區(qū)變量法
示例:
#include avr/io.h>
#include avr/eeprom.h>
unsigned char val1 __attribute__((section(".eeprom")));//EEPROM 變量定義方式
int main(void)
{
unsigned char val2;
eeprom_busy_wait();
eeprom_write_byte (val1, 0xAA);
eeprom_busy_wait();
val2 = eeprom_read_byte(val1);
while(1);
}
在這種方式下變量在EEPROM 存儲器內(nèi)的具體地址由編譯器自動分配。相對方式一,數(shù)據(jù)在EEPROM 中的具體位置是不透明的。為EEPROM 變量賦的初始值,編譯時被分配到.eeprom 段中,可用avr-objcopy 工具從.elf 文件中提取并產(chǎn)生ihex 或binary 等格式的文件。
單片機(jī)相關(guān)文章:單片機(jī)教程
單片機(jī)相關(guān)文章:單片機(jī)視頻教程
單片機(jī)相關(guān)文章:單片機(jī)工作原理
存儲器相關(guān)文章:存儲器原理
塵埃粒子計數(shù)器相關(guān)文章:塵埃粒子計數(shù)器原理
評論