amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 705|回复: 32

请问多级菜单是不是非常的费空间?

[复制链接]
发表于 2019-6-29 23:33:14 | 显示全部楼层 |阅读模式
做的一个产品,里面有多级菜单,菜单下面会有参数需要调整,开始是用15W4K32,程序写着写着,发现空间不够,换成48,发现48也不够用了,换成56,现在56也剩下的不多了,还有很多没有写的,感觉没有多少东西啊,怎么那么费空间。
Program Size: data=65.2 xdata=109 code=53059
发表于 2019-6-29 23:51:43 来自手机 | 显示全部楼层
几级?几项?
发表于 2019-6-30 00:06:56 | 显示全部楼层
我这儿用的菜单项结构,每个菜单项占12字节,其实还可以再精简精简
80个菜单项用了960字节的ram
开发新产品难道不应该一开始先用高配ic么,实现大部分功能之后再考虑怎么减配

typedef struct {
    unsigned long val;      // 菜单项值
    char* name;             // 菜单项名称
    unsigned char parent;   // 上层菜单项, TOPLEVEL则为顶层菜单
    bool isdir;             // 是否是目录, 是则进入下层菜单, 否则执行操作
    GlobalConfig_Item_t item;
//    void (*action)(int param);        // 回调函数指针,暂时没有启用
} MenuItem_t;
发表于 2019-6-30 01:17:01 来自手机 | 显示全部楼层
50多K不至于吧
 楼主| 发表于 2019-6-30 02:23:59 | 显示全部楼层
本帖最后由 wxdn 于 2019-6-30 02:25 编辑


两级,5大项,5大项下面的小项共有16+16+34+42+20,除34项参数下面没有调整参数外(被动检测显示项),其它各项下面都有调整参数。
 楼主| 发表于 2019-6-30 02:26:17 | 显示全部楼层
tomzbj 发表于 2019-6-30 00:06
我这儿用的菜单项结构,每个菜单项占12字节,其实还可以再精简精简
80个菜单项用了960字节的ram
开发新产品 ...

我是说占用的程序空间。
 楼主| 发表于 2019-6-30 02:29:05 | 显示全部楼层
程序中的内容:485通讯,按键输入,实时时钟显示,实时485数据传输,实时状态显示,菜单项调整。
 楼主| 发表于 2019-6-30 02:41:34 | 显示全部楼层
用的OP320是显示屏,硬件是自己做的,设备控制柜面板上共有14路按键输入,输入的各状态通过485传送给另外一个控制柜里的主机,同时读取主机各端口的状态以及设备的状态。每秒进行10次的数据收发.



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2019-6-30 07:29:43 | 显示全部楼层
结构做的不好,程序必然大。
发表于 2019-6-30 08:40:42 来自手机 | 显示全部楼层
用的字符液晶?估计每个菜单都写了字库
发表于 2019-6-30 09:07:19 | 显示全部楼层
程序结构优化吧
发表于 2019-6-30 09:12:44 来自手机 | 显示全部楼层
你应该是把字库保存在flash上了吧,你这个几K空间足够了,或者贴源码出来帮你分析下问题
 楼主| 发表于 2019-6-30 09:20:50 | 显示全部楼层
laujc 发表于 2019-6-30 08:40
用的字符液晶?估计每个菜单都写了字库

所有汉字都是自己写进去的,屏不带字库。
 楼主| 发表于 2019-6-30 09:31:58 | 显示全部楼层
laujc 发表于 2019-6-30 08:40
用的字符液晶?估计每个菜单都写了字库

每个菜单里的汉字都是一个一写进去的, 难道有更加简单的方法?例如:写主介面
void LCD_WR_zhujiemian(void)//写主介面
{
    LCD_CLR();
    LCD_WR_DAT(ZIMU_A,2,0,8,0);//A
    LCD_WR_DAT(ZIMU_L,2,9,8,0);//L
    LCD_WR_DAT(ZIMU_M,2,17,8,0);//M
    LCD_WR_DAT(FU_1,2,24,8,0);//:
    LCD_WR_DAT(ZI_zhu,2,32,16,0);//主
    LCD_WR_DAT(ZI_cai,2,48,16,0);//菜
    LCD_WR_DAT(ZI_dan,2,64,16,0);//单

    LCD_WR_DAT(ZIMU_S,2,96,8,0);//S
    LCD_WR_DAT(ZIMU_E,2,104,8,0);//E
    LCD_WR_DAT(ZIMU_T,2,112,8,0);//T
    LCD_WR_DAT(FU_1,2,120,8,0);//:
    LCD_WR_DAT(ZI_can,2,128,16,0);//参
    LCD_WR_DAT(ZI_shu,2,144,16,0);//数
    LCD_WR_DAT(ZI_she,2,160,16,0);//设
    LCD_WR_DAT(ZI_zhi5,2,176,16,0);//置

    LCD_WR_DAT(FU_xia,4,8,16,0);//符号下
    LCD_WR_DAT(FU_1,4,24,8,0);//:
    LCD_WR_DAT(ZI_shu1,4,32,16,0);//输
    LCD_WR_DAT(ZI_ru,4,48,16,0);//入
    LCD_WR_DAT(ZI_jian1,4,64,16,0);//监
    LCD_WR_DAT(ZI_ce,4,80,16,0);//测

    LCD_WR_DAT(FU_zuo,4,103,16,0);//符号左
    LCD_WR_DAT(FU_1,4,120,8,0);//:
        LCD_WR_SHUZI(0,4,130,0,1);
        LCD_WR_DAT(ZI_du,4,144,16,0);//度
    LCD_WR_DAT(ZI_zi1,4,160,16,0);//资
    LCD_WR_DAT(ZI_liao,4,176,16,0);//料

    LCD_WR_DAT(FU_shang,6,8,16,0);//符号上
    LCD_WR_DAT(FU_1,6,24,8,0);//:
    LCD_WR_DAT(ZI_shu1,6,32,16,0);//输
    LCD_WR_DAT(ZI_chu,6,48,16,0);//出
    LCD_WR_DAT(ZI_jian1,6,64,16,0);//监
    LCD_WR_DAT(ZI_ce,6,80,16,0);//测

    LCD_WR_DAT(FU_you,6,103,16,0);//符号右
    LCD_WR_DAT(FU_1,6,120,8,0);//:
    LCD_WR_SHUZI(9,6,126,0,1);
        LCD_WR_SHUZI(0,6,135,0,1);
        LCD_WR_DAT(ZI_du,6,144,16,0);//度
    LCD_WR_DAT(ZI_zi1,6,160,16,0);//资
    LCD_WR_DAT(ZI_liao,6,176,16,0);//料

        LCD_WR_SHUZI(2,0,8,0,1);//2
        LCD_WR_SHUZI(0,0,17,0,1);//0
        LCD_WR_DAT(ZI_nian,0,44,16,0);//年
        LCD_WR_DAT(ZI_yue,0,78,16,0);//月
        LCD_WR_DAT(ZI_ri,0,111,16,0);//日       
        LCD_WR_DAT(FU_1,0,147,8,0);//:               
        LCD_WR_DAT(FU_dian,0,171,8,0);//:
}
 楼主| 发表于 2019-6-30 09:32:53 | 显示全部楼层
flash3g 发表于 2019-6-30 09:12
你应该是把字库保存在flash上了吧,你这个几K空间足够了,或者贴源码出来帮你分析下问题 ...

不是吧,几个K?
 楼主| 发表于 2019-6-30 09:42:01 | 显示全部楼层
上一个之前的版本吧,请高手帮忙看一下。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2019-6-30 12:47:53 | 显示全部楼层
wxdn 发表于 2019-6-30 09:31
每个菜单里的汉字都是一个一写进去的, 难道有更加简单的方法?例如:写主介面
void LCD_WR_zhujiemian(v ...

还是没有理解菜单的概念吧。。。

 楼主| 发表于 2019-6-30 12:48:54 | 显示全部楼层
laujc 发表于 2019-6-30 12:47
还是没有理解菜单的概念吧。。。

请大神指点。
发表于 2019-6-30 12:50:08 | 显示全部楼层
wxdn 发表于 2019-6-30 09:31
每个菜单里的汉字都是一个一写进去的, 难道有更加简单的方法?例如:写主介面
void LCD_WR_zhujiemian(v ...

你如果一次送一个字符串,应该会省很多空间。

不用一个字符一个字符的送
发表于 2019-6-30 12:51:04 来自手机 | 显示全部楼层
做字库吧…你这个是分开的字库?
 楼主| 发表于 2019-6-30 12:51:23 | 显示全部楼层
laujc 发表于 2019-6-30 12:50
你如果一次送一个字符串,应该会省很多空间。

不用一个字符一个字符的送


是一次送一个字符串的,上面有举例,如果写主介面,是一次性写进去的
 楼主| 发表于 2019-6-30 12:54:19 | 显示全部楼层
在写一整页的时候,是将汉字(不变化的部分)先一次性写进去,然后再写变化的部分,上面有完整的程序,写的比较乱。
 楼主| 发表于 2019-6-30 12:54:47 | 显示全部楼层
bg6agf 发表于 2019-6-30 12:51
做字库吧…你这个是分开的字库?

上面有完整的程序,请看一下。
发表于 2019-6-30 19:07:46 | 显示全部楼层
wxdn 发表于 2019-6-30 12:54
上面有完整的程序,请看一下。

做字库吧,保存到外置SPI_flash。
 楼主| 发表于 2019-6-30 19:22:58 | 显示全部楼层
flash3g 发表于 2019-6-30 19:07
做字库吧,保存到外置SPI_flash。


你看一下,有没有哪里不对的地方?发上来程序只是显示菜单的内容部分,没有包括主程序,所以比较小。
发表于 2019-6-30 20:32:26 | 显示全部楼层
wxdn 发表于 2019-6-30 19:22
你看一下,有没有哪里不对的地方?发上来程序只是显示菜单的内容部分,没有包括主程序,所以比较小。 ...

看了,你把字的点阵数据放到MCU的flash上了。能不占空间吗!
 楼主| 发表于 2019-6-30 23:31:22 | 显示全部楼层
flash3g 发表于 2019-6-30 20:32
看了,你把字的点阵数据放到MCU的flash上了。能不占空间吗!

那看来是没有办法精简了。
发表于 2019-6-30 23:46:35 | 显示全部楼层
wxdn 发表于 2019-6-30 23:31
那看来是没有办法精简了。

要外挂SPI_flash, GB2312字库16*16要250KB左右
 楼主| 发表于 2019-7-1 01:19:41 | 显示全部楼层
flash3g 发表于 2019-6-30 23:46
要外挂SPI_flash, GB2312字库16*16要250KB左右

我的这个程序中,有好几种字体,就算外挂也麻烦,看来只能加大容量了,没有办法。
发表于 2019-7-1 07:32:05 | 显示全部楼层
wxdn 发表于 2019-7-1 01:19
我的这个程序中,有好几种字体,就算外挂也麻烦,看来只能加大容量了,没有办法。 ...

菜单用哪些字,就把哪几个字的字库加载进来,不要把所有字库都弄在里边。
 楼主| 发表于 2019-7-1 09:30:53 | 显示全部楼层
wqsjob 发表于 2019-7-1 07:32
菜单用哪些字,就把哪几个字的字库加载进来,不要把所有字库都弄在里边。 ...

本来就是这样做的,程序中只有菜单中用到的汉字,符号以及数字。
发表于 2019-7-1 09:40:29 | 显示全部楼层
应该不是菜单问题,多半是显示字模数据占空间,实在不行,可以再外面挂个W25来放字库这些
发表于 2019-7-1 10:51:55 来自手机 | 显示全部楼层
肯定是程序结构的问题,其实op320也是用51单片机做的
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-7-20 12:12

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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