- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
AVR
AVR
一个占用内存极小的菜单系统在AAVVRR上的移植
相信经典的《一个占用内存极小的菜单系统的实现》这篇文章大家都看过了吧
我在做某工程的时候,也借鉴了作者的 的编程思想并在atmega32上做了自己的菜单系统
简单的说一下移植思路,本文假设读者详细阅读了 《一个占用内存很小的菜单系统》这篇
经典文章,并理解了原作者的编程思想,以及有一定的AVR C语言编程经验。
WINAV
WINAV
本文以下代码基于WWIINNAAVVRR2200009900331133
1.
1.
11..函数名列表 索引的移植
因为直接加const关键词定义表格是没有用的 表格的数据仍然是存放在.data区(RAM)的
还需要加PROGMEM关键字:
例子如下::::
constKbdTabStructKeyTab[]PROGMEM={
{0,1,2,3,4,(*MenuSleepInit)},
{1,0,0,0,0,(*MenuSleepUp)},
{2,0,0,0,0,(*MenuSleepDn)},
{3,0,0,0,0,(*MenuSleepEsc)},
{4,0,0,0,0,(*MenuSleepEtr)},
{5,6,7,8,9,(*MenuTopInit)},
{6,0,0,0,0,(*MenuTopUp)},
{7,0,0,0,0,(*MenuTopDn)},
{8,0,0,0,0,(*MenuTopEsc)},
{9,0,0,0,0,(*MenuTopEtr)},
……
}
这样 数组就被定义在Flash区了
2. ?
2. ?
22..如何读出菜单状态??
KeyFuncIndex=pgm_read_byte(KeyTab[KeyFuncIndex].KeyUpState);
3. Flash
3. Flash
33..如何把函数指针从 FFllaasshh区取出来 并执行?
(*((void(*)(void))pgm_read_word(KeyTab[KeyFuncIndex].CurrentOperate)))();
//从Flash区 读出函数指针(2个字节)并且强制转换为函数 执行
更简单的办法:
#define PgmFun(A) (*((void(*)(void))pgm_read_word(A)))() //定义一个可以执行
Flash区函数指针的宏
然后一句
PgmFun(KeyTab[KeyFuncIndex].CurrentOperate);
就可以调用表格内的函数指针.
4.
4.
44..菜单项的定义
const uchar MenuSetsEN_0[] PROGMEM=SetTime;
const uchar MenuSetsEN_1[] PROGMEM=SetDate;
const uchar*MenuSetsEN[] PROGMEM=
{
MenuSetsEN_0,
MenuSetsEN_1,
……
}
5.
5.
55..关于显示方面
一般情况下printf(formatstring);中的formatstring是在.data区的
我们还需要编写一个Printf_P
下面是一个LCD_Printf_P函数
/*
函数名:void LCD_Printf_P(unsigned char StartX,unsigned char AtLineY,const prog_char
*strfmt,...)
入口参数:unsignedcharStartX,unsignedcharAtLineY 开始点
constprog_char*strfmt,要显示的内容
%s 显示字符串 %d显示一个无符号整数0~65535的
您可能关注的文档
- 上海场地环境监测技术规范.PDF
- 上海华力——校园招聘简章.PDF
- 上海化工研究院受上海永程固废处理有限公司委托开展对固体.PDF
- 上海化工研究院有限公司(环评机构)受上海古杉生物能源科.PDF
- 上海化工职业病防治院.PDF
- 上海吉祥航空股份有限公司投资者关系活动记录表.PDF
- 上海交易所燃料油品种介绍.PDF
- 上海久悦机电设备有限公司.PDF
- 上海克来机电自动化工程股份有限公司2017年半年度报告.PDF
- 上海三电汽车空调有限公司.PDF
- 商社行业2025年投资策略分析报告:产品上行周期黄金机遇.pdf
- 金属行业2025年投资策略分析报告:工业金属篇,莫听穿林打叶声,何妨吟啸且徐行.pdf
- 全球电竞运动行业市场前景及投资研究报告.pdf
- 和铂医药-市场前景及投资研究报告:依托Harbour Mice平台,BD新篇章.pdf
- 证券行业2025年投资策略分析报告:蓄势待发.pdf
- 2025年固定收益投资策略分析报告:风浪未平,蓄势待发,震荡.pdf
- 农林牧渔行业2025年投资策略分析报告:养殖风起,后周期顺势而上.pdf
- 深圳国际-市场前景及投资研究报告-国企优质资源禀赋,物流园转型升级,业绩弹性.pdf
- 汽车行业市场前景及投资研究报告:双轮驱动,智能引领.pdf
- 整车与电池行业板块2025年投资策略分析报告:新技术新领域景气共振,优选板块,结构性机遇.pdf
文档评论(0)