一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于VxWorks实时操作系统的封装方法与流程

2021-11-05 20:52:00 来源:中国专利 TAG:
一种基于vxworks实时操作系统的封装方法
技术领域
:1.本发明属于计算机操作系统领域,涉及一种基于vxworks实时操作系统的封装方法。
背景技术
::2.实时操作系统属于基于任务优先级的操作系统,任务与消息队列是实时操作系统的两大核心特性,任务间的数据传输通常使用操作系统消息队列进行完成,二者使用通常紧密结合在一起的。3.实时操作系统属于基于任务优先级的操作系统,在系统运行过程中经常会需要任务之间进行消息传递,而且消息的长度一般不是定长的,传统的做法是创建消息队列时将消息队列消息的长度值设置的非常大,另外申请一个足够大的数组变量临时存储要发送的消息,或者在不同的任务中定义不同长度的消息队列,申请不同长度的数组临时变量存储要发送的消息。传统设计方法的缺点:内存空间浪费比较大,任务间消息的传递效率比较低,当两个任务之间传递多种类型的数据时,还需在数据内容中增加消息类型的内容,这样不利于保证整个消息的完整性。,同时对于接收的消息类型增多时,伴随消息处理函数增多而导致的处理函数的处理效率降低。技术实现要素:4.本发明解决的技术问题是:克服现有技术的不足,提出一种基于vxworks实时操作系统的封装方法。5.本发明解决技术的方案是:6.第一方面,本发明提供一种基于vxworks实时操作系统的封装方法,该方法的步骤包括:7.步骤一,设计消息队列管理结构体,消息队列管理结构体中包括结构状态、消息类型、消息特征码、消息长度、数据指针;8.步骤二,定义全局数组管理消息,数组元素为消息队列管理结构体,对全局数组中的所有元素进行初始化操作,将数组每个元素的消息队列管理结构体中结构状态标识为未占用;9.步骤三,在消息队列发送函数中,通过为消息队列管理结构体申请指针变量,实现为所要传递的消息内容申请空间;10.步骤四,对步骤三申请的消息队列管理结构体指针变量进行赋值;11.步骤五,将消息队列管理结构体通过操作系统消息队列发送函数发送出去,并释放消息队列管理结构体指针变量的空间;12.步骤六,将消息的发送线程和接收线程进行关联,并在接收线程中获取收到的消息队列管理结构体,接收线程接收到的消息队列管理结构体中的数据指针和发送线程发送的消息队列管理结构体中的数据指针指向相同的地址,数据获取成功后,进入步骤七;13.步骤七,解析并处理消息队列管理结构体的内容,完成vxworks实时操作系统的封装。14.所述步骤一中,结构状态表示该消息结构是否被占用;15.消息类型表示消息最终传递所使用的物理总线类型;16.消息特征码表示消息的类型,根据系统安全分为公开消息和私有消息;17.长度信息表示消息的长度;18.数据指针表示所传递数据在内存堆中的位置,类型为无符号字符指针类型。19.所述步骤三的实现方式如下:20.在消息队列发送函数中申请一个消息管理结构体指针变量,并对此指针变量进行内存申请,通过遍历全局数组中元素查找结构状态标记为未占用的元素,将该元素的地址赋值给消息管理结构体指针变量。21.所述步骤四中,对该指针变量进行赋值的实现方式如下:22.(1)将消息类型赋值为此次传输消息所使用的物理总线类型;23.(2)将消息特征码赋值为此次发送数据类型;24.(3)将消息长度赋值为用户传递的数据长度;25.(4)将数据指针赋值为动态申请到的对应消息长度的内存空间首地址。26.所述步骤七的实现方式如下:27.(1)申请一个消息处理表结构,结构的内容包括消息类型、特征码、无符号指针型函数指针;28.(2)由用户定义一个消息处理表,消息处理表为数组形式,每个元素为消息处理表结构;29.(3)设计消息处理函数,消息处理函数的形参包括接收到的消息队列管理结构体指针、消息处理表的地址以及消息处理表中的元素个数;30.(4)从消息处理表第一个元素开始,判断消息处理表中当前元素是否同时满足以下三个要求:31.消息处理表中当前元素的消息类型与消息队列管理结构体中的消息类型一致;32.消息处理表中当前元素的特征码与消息队列管理结构体中的消息特征码一致;33.消息处理函数指针不为null;34.若同时满足,则根据消息处理函数指针所指的消息处理函数实体对消息队列管理结构体中的消息进行处理;35.若不能同时满足上述三个要求,则进行消息处理表中下一个元素的判断,直到完成所有元素的判断。36.所述步骤(1)中,消息类型表示此次传输消息的物理类型;特征码表示此次发送数据类型;函数指针表示处理函数的指针。37.所述步骤(3)中,消息处理表中的元素个数=数组a所占的空间/数组a中第一个元素所占的空间,其中a为消息处理表的数组名。38.所述步骤(2)中,消息处理表的内容由使用者填充。39.第二方面,本发明提供一种终端设备,包括:40.存储器,用于存储至少一个处理器所执行的指令;41.处理器,用于执行存储器中存储的指令实现第一方面所述的方法。42.第三方面,本发明提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行第一方面所述的方法。43.本发明与现有技术相比的有益效果是:本发明通过设计消息队列管理结构体,将所传输的消息存储到按照消息长度开辟的内存空间中,从而节省了内存空间,同时将消息类型字段设计到消息队列管理结构体中,而非加到消息数据中,这种方式保证了消息的完整性,提高了消息的传递效率。本发明通过设计消息处理表结构,通过遍历匹配的方式进行处理函数管理,提高了消息接收处理函数的处理效率。44.按照本发明方法进行vxworks操作系统封装后,任务中消息队列传输数据,可以不受任务本身堆栈大小的限制,可以传递满足系统堆长度的任何变长数据,同时任务间数据传输只需提供数据的首地址以及内存的长度,提高了系统层调用的便利性。附图说明45.图1为一种基于vxworks实时操作系统的封装方法流程图;46.图2为任务间传输的消息管理结构体示意图。具体实施方式47.下面结合附图对本发明作进一步阐述。48.为了解决在实时操作系统vxworks下更高效地开发程序,本发明将实时操作系统的任务和消息队列进行进一步的封装,让二者进行更紧密的耦合,使得在实时操作系统上开发不需要调用系统底层的操作配置函数进行繁琐配置。按照本发明方法对vxworks实时操作系统封装后,后续直接调用封装好的框架进行开发,提高了效率,同时也保证了操作系统的安全。49.结合图1,本发明的具体实现方法如下:50.s1:设计消息队列管理结构体queue_stru,用来管理消息队列所传递的信息。消息队列管理结构体queue_stru中包括,结构状态strusta、消息类型queuetype、消息特征码chacode、长度信息sizeinfo和数据指针pdata。51.(1)结构状态strusta表示该消息结构是否被占用(包括占用occupied和未占用unoccupied)52.(2)消息类型queuetype;表示消息最终传递所使用的物理总线类型。53.(3)消息特征码chacode:表示消息的类型,根据系统安全分为公开消息和私有消息。54.(4)长度信息sizeinfo:表示消息的长度(以字节为单位)。55.(5)数据指针pdata:类型为无符号字符指针类型,表示所传递数据在内存堆中的位置。结合长度信息sizeinfo可以获得传输数据的所有内容。56.如图2所示。57.s2:使用s1中设计的消息队列管理结构体queue_stru对消息队列管理结构体指针的申请进行管理。管理使用的方法为使用消息队列管理结构体queue_stru全局数组进行管理。58.(1)定义全局数组taskqarray,该数组元素为消息队列管理结构体queue_stru,数组长度为系统定义的最大消息队列数量max_q_len。59.(2)对全局数组taskqarray中的所有变量进行初始化操作。初始化方法为循环将全局数组taskqarray中第一个元素到max_q_len个元素中结构状态strusta成员设置为未占用unoccupied,并将系统堆空间所有内存空间均填充为零。60.s3:为所要传递的消息内容申请空间。在消息队列发送函数中申请一个消息队列管理结构体queue_stru指针类型的消息变量ptaskmsg,并在s2定义的全局数组taskqarray中对这个指针进行内存申请。61.(1)对全局数组taskqarray进行遍历,查询第i个消息队列管理结构体queue_stru元素中结构状态strusta成员是否为未占用unoccupied。62.(2)如果为未占用unoccupied,则该数组元素(标号置为i)中的结构状态strusta标记为occupied,遍历结束,并将该数组元素的地址赋值回给消息变量ptaskmsg。跳转到s463.(3)如果为占用occupied,则直接查询数组的i 1个元素。直到为未占用unoccupied为止。如果查到遍历到数组的最后一个元素,仍然为占用occupied,则将空指针null返回给消息变量ptaskmsg,并提示系统错误。64.s4:在s3中成功申请到消息变量ptaskmsg指针后,对消息变量ptaskmsg指针所指元素进行赋值。65.(1)对消息类型queuetype进行赋值,消息类型queuetype表示此次传输消息的所使用的物理总线类型,如系统内部使用内部总线标识为inner_bus,发送到外部can总线标识为can_bus,发送到外部串口使用标识com_bus。66.(2)对消息特征码chacode进行赋值,表示此次发送数据类型,如导航数据data_nav,电台数据data_radio等。67.(3)对长度信息sizeinfo进行赋值。该值表示用户传递的数据长度len,根据该长度对内存空间有效数据进行确定。68.(4)对数据指针pdata进行赋值,数据指针pdata指向所要发送数据的内存,使用动态内存申请方法malloc()申请长度len的空间,申请到的空间首地址赋值到pdata;将用户数据通过内存拷贝memcpy()方法拷贝到pdata指针所指的空间。69.s5:将消息变量ptaskmsg指针通过操作系统消息队列发送线程sndthd发送出去,并释放消息变量ptaskmsg的内存。70.(1)调用vxworks操作系统底层消息队列发送函数,将消息变量ptaskmsg指针转化成无类型指针void*发送出去。判断消息队列发送函数返回值是否为成功。71.(2)成功后对ptaskmsg所占用的空间进行释放。释放函数的形参为消息队列管理结构体queue_stru类型指针,释放函数中首先判断消息变量ptaskmsg指针是否为空指针,指针若为空则直接返回,不为空则判断消息变量ptaskmsg所指结构的成员变量消息类型queuetype是否为占用occupied,对occupied的标记改写为未占用unoccupied,此时消息变量ptaskmsg指针成功释放。72.(3)消息队列将数据发送出去后,在任务调度过程中,接收线程recvthd等待接收消息。73.s6:将消息的发送线程sndthd和接收线程recvthd进行关联,并在接收线程recvthd中获取收到的消息变量ptaskmsg指针。创建消息队列处理任务,发送消息队列和接收消息队列使用消息队列句柄os_event指针进行关联,将接收到的消息变量ptaskmsg指针存入消息队列管理结构体queue_stru类型指针pstmsg,根据收到的消息和消息处理表,对消息进行处理。处理方法转到s7。74.s7:解析消息变量ptaskmsg所指向的内容,根据消息处理表的特征码映射到对应函数进行解析处理。75.(1)申请一个消息处理表结构table_stru,结构的内容包括消息类型queuetype、特征码chacode、无符号指针型函数指针pfunc,①消息类型queuetype表示此次传输消息的物理类型。②特征码chacode赋值表示此次发送数据类型。③函数指针pfunc表示处理方法的函数指针。76.(2)由用户定义一个消息处理表msgproctab,消息处理表msgproctab为数组形式,每个元素为消息处理表结构table_stru,处理表的内容由使用者填充。如消息类型queuetype可以为:系统内部标识为inner_bus。发送到外部can总线标识为can_bus。发送到外部串口标识为com_bus。特征码chacode为:如导航数据data_nav,电台数据data_radio等。77.(3)消息处理函数的形参包括接收到的消息队列管理结构体指针、消息处理表msgproctab的地址、以及消息处理表msgproctab中的元素个数tabsize,元素个数=数组a所占的空间/数组a中第一个元素所占的空间,其中a为消息处理表的数组名。78.(4)消息处理表处理方法为从第一个元素开始判断消息处理表msgproctab中和消息队列收到的消息pstmsg中消息类型queuetype以及特征码chacode是否一致,同时对应的处理函数指针不为null。如果匹配成功,则根据函数指针所指的函数实体进行处理。79.按照本发明方法进行vxworks操作系统封装后,任务中消息队列传输数据,可以不受任务本身堆栈大小的限制,可以传递满足系统堆长度的任何变长数据,同时任务间数据传输只需提供数据的首地址以及内存的长度,提高了系统层调用的便利性。80.本发明提供一种终端设备,包括:存储器,用于存储至少一个处理器所执行的指令;处理器,用于执行存储器中存储的指令实现如图1所示方法的步骤。81.本发明提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当计算机指令在计算机上运行时,使得计算机执行如图1所示方法的步骤。82.本发明未详细说明部分属本领域技术人员公知常识。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献