<h早泄中药?增强男性功能的食物性功能方法左h

321被浏览78658分享邀请回答3110 条评论分享收藏感谢收起372 条评论分享收藏感谢收起查看更多回答查看: 1631|回复: 8
&avr/pgmspace.h& 的使用方法
完全看不明白,哪位有没有文档,可以share一下,不胜感谢
#include & avr/pgmspace.h &
在程序存储器内的数据定义使用关键字 __attribute__((__progmem__))。在pgmspace.h
中它被定义成符号&&PROGMEM。
1 . FLASH 区整数变量应用
定义格式:
数据类型& &变量名&&PROGMEM&&=& &值 ;
char val8& & PROGMEM = 1 ; 或者 [const]&&prog_uchar val8 = 1 ;
1.FLASH中的“变量”的值是不能改变的,用const声明他可以避免程序中对其产生误操作。
2.当局部定义“prog_”变量时,需要加 static 声明,即声明局部结束后,该变量一直存在,否则局部一结束,将释放变量,其值就不可预期了,与1.的原则冲突。
对于不同长度的整数类型 avr-libc&&提供对应的读取函数:
pgm_read_byte(prog_void * addr)
pgm_read_word(prg_void * addr)
pgm_read_dword(prg_void * addr)
const&&prog_uchar _val8 = 1 ;& &//存在FLASH中
unsigned char val8;& && && && & //SRAM中的变量
val8 = pgm_read_byte( & _val8 );//从FLASH中把数据搬到SRAM中。
不要以为“prog_”型的变量可以直接在函数中进行运算,需要中间变量才可操作。
首先很感谢,楼上的意思我差不多明白了,很像eeprom的操作函数,混沌的地方是
“2.当局部定义“prog_”变量时,需要加 static 声明,即声明局部结束后,该变量一直存在,否则局部一结束,将释放变量,其值就不可预期了,与1.的原则冲突”
这句话怎么理解?Flash中数据和程序不是不能改变吗?
回复【2楼】_HOLDON
-----------------------------------------------------------------------
& & 首先明确一点:FLASH中,每个地址下存放的也都是一个“数字”,人用特定的“数字”来告诉机器做什么。
& & 人写好的程序,无论是汇编,C,都要经过 编译-&连接-&生成“数字” 的过程,连接的作用是将每一个编译好的单个文件进行协调,统一,以组织成一个有序的整体,这时,比如在FLASH中的16H中存放一个数字“0”,那么别的地方再需要用到“0”时,就会到16H来调用,而不是从新用一个地址来再存储一个“0”,在连接中这样的情况是非常多的,当生成“数字”的过程结束后,如果人为改变了16H中的数字,所有调用16H中数字的地方都会被改变,所有这些被影响的地方又可能影响到调用它们的地方,就像细菌感染,除非是爱因斯坦转世霍金附体,不然这种感染是无法控制的。
& & 因此,FLASH中的“数字”是不允许改变的。
& & 当然有一种“例外”,Bootloader,可以再Bootloader中放置一段程序,用以改写FLASH,但此时Bootloader其实只是一个搬运工的角色,他和被改写的FLASH中的程序其实没有半毛钱的关系,想详细了解的话可以看看数据手册。
& & 最后,不用谢,呵呵。
FYI, 除了这种方式,还有 GCC 4.7 (还未发布) 新增的 Named Address Spaces (__flash, __flash1 ~ __flash5, __memx)
用起来比avr/pgmspace.h方便些。
References:
http://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html
http://gcc.gnu.org/gcc-4.7/changes.html
学习了& && && && && && && &&&
阿莫电子论坛, 原"中国电子开发网"

我要回帖

更多关于 增强男性功能的食物 的文章

 

随机推荐