CN112394928A - 一种嵌入式系统中多级菜单构建方法与计算机存储介质 - Google Patents
一种嵌入式系统中多级菜单构建方法与计算机存储介质 Download PDFInfo
- Publication number
- CN112394928A CN112394928A CN201910759433.8A CN201910759433A CN112394928A CN 112394928 A CN112394928 A CN 112394928A CN 201910759433 A CN201910759433 A CN 201910759433A CN 112394928 A CN112394928 A CN 112394928A
- Authority
- CN
- China
- Prior art keywords
- menu
- event
- parameter
- page
- array
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0481—Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
- G06F3/0482—Interaction with lists of selectable items, e.g. menus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Abstract
本发明涉及一种嵌入式系统中多级菜单构建方法与计算机存储介质,方法包括:一个页面用于展示一级菜单;每一级菜单用一个菜单页面结构体表示,所有菜单页面结构体形成一个菜单页面结构体数组;菜单页面结构体中,至少包括:菜单页面索引值、菜单条目结构体数组和有效菜单条目个数;所述菜单条目结构体数组的预定大小大于所有页面中的最大条目数;所述菜单条目结构体数组至少包括:有效菜单条目的下一级菜单页面索引值;所述菜单页面索引值用于查找对应的页面;进行预处理:初始化菜单页面结构体数组;对初始化后的菜单页面结构体数组进行编译形成对应的目标文件。本发明易于添加内容,方便维护,缩短了开发周期,减少了测试花费,程序的稳定性强。
Description
技术领域
本发明涉及嵌入式系统软件设计,特别是多级菜单构建的方法。
背景技术
多级菜单结构是一种多叉树的拓扑结构。然而由于每级菜单的下级菜单节点数不同,不能用统一的数据结构来表示,导致现有技术方案不能直接实现多叉树拓扑结构,而是采用了将多叉树结构转换成二叉树结构实现的方法。这种方案一是不能清晰地表示菜单固有的级联结构;二是在结构数组表初始化时逻辑复杂不易添加;三是在确定菜单父子兄弟等关系时,处理过程繁琐及对菜单页面索引定义和使用进行了诸多限制。四是菜单数据项与地址强相关,当菜单数据项需要更新时,必须重新编译整个程序,然后再将整个程序升级到目标设备中,不能支持菜单数据项的单独升级。最终造成了扩展复杂,维护不易,测试花费大和程序稳定性差的问题。
而且,现有技术的方案,菜单数据项与参数强相关,且不能支持参数扩展。对不同类型参数的编码不同、相同参数格式显示不同等参数多变行为无能为力。
再者,现有技术的方案,菜单数据项和菜单文本内容强相关,不能灵活支持菜单文本内容的更新和多语言实现,不能支持语言包的单独升级;造成了当需要改变菜单文本内容时,需要重新编译整个程序,然后再将整个程序升级到目标设备中。
最后,现有技术的方案,在定义某一对象按键事件行为时需要将所有按键事件行为全部指定,当按键数量增多时,造成了空间浪费。
发明内容
本发明的目的是提供一种嵌入式系统中多级菜单构建方法,用于解决现有技术扩展性低、稳定性差的问题。同时,本发明还提供了一种实现该方法的计算机存储介质。
本发明的技术方案包括:
一种嵌入式系统中多级菜单构建方法,步骤如下:一个页面用于展示一级菜单;每一级菜单用一个菜单页面结构体表示,所有菜单页面结构体形成一个菜单页面结构体数组;菜单页面结构体中,至少包括:菜单页面索引值、菜单条目结构体数组(TItemConfiguration)和有效菜单条目个数;所述菜单条目结构体数组(TItemConfiguration)的预定大小大于所有页面中的最大条目数;所述菜单条目结构体数组(TItemConfiguration)至少包括:有效菜单条目的下一级菜单页面索引值;所述菜单页面索引值用于查找对应的页面;进行预处理:初始化菜单页面结构体数组;对初始化后的菜单页面结构体数组进行编译形成对应的目标文件。
一种计算机存储介质,存储实现上述方法的计算机程序。
本发明采用了新型的菜单页面结构体,以索引式的关联方式弱化菜单页面、参数模块、事件模块和语言模块之间的关系;在初始化时,将所有菜单页面都定义到菜单页面结构体中,即将所有菜单页面拉伸成一维结构体数组,并指定每一个菜单页面内有效的菜单条目个数等信息。最后做预处理操作,依据有效的菜单条目个数及其他信息生成菜单页面目标文件。生成的目标文件不存在空间浪费问题,且每一个菜单页面结构类同,菜单条目结构相同,菜单结构级联清晰;支持菜单页面的单独升级,克服了现有技术需要升级整个程序才能更新菜单页面的缺陷;易于添加内容、易于维护,缩短了开发周期,减少了测试花费,增强了程序的稳定性。
菜单页面使用文本内容索引关联到语言库模块,能够灵活支持菜单文本内容的更新和多语言实现,还能支持语言库的单独升级。
本发明能够生成参数模块的目标文件,菜单页面使用参数组索引关联参数模块,可以支持参数的多变化行为,易于实现复杂的参数显示与控制,易于后续扩展。
本发明能够生成事件模块的目标文件,菜单页面、参数模块利用事件组索引关联参数模块,可以支持按键事件的多变行为;而且不会因按键个数增加而产生按键事件空间浪费的情况。
附图说明
图1是菜单中各种元素的示意图;
图2是菜单显示交互过程示意图;
图3是本实施例的三级菜单结构图;
图4是本实施例初始化后的菜单级联结构示意图;
图5是本实施例菜单页面结构预处理结果示意图;
图6是菜单模块与菜单内容联系图;
图7是事件模块、参数模块与菜单内容联系图;
图8是语言模块交互示意图;
图9是SOC+MCU硬件方案示意图。
具体实施方式
方法实施例
为了便于说明,首先定义一些概念。
如图1所示,包括:菜单页面(Page)、画面(Screen)、条目(Item)、列/分栏(Column)和参数(Parameter)。它们之间的关系为:一行可显示一个菜单条目(Item);一个菜单页面(Page)可以有多个画面(Screen)组成,一个画面里面可包含多个菜单条目;一个菜单条目里面可包含多列(Column);每一列里面可包含菜单文本内容(Content)和参数(Parameter),如Content 1和Parameter1属于Column1,Content 2和Parameter2属于Column2。
本实施例中,采用128*64LCD液晶屏,一屏显示一个画面(Screen);一个画面最多显示四行(Item)。通过一些按键操作(如上、下按键),可以使画面滚动,看到更多画面(Screen);通过一些按键操作(如enter按键),可以进入某个条目的下一级菜单。
下文中,菜单页面也可以称为页面,菜单条目也称为条目。
下文中,索引值也称为索引。
下文中,许多称谓是十分灵活的。例如:菜单条目事件组索引也称为菜单条目的事件组的索引,还可以称为条目事件组索引。再如:页事件索引,也可以称为页面事件组索引,或者菜单页面的事件组索引。
下文中,出现了很多结构体和结构体数组,其中结构体为结构体数组的元素;例如菜单页面结构体和菜单页面结构体数组,菜单页面结构体为菜单页面结构体数组的元素。本文中,结构体和结构体数组会采用同样的英文标识TitemConfiguration表示,应根据具体语境进行理解。
本实施例以索引式的方法构建菜单结构,将所有菜单页面拉伸成一个菜单页面结构体数组,初始化该数组时将所有级菜单页面都定义到此数组中。该结构体包含菜单页面索引,页事件组索引,有效条目个数,有效条目列数以及文本内容索引,菜单条目的参数组索引和条目事件组索引、条目权限设置等信息。
由于每一级菜单节点数不同,为了保证每级菜单页面结构类同,菜单页面级联结构清晰,菜单页面易于添加,且不存在空间浪费问题,通过“预处理”(下文具体说明)方法生成目标文件。生成的目标文件菜单结构级联清晰且不存在空间浪费。菜单页面结构体中皆采用索引式的获取方法建立起与其它菜单页面和其它模块的联系,这种方式保证了菜单页面结构与地址无关。当菜单页面需要修改或者升级时,将“预处理”结果生成的二进制形式的bin文件通过升级链路(远程升级或者本地升级)更新到设备中,从而实现了在不升级整个程序的前提下更新菜单页面。
如图2所示为本发明的原理示意图,涉及到按键模块,菜单页面控制模块,语言模块,编码模块,参数模块,事件模块和显示模块。其中,按键模块、显示模块属于硬件,其他模块属于软件。
当用户按下按键时,按键模块探测到按键输入并将按键key值传递给菜单页面控制模块。菜单页面控制模块首先解析按键key值,然后根据按键key值进行动作。按键操作对象主要分为两类,一类是菜单条目操作,一类是参数操作。如果当前的操作对象是菜单条目,下一步动作包括:进入下一级菜单页面,选择上一个条目,选择下一个条目,返回上一级菜单页面等动作。当菜单页面控制模块确定按键key值后,菜单页面控制模块会根据菜单条目的事件组索引从事件模块中获取当前按键key值对应的按键事件行为。如果该菜单条目的事件组索引无对应的按键事件行为,菜单页面控制模块将根据该页面事件组索引从事件模块中获取当前按键key值对应的按键事件行为。如果该页面事件组索引无对应的按键事件行为,菜单页面控制模块将依据按键默认事件行为动作。如果当前操作的对象是一个参数,下一步动作包括进入参数编辑状态,退出参数编辑状态,保存当前参数,取消修改当前参数,选择参数上一位,选择参数下一位等动作。当菜单页面控制模块确定按键key值后,菜单页面控制模块首先会根据该参数的事件组索引从事件模块中获取当前按键key值对应的按键事件行为。如果该参数的事件组索引无对应的按键事件行为,菜单页面控制模块将逐次从该参数所属的条目,页面和默认中获取当前按键key值对应的按键事件行为。
无按键按下时,菜单页面控制模块会以固定周期调用刷新事件行为(按键默认事件行为)。
菜单页面控制模块会根据确定的事件行为进行动作:确定该画面中要显示的首个条目,确定该画面中选中的菜单条目或者选中的参数,以及当参数在编辑状态时选中的位数等控制信息。确定各种信息后,菜单页面控制模块将会从该画面中首个菜单条目开始,逐菜单条目解析,并将解析结果刷新到LCD缓冲区。解析过程如下:根据菜单条目配置权限信息决定是否显示该菜单条目,如果不满足权限条件则解析下一个菜单条目。如果满足显示条件,则根据菜单文本内容索引从语言模块中获取文本内容。获取到的文本内容加上编码方式送入编码模块,然后将从编码模块获取到的已编码文本内容刷新到对应位置的LCD缓冲区。之后依据参数组索引,从参数模块中逐个获取并解析有效参数。根据参数的配置信息,输出既定格式的参数值,将参数值和编码方式传递给编码模块以获取编码后的参数信息,并将此结果刷新到对应位置的LCD缓冲区。参数配置可以给参数指定不同的输出格式,或指定不同的编码方式、显示位置等信息,从而保证参数的灵活支持。当所有信息都刷新到LCD缓冲区后,菜单页面控制模块通知显示模块有新的数据需要显示。显示模块会比较本次LCD缓冲区数据和上一次数据是否相同,如果不同,则将LCD缓冲区内的数据刷新到LCD屏上;如果相同,则不刷新LCD缓冲区数据到LCD屏上,以减少总线压力和CPU消耗。针对一些需要嵌入“键盘”参数的输入,本技术方案将所有使用的“键盘”类型定义到菜单页面结构体中,通过参数配置中的键盘索引值来锁定使用哪类键盘。当参数输入进入编辑状态时,菜单页面控制模块将根据参数配置的键盘索引值来获取对应的“键盘“菜单页面,并由菜单页面控制模块将其刷新到对应位置的LCD缓冲区中,此时按键的操作将会在“键盘”菜单页面上动作。当按下上下键时,“键盘”菜单页面上的光标上下移动以此来选中对应内容。当按下确认键,“键盘”菜单页面上选中的内容会传递到当前参数输入数据中,从而实现参数编辑的“键盘”输入。当按下菜单键时,退出编辑状态,“键盘”菜单页面不在显示。参数配置中的键盘索引值可以配置以关联不同的“键盘”,从而实现不同类型参数的灵活编辑。
本发明以索引式的关联方法弱化菜单页面、参数模块、事件模块和语言模块之间的关系。下面详细阐述各个部分的实施方式。
一,菜单页面
1.1菜单页面结构体定义
首先定义菜单页面结构体TUserPageConfiguration,此结构体包含TUserPageHeadCtrl和TItemConfiguration两部分。其中TUserPageHeadCtrl包括当前菜单页面的索引,当前菜单页面所对应的菜单页面的事件组索引(即页事件组索引)TBtnEventIdxType,菜单条目个数,菜单条目有效列数等信息。TItemConfiguration是一个菜单条目结构体数组,此数组大小只要大于所有菜单页面中最大的节点数即可。TItemConfiguration包括菜单条目的文本内容索引值,菜单条目权限配置信息,菜单条目的事件组索引(即条目事件组索引)TBtnEventIdxType,以及菜单条目参数配置信息TItemParameterConfig等等。
菜单页面索引值:每个菜单页面具有一个唯一的菜单页面索引值,每一个菜单条目可以使用菜单页面索引值指向下一级菜单页面。
1.2菜单页面结构体数组“预处理”
“预处理”包括:创建一个配置文件,并在初始化时根据需求填充配置文件;创建一个程序运行文件并包含此配置文件;建立“预处理”工程项目,将配置文件和程序运行文件加入并编译运行;程序运行文件会根据配置文件中有效的数据个数进行序列化,生成一个二进形式的目标文件。然后将此目标文件包含在工程项目中以供引用。
此“预处理”过程所采用的技术手段均为现有技术手段,可以总结为:首先初始化,然后编译形成目标文件。
具体的:
图3展示了一个简单的菜单级联结构,其中第一级菜单页面包含六个菜单条目,仅行车信息条目包含下级菜单页面;第二级菜单页面包含两个菜单条目,仅车辆信息条目包含下级菜单页面;第三级菜单页面包含一个菜单条目。
当需要对菜单页面进行初始化时,建立菜单页面结构体配置文件user_page_table.cfg,填充每一个菜单页面结构体TUserPageConfiguration内的TUserPageHeadCtrl和TItemConfiguration。如:为每个菜单页面设定唯一的菜单页面索引值,指定有效的菜单条目个数,页事件组索引,条目的文本内容索引,每个菜单条目的下一级菜单页面索引值,条目事件组索引,参数配置等等信息。初始化后的菜单级联结构示意图如图4所示。
将配置文件user_page_table.cfg和程序运行文件加入并编译运行,程序运行文件根据配置文件中有效的数据个数进行序列化,生成一个二进形式的bin文件和与二进制数据等价的C数组形式的C文件,即完成了生成菜单页面。
本实施例中之所以保留C文件,是考虑到某些C编译器不能直接引用bin文件参与编译。
通过“预处理”方法生成菜单页面配置二进制形式的bin文件和与二进制数据等效的C数组形式的C文件,无效的菜单条目不参与序列化过程。通过“预处理”方法将不同节点的结构体数组初始化表转换成一个结构类同的目标文件,然后将此目标文件包含在工程项目中引用。
针对上述三级菜单级联结构,仅写入6+2+1个有效菜单条目。其示意图如图5所示。
每一个菜单页面根据有效菜单条目个数进行序列化,从而达到每一级菜单页面内菜单条目可以不同,菜单页面结构类同,菜单条目结构相同,生成的目标文件不存在空间浪费问题。仅仅使用菜单条目内的菜单页面索引值来关联下一级菜单页面,从而达到菜单结构级联清晰。
1.3菜单页面结构“预处理”结果使用
由于预处理后每一级菜单页面中包含的菜单条目不一样,即每一级菜单页面长度不同,因此在查找菜单页面索引时不能使用固定的数组下标去获取。做如下处理:定义一个与菜单“页面总个数”相同的TUserPageHeadCtrl类型指针数组,在系统初始化时根据“页面总个数”和每一级菜单页面有效条目,将每一个数组元素分别指向对应位置的菜单页面地址。当需要根据菜单页面索引查找某个菜单页面时,在TUserPageHeadCtrl类型指针数组中通过二分查找实现。(由于有效条目数量不同,则每个菜单页面索引值对应的菜单页面地址是不相同的,因此需要寻址)。
1.4菜单页面升级支持
在菜单页面结构体中,所有的成员均使用的是数据索引,而不是地址,因此整个菜单页面结构是与无地址无关的。当菜单页面需要修改或者升级时,可以将“预处理”结果生成的目标bin文件通过升级链路(远程升级或者本地升级)烧写到FLASH对应的区域,从而完成菜单页面的更新和升级。当设备重新启动时,从事先预定的FLASH区域读取有效的菜单页面进行处理。
综上,关于菜单页面,将所有菜单页面拉伸成一维结构体数组,使用唯一菜单页面索引来指定菜单页面和菜单条目是否有下一级菜单页面。通过“预处理”方法将不同节点的结构体数组初始化表转换成一个结构类同的目标文件,然后将此目标文件包含在工程项目中引用。
二,参数模块
在菜单页面结构数组中使用菜单条目参数配置信息TitemParameterConfig(其中包括参数组索引)从参数模块中获取对应的参数值。在参数组列表中将每一组参数都定义到参数结构数组中,即将所有参数组拉伸成一维结构体数组。由于每一参数组的参数个数不同,通过“预处理”方式将参数个数不同的参数组转换成一个结构类同的目标文件,然后将此目标文件包含在工程项目中引用。2.1参数模块结构体定义
2.1参数组结构体定义
首先定义参数组结构体TUserPageParameterListConfig,此结构体包含TUserPageParameterHeadCtrl和TUserPageParameterConfig两部分。在TUserPageParameterHeadCtrl其中包括表示当前参数组的索引,参数个数等信息。TUserPageParameterConfig是一个参数配置结构体数组,此数组大小只要大于每一参数组中最大参数个数即可。TUserPageParameterConfig包括参数ID(参数ID值唯一),对齐方式,显示位置,显示类型,编码方式以及触发参数时对应的按键事件组索引和进入编辑状态时对应的“键盘”信息等等,从而可以实现参数的多变化行为。
参数模块与菜单页面控制模块的联系如图6所示,每个参数组具有一个唯一的参数组索引值,每个参数组存储对应条目的参数信息。
菜单条目参数配置信息TItemParameterConfig中包含参数组索引,每一个有效的参数组索引都对应到参数组列表中的参数组上。
2.2参数组结构体“预处理”
与1.2类似的,通过“预处理”方法生成参数配置二进制形式的bin文件和与二进制数据等效的C数组形式的C文件,即生成了参数组列表,或者说生成了参数模块。
2.3参数组列表“预处理”结果使用
由于预处理后每一个参数组中包含的参数个数不一样,即每一个参数组长度不同,因此在查找参数组时不能使用固定的数组下标去获取。做如下处理:定义一个与参数组列表个数相同的TUserPageParameterHeadCtrl类型指针数组,在系统初始化时根据参数组列表个数和参数组中有效参数个数,将每一个数组元素分别指向对应位置的参数组首地址。当根据参数组索引值需要查找某个参数组时,在TUserPageParameterHeadCtrl类型指针数组中通过二分查找获取。(原理与1.4类同)
综上,基本原理与菜单页面的处理相同,故上述内容较为简略。
三,事件模块
在菜单页面结构体TUserPageConfiguration和参数配置结构体TUserPageParameterConfig中使用事件组索引TBtnEventIdxType来指定当前“对象”的按键事件行为。系统中一般都存在多个按键,但每个“对象”对应的有效按键事件行为个数不同,造成不能用统一的数据结构来表示。如果将所有的按键事件行为都对应到“对象”上,当按键个数增多时,势必造成较大的空间浪费。为了支持每个事件组具有不同的有效按键事件行为,本技术方案首先将所有按键事件行为定义到事件结构体数组中,通过“预处理”方法将有效的按键事件行为转换成一个结构类同的目标文件,然后将此目标文件包含在目标工程项目中引用。
3.1事件组结构体定义
首先定义事件组结构体TUserPageBtnEventConfiguration,此结构体包含TUserPageBtnEventHeadCtrl和TUserPageKeyEventPair两部分。TUserPageBtnEventHeadCtrl包括当前事件组的索引(每个事件组索引值唯一),按键事件有效个数等信息。TUserPageKeyEventPair是一个事件配置结构体数组,此数组大小只要大于最大按键事件个数即可,其中包括按键key值以及所对应的按键事件函数ID等等信息。
事件模块与参数模块、菜单页面控制模块的联系如图7所示,每个事件组具有一个唯一的事件组索引值。而且,事件组索引包括页事件组索引和条目事件组索引,页事件组索引值用于查找页面的按键事件,条目事件组索引用于查找条目的按键事件。
菜单页面结构体TUserPageConfiguration和参数配置结构体TUserPageParameterConfig中均可以包含事件组索引,每一个有效的事件组索引都对应到事件组列表中的事件组上。
3.2事件组列表结构数组“预处理”
通过“预处理”方法生成事件配置二进制形式的bin文件和与二进制数据等效的C数组形式的C文件,即完成了生成事件组列表,或者说生成了事件模块
3.3事件组列表“预处理”结果使用
由于预处理后每一个事件组中包含的按键事件行为个数不一样,即每一个事件组长度不同,因此在查找事件组时不能使用固定的数组下标去获取。因此需要做如下处理:定义一个与事件组列表个数相同的TUserPageBtnEventHeadCtrl类型指针数组,在系统初始化时根据事件组列表个数和事件组中有效按键事件行为个数,将每一个数组元素分别指向对应位置的事件组首地址。当根据事件组索引需要查找某个事件组时,在TUserPageBtnEventHeadCtrl类型指针数组中通过二分查找获取。(原理与1.4类同)
综上,基本原理与菜单页面的处理相同,故上述内容较为简略。
四,语言模块
4.1多语言及升级支持
在菜单页面结构体中使用文本内容索引值,而不是直接使用文本内容,因此使用该文本内容索引值获取文本内容是与地址无关的。当用户选择了一种语言后,菜单页面控制模块会以该文本内容对应的索引值从语言模块对应的语言库中获取当前文本内容。与语言模块交互示意图如图8所示:
若当前系统中的语言库需要升级更新或者需要添加一种新的语言时,通过系统升级链路(远程升级或者本地升级)将语言包(库)烧写到预先划分好的FLASH对应的空间,以此完成语言包的升级和更新,而不需要升级整个设备程序。
4.2生成语言包(库)
语言包(库)是将所有文本内容转换成十六进制后生成的bin文件。将user_page_xxx.txt文件作为输入,使用generate_user_page_text.c文件作为程序运行文件编译运行,最后输出user_page_xxx_txt.bin和user_page_xxx_txt.c两个文件。user_page_xxx_txt.c可包含在工程中进行编译使用,user_page_xxx_txt.bin作为目标文件可通过系统升级链路更新到系统中。
4.3索引文本内容
由于每个文本项内容(或者说每个条目的文本内容)长度不同,无法在目标文件中使用索引值获取正确的文本项内容。做如下处理:定义一个与文本项个数相同的字符型类型指针数组,在系统初始化时根据文本项个数将每一个指针数组元素分别指向对应文本项内容首地址。当根据文本内容索引值获取对应的文本项内容时,直接使用指针数组获取即可得到文本项内容。
五,硬件
本实施例中,如图9所示,菜单页面数据项和逻辑以及升级在SOC设备上的菜单应用程序中完成,所有菜单页面内容的编码工作均在菜单应用程序上转换。菜单应用程序以固定频率将已编码的菜单内容通过接口(SPI或其他)传送到MCU设备中,然后刷新到LCD屏上。当用户按下按键时,MCU设备将按键的key值通过接口上送到SOC设备上。菜单应用程序解析key值,然后根据菜单逻辑动作后将新的内容下发给MCU设备显示。由于菜单数据项和逻辑及编码是在SOC设备上完成的,MCU设备侧不需要存储字库编码等内容,大大减少了MCU侧RAM和ROM的消耗。
除了上述SOC+MCU的硬件方案,作为其他实施方式,也可以采用MCU+MCU的硬件方案,还可以采用单MCU的硬件方案。也就是说,本发明并不限定具体的硬件实施方式,只要能够满足性能需求,现有技术的各种方式均可以采用。
上述实施例中,生成了菜单页面、参数模块、事件模块和语言模块(即菜单页面的目标文件、参数模块的目标文件、事件模块的目标文件和语言模块的目标文件)上述生成的目标文件可以直接包含在项目工程中使用。
当需要更新菜单页面、参数模块、事件模块或者语言模块中的任一个或者组合时,将需要更新的模块打包成一个更新包并附加每个目标文件的信息。将生成的更新包通过设备原有的升级链路(远程升级或者本地升级)更新到设备中。当设备接收到完整的更新包后,解析出更新包中存在的目标文件,并根据附加的目标文件信息将其直接写入到对应的存储位置。重启设备,重新读取菜单相关的目标文件,完成更新。
上述实施例,是一种典型的、优选的实施方式,通过结构定义、预处理的方法生成菜单页面、参数模块、事件模块和语言库。根据以上实施例的说明可知,菜单页面、参数模块、事件模块和语言库的生成本质上是相互独立的(虽然他们之间通过索引值来进行联系),也就是说,作为其他实施方式,可以仅通过以上实施例的方法生成菜单页面,而参数模块、事件模块等可以不采用以上实施例的方法,而采用现有技术的方式来实现,例如不使用参数组索引和事件组索引,直接在菜单条目中配置各种参数、事件信息。
计算机存储介质实施例
关于本发明的主题,考虑到在应用时,首先通过按照上述方法过程形成多个目标文件,即各种模块(语言模块、参数模块等),然后将目标文件烧录到存储器中。在用户使用时,根据图2,首先根据各种模块之间的关联形成多级菜单,然后通过key值实现对各种模块的调用,从而实现对多级菜单的操作。因此,本发明保护的构建方法,实际上是构建了图2中的各种模块(包括语言模块、参数模块、事件模块以及菜单页面,不包括菜单页面控制模块;菜单页面控制模块则可以采用现有技术实现)。故而,本发明的主题还包括一种计算机存储介质实施例,其存储有根据上述方法过程(包括各个模块的定义结构体、“预处理”过程)形成的计算机程序,并且计算机程序可以被读取。显然,对于计算机存储介质的材料,可以采用现有技术中任意的存储介质,本发明并不做限制。
Claims (7)
1.一种嵌入式系统中多级菜单构建方法,其特征在于,步骤如下:
一个页面用于展示一级菜单;每一级菜单用一个菜单页面结构体表示,所有菜单页面结构体形成一个菜单页面结构体数组;
菜单页面结构体中,至少包括:菜单页面索引值、菜单条目结构体数组(TItemConfiguration)和有效菜单条目个数;所述菜单条目结构体数组(TItemConfiguration)的预定大小大于所有页面中的最大条目数;所述菜单条目结构体数组(TItemConfiguration)至少包括:有效菜单条目的下一级菜单页面索引值;
所述菜单页面索引值用于查找对应的页面;
进行预处理:初始化菜单页面结构体数组;对初始化后的菜单页面结构体数组进行编译形成对应的目标文件。
2.根据权利要求1所述的嵌入式系统中多级菜单构建方法,其特征在于,
所述菜单条目结构体数组(TItemConfiguration)中包括文本内容索引值;所述文本内容的索引值用于用于从语言库中查找对应的文本内容;
将所有文本内容进行编译形成所述语言库。
3.根据权利要求1所述的嵌入式系统中多级菜单构建方法,其特征在于,
所述菜单页面结构体中包括参数组索引值;
定义参数组结构体,参数组结构体至少包括:参数配置结构体数组(TUserPageParameterConfig)、参数组的参数个数和所述参数组索引值;所述参数配置数组的预定大小大于所有参数组中的最大参数个数;所述参数配置结构体数组(TUserPageParameterConfig)包括参数配置信息;参数组索引值用于查找对应的参数组;
多个参数组结构体形成一个参数组结构体数组;初始化所述参数组结构体数组;对参数组结构体数组进行编译形成对应的目标文件。
4.根据权利要求1所述的嵌入式系统中多级菜单构建方法,其特征在于,
所述菜单页面结构体中包括事件组索引值;
定义事件组结构体,至少包括:事件配置结构体数组(TUserPageKeyEventPair)、事件组的事件个数和所述事件组索引;所述事件配置数组的预定大小大于所有参数组中的最大事件个数;所述事件配置结构体数组(TUserPageKeyEventPair)包括事件配置信息;所述事件组索引值用于查找对应的事件组;
多个事件组结构体形成一个事件组结构体数组;初始化所述事件组结构体数组,对事件组结构体数组进行编译形成对应的目标文件。
5.根据权利要求3所述的嵌入式系统中多级菜单构建方法,其特征在于,
所述参数组结构体中包括事件组索引值;
定义事件组结构体,至少包括:事件配置结构体数组(TUserPageKeyEventPair)、事件组的事件个数和所述事件组索引;所述事件配置数组的预定大小大于所有参数组中的最大事件个数;所述事件配置结构体数组(TUserPageKeyEventPair)包括事件配置信息;所述事件组索引值用于查找对应的事件组;
多个事件组结构体形成一个事件组结构体数组;初始化所述事件组结构体数组,对事件组结构体数组进行编译形成对应的目标文件。
6.根据权利要求4或5所述的嵌入式系统中多级菜单构建方法,其特征在于,所述事件组索引包括页事件组索引值和条目事件组索引值;所述页事件组索引值用于查找页面的按键事件;所述条目事件组索引用于查找条目的按键事件。
7.一种计算机存储介质,其特征在于,所述计算机存储介质中存储有实现如权利要求1-6任一项所述方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910759433.8A CN112394928B (zh) | 2019-08-16 | 2019-08-16 | 一种嵌入式系统中多级菜单构建方法与计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910759433.8A CN112394928B (zh) | 2019-08-16 | 2019-08-16 | 一种嵌入式系统中多级菜单构建方法与计算机存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112394928A true CN112394928A (zh) | 2021-02-23 |
CN112394928B CN112394928B (zh) | 2023-08-25 |
Family
ID=74602892
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910759433.8A Active CN112394928B (zh) | 2019-08-16 | 2019-08-16 | 一种嵌入式系统中多级菜单构建方法与计算机存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112394928B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112835490A (zh) * | 2021-02-24 | 2021-05-25 | 北京金山云网络技术有限公司 | 一种菜单展示方法、装置、客户端设备及存储介质 |
CN116775028A (zh) * | 2023-06-30 | 2023-09-19 | 东风电驱动系统有限公司 | 一种行车记录仪的ui设计实现方法及系统 |
CN117331642A (zh) * | 2023-11-30 | 2024-01-02 | 广州嘉为科技有限公司 | 一种基于分层组织的节点管理方法、装置、设备及介质 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004206365A (ja) * | 2002-12-25 | 2004-07-22 | Nec System Technologies Ltd | ランチャメニュー処理方式、ランチャメニュー処理方法及びそのプログラム |
CN1940833A (zh) * | 2005-09-26 | 2007-04-04 | 鸿富锦精密工业(深圳)有限公司 | 多级菜单显示装置及其方法 |
US20090228832A1 (en) * | 2008-03-04 | 2009-09-10 | Cheng Yi-Hsun E | Presenting a menu |
CN102226884A (zh) * | 2011-05-25 | 2011-10-26 | 广州视睿电子科技有限公司 | 一种触摸屏控制系统及触摸屏的控制方法 |
US20120066647A1 (en) * | 2010-09-13 | 2012-03-15 | Kay Dirk Ullmann | Method and Program for Menu Tree Visualization and Navigation |
CN104615422A (zh) * | 2015-01-07 | 2015-05-13 | 青岛艾迪森软件有限公司 | 一种应用软件界面流程自定义的方法 |
CN106033295A (zh) * | 2015-03-09 | 2016-10-19 | 阿里巴巴集团控股有限公司 | 菜单显示方法、装置及移动终端 |
CN106484422A (zh) * | 2016-10-12 | 2017-03-08 | 歌尔科技有限公司 | 智能穿戴设备多级菜单页面显示方法和智能穿戴设备 |
CN106598570A (zh) * | 2016-11-15 | 2017-04-26 | 积成电子股份有限公司 | 一种嵌入式系统中多级菜单的构建与显示方法 |
CN107632756A (zh) * | 2017-09-29 | 2018-01-26 | 深圳市元征科技股份有限公司 | 程序菜单显示方法及终端 |
CN109165053A (zh) * | 2018-08-15 | 2019-01-08 | 康美健康云服务有限公司 | 应用软件菜单配置方法、移动终端及计算机可读存储介质 |
CN110119294A (zh) * | 2019-04-04 | 2019-08-13 | 口碑(上海)信息技术有限公司 | 菜单页面的生成方法、装置及系统 |
-
2019
- 2019-08-16 CN CN201910759433.8A patent/CN112394928B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004206365A (ja) * | 2002-12-25 | 2004-07-22 | Nec System Technologies Ltd | ランチャメニュー処理方式、ランチャメニュー処理方法及びそのプログラム |
CN1940833A (zh) * | 2005-09-26 | 2007-04-04 | 鸿富锦精密工业(深圳)有限公司 | 多级菜单显示装置及其方法 |
US20090228832A1 (en) * | 2008-03-04 | 2009-09-10 | Cheng Yi-Hsun E | Presenting a menu |
US20120066647A1 (en) * | 2010-09-13 | 2012-03-15 | Kay Dirk Ullmann | Method and Program for Menu Tree Visualization and Navigation |
CN102226884A (zh) * | 2011-05-25 | 2011-10-26 | 广州视睿电子科技有限公司 | 一种触摸屏控制系统及触摸屏的控制方法 |
CN104615422A (zh) * | 2015-01-07 | 2015-05-13 | 青岛艾迪森软件有限公司 | 一种应用软件界面流程自定义的方法 |
CN106033295A (zh) * | 2015-03-09 | 2016-10-19 | 阿里巴巴集团控股有限公司 | 菜单显示方法、装置及移动终端 |
CN106484422A (zh) * | 2016-10-12 | 2017-03-08 | 歌尔科技有限公司 | 智能穿戴设备多级菜单页面显示方法和智能穿戴设备 |
CN106598570A (zh) * | 2016-11-15 | 2017-04-26 | 积成电子股份有限公司 | 一种嵌入式系统中多级菜单的构建与显示方法 |
CN107632756A (zh) * | 2017-09-29 | 2018-01-26 | 深圳市元征科技股份有限公司 | 程序菜单显示方法及终端 |
CN109165053A (zh) * | 2018-08-15 | 2019-01-08 | 康美健康云服务有限公司 | 应用软件菜单配置方法、移动终端及计算机可读存储介质 |
CN110119294A (zh) * | 2019-04-04 | 2019-08-13 | 口碑(上海)信息技术有限公司 | 菜单页面的生成方法、装置及系统 |
Non-Patent Citations (5)
Title |
---|
DANIEL BACHMANN: "Review of Three-Dimensional Human-Computer Interaction with Focus on the Leap Motion Controller", pages 1 - 6, Retrieved from the Internet <URL:《https://www.mdpi.com/1424-8220/18/7/2194》> * |
MATTHEW M. DAVIS: "Depth-based 3D gesture multi-level radial menu for virtual object manipulation", 《2016 IEEE VIRTUAL REALITY (VR)》, pages 1 - 9 * |
佚名: "一个轻量级的单片机多级菜单实现方法", pages 1 - 4, Retrieved from the Internet <URL:《https://www.21ic.com/app/mcu/201805/760690.htm》> * |
李敏通: "一种建立单片机应用系统菜单的新方法", 《计算机工程》, pages 259 - 260 * |
王清珍: "基于单片机的门禁系统多级菜单设计", 《现代电子技术》, pages 55 - 57 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112835490A (zh) * | 2021-02-24 | 2021-05-25 | 北京金山云网络技术有限公司 | 一种菜单展示方法、装置、客户端设备及存储介质 |
CN116775028A (zh) * | 2023-06-30 | 2023-09-19 | 东风电驱动系统有限公司 | 一种行车记录仪的ui设计实现方法及系统 |
CN116775028B (zh) * | 2023-06-30 | 2024-01-26 | 东风电驱动系统有限公司 | 一种行车记录仪的ui设计实现方法及系统 |
CN117331642A (zh) * | 2023-11-30 | 2024-01-02 | 广州嘉为科技有限公司 | 一种基于分层组织的节点管理方法、装置、设备及介质 |
CN117331642B (zh) * | 2023-11-30 | 2024-03-19 | 广州嘉为科技有限公司 | 一种基于分层组织的节点管理方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112394928B (zh) | 2023-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112394928B (zh) | 一种嵌入式系统中多级菜单构建方法与计算机存储介质 | |
US5041967A (en) | Methods and apparatus for dynamic menu generation in a menu driven computer system | |
US7469253B2 (en) | Associative hash partitioning using pseudo-random number generator | |
US5140644A (en) | Character string retrieving system and method | |
CN101661391B (zh) | 一种对象序列化方法、对象反序列化方法、装置及系统 | |
CN103631601A (zh) | 一种代码生成方法和装置 | |
US5964861A (en) | Method for writing a program to control processors using any instructions selected from original instructions and defining the instructions used as a new instruction set | |
JP2818529B2 (ja) | 情報記憶装置 | |
CN100527131C (zh) | 一种ims数据库互动式访问方法和工具 | |
JP2012108874A (ja) | データベースの管理方法 | |
CN103678687A (zh) | 基于配置系统的项目创建方法及装置 | |
CN101059758B (zh) | 屏幕转换程序生成方法及设备 | |
US20080033949A1 (en) | Electronic apparatus and method therefor | |
CN101859242B (zh) | 一种寄存器读写方法及装置 | |
CN103207787A (zh) | 一种项目开发中数据包的加载方法及系统 | |
CN101770508A (zh) | 移动通信终端中的数据访问方法和设备 | |
CN117235291B (zh) | 基于静态索引表的全文检索方法及装置 | |
CN113704257B (zh) | 数据表的更新方法和装置 | |
JP2722684B2 (ja) | ファイルシステムの検索装置 | |
CN111597323B (zh) | 关键字段过滤方法、装置、存储介质及电子设备 | |
CN108553899A (zh) | 一种即点即玩游戏的开发装置及其方法 | |
JP3988900B2 (ja) | 文書処理装置およびそのプログラム記憶媒体 | |
CN116149652A (zh) | 一种基于vba的汽车仪表人机交互软件设计方法 | |
Shrivastav et al. | Terminal Based Text Editor | |
Kobayashi | Information and information processing structure |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: No. 6, Yutong Road, Guancheng Hui District, Zhengzhou, Henan 450061 Applicant after: Yutong Bus Co.,Ltd. Address before: No.1, Shibali Heyu Road, Guancheng Hui District, Zhengzhou City, Henan Province Applicant before: ZHENGZHOU YUTONG BUS Co.,Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |