搜索
bottom↓
回复: 11

看不懂《一个占用内存极少的菜单系统的实现》中的一个宏定义,请高手帮忙解释一下。想

[复制链接]

出0入0汤圆

发表于 2011-8-21 16:47:42 | 显示全部楼层 |阅读模式
//宏定义:
#define MenuWhat(n) {(U8 **)n,(sizeof(n)/sizeof(U8 *)),0}   


(原文件名:宏定义出错.jpg)

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2011-8-21 16:53:36 | 显示全部楼层
//---------------------------------------------------
//各个菜单的资源
//命名方式是:
//---------------------------------------------------
//顶层菜单
U8 *const TopItemCN[]=
{
"功能",
"参数",
"测量",
"语言",
"测试"
};     

U8 * const TopItemEN[]=
{
"Function",
"Parameter",
"Measure",
"Language",
"Test"
};

//"功能"菜单项的内容和长度
U8 * const FuncItemCN[]=
{
"读出数据",
"背光控制",
"出厂设置",
"修改密码"

};

U8 * const FuncItemEN[]=
{
"Read Data",
"BackLight",
"Factory Set",
"Change CODE"
};                 

//"参数"菜单项的内容和长度
U8 * const ParaItemCN[]=
{
"阈值",
"死时间T",
"灵敏度K",
"测量时间"
};

U8 * const ParaItemEN[]=
{
"Menu0",
"Menu1",
"Menu2",
"Menu3",
"Menu4",
"Menu5",
"Menu6",
"Menu7"
};   

//"语言"菜单项的内容和长度
U8 * const LanguageItemCN[]=
{
"中文",
"English"
};

U8 * const LanguageItemEN[]=
{
"中文",
"English"
};

//测量
U8 * const MeasureItemCN[]=
{
"检测上拉电阻",
"清空出错记录",
"在线命令",
"输入口测试",
"模拟主轴测试",
"轴信号测试",
"继电器测试"
};

U8 * const MeasureItemEN[]=
{
"PushUp Res",
"ClearErrCount",
"OnlineCMD ",
"SysInputTest",
"SVC TEST",
"AXis TEST",
"Relay TEST"
};   

//提示键的文本
U8 * const TipCN[]=
{
"Menu",
"选择",
"确认",
"取消",
"?确认?"
};

U8 * const TipEN[]=
{
"Menu",
"Select",
"Ok",
"Cancel",
"? OK ?"
};


//图标层
struct  Menu IcoMenu[] =
{
MenuWhat(TopItemCN),
MenuWhat(TopItemEN)
};

上面就是调用宏的地方

出0入0汤圆

发表于 2011-8-21 18:34:52 | 显示全部楼层
(sizeof(n)/sizeof(U8 *))求某一级的菜单名称中有几个BYTE。

前一个是菜单字串的首地址,后一个是不表楚是哪个参数,我的结构体是如下的,(也是从坛里下的)

//Bar型菜单的数据结构
struct Menu
{
    U8 **Text;             // 指向显示内容数组的指针
    U8 TextNum;       // BYTE个数

};

出0入0汤圆

发表于 2011-8-21 18:41:46 | 显示全部楼层
//宏定义:
//菜单项长条计算  宏

//                                                                                        |---> 这个数组由显示字符地址(指针)组成
//                                                                                        |
//                                       |---> 指向显示内容地址数组头的指针
//                                       |
//                                       |                         |---> 所示数组大小
//                                       |                         |
//                                       |                         |                        |---> 指向字节指针所占空间的大小(与编译器相关)
#define MenuWhat(n) { (U8 **)n, ( sizeof(n) / sizeof(U8 *) ) }
//                               \------------------------/
//                                           |---> 字符串个数,即显示条项个数

出0入0汤圆

 楼主| 发表于 2011-8-21 19:51:21 | 显示全部楼层
回复【3楼】TANK99
//宏定义:
//菜单项长条计算  宏
//          |---> 这个数组由显示字符地址(指针)组成
//          |
//        |---> 指向显示内容地址数组头的指针
//        |
//        |  |---> 所示数组大小
//        |  |
//        |  | |---> 指向字节指针所占空间的大小(与编译器相关)
#define menuwhat(n) { (u8 **)n, ( sizeof(n) / sizeof(u8 *) ) }
//                               \------------------------/
//                                           |---> 字符串......
-----------------------------------------------------------------------

谢谢楼上支持

#define menuwhat(n) { (u8 **)n, ( sizeof(n) / sizeof(u8 *) ) }
                    \---------/
                         |------这一截是什么意思啊,真是看不懂

出0入0汤圆

发表于 2011-8-21 20:24:12 | 显示全部楼层
|---> 指向显示内容地址数组头的指针

出0入0汤圆

 楼主| 发表于 2011-8-22 14:46:04 | 显示全部楼层
#define menuwhat(n) { (u8 **)n, ( sizeof(n) / sizeof(u8 *) ) }  

这样的宏定义在CVAVR中编译出错,不知道在KEIL下面能不能通过

出0入0汤圆

发表于 2014-7-29 14:27:29 | 显示全部楼层
cgbabc 发表于 2011-8-22 14:46
#define menuwhat(n) { (u8 **)n, ( sizeof(n) / sizeof(u8 *) ) }  

这样的宏定义在CVAVR中编译出错,不 ...

这个宏我看懂了,第一个参数是指向显示内容数组的指针     第二个是这个数组元素的个数,也就是条项菜单的条项数  第三个是对应的执行函数  不用管     你移植成功了吗  加QQ交流一下如何添加参数修改界面呀  比如修改时间 日期等一些参数  QQ1523137902

出0入0汤圆

发表于 2014-7-30 07:15:36 | 显示全部楼层
看不懂                    

出0入0汤圆

发表于 2014-7-30 08:43:31 | 显示全部楼层
不明觉厉

出0入0汤圆

发表于 2014-7-31 21:11:48 | 显示全部楼层
直接移植和仿真吧

出0入0汤圆

发表于 2014-11-8 15:10:11 | 显示全部楼层
想要用,但不太明白。进来学习。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 04:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表