原创 河池学院msOS实验室暑假培训总结-方焕

2018-7-29 12:08 2845 26 5 分类: MCU/ 嵌入式 文集: 嵌入式微系统msOS成型记
    暑假培训msOS的时间虽然比较短,但就是这短短的一个多星期里使我对msOS(嵌入式微系统)有了更深一步的了解,不仅被深圳市雨滴科技有限公司创始人王绍伟先生的分层设计,各模块独立运作,实现高内敛低耦合的思想所折服。与此同时,更被王总不畏艰难并勇于实现自己的梦想——用代码方式总结嵌入式行业这么多年的发展成果并找到一套比较简单易用的嵌入式软件架构帮助自己即公司嵌入式人员完成产品设计,同时推广自己研究出来的研究成果并使整个公司的代码得到有统一性,可以便于长期可维护和交流,从需求入手建立自己想要的软件系统(嵌入式微系统(msOS))。
王总的经历以及成就让我更加坚信彭老师所说的一句话:做一件事能坚持,静得下心来研究,大学4年后终将会有回报!
我去年寒假第一次接触到嵌入式微系统(msOS),当时渴望了解这个嵌入式微系统的框架以及其是如何帮助嵌入式人员完成所需项目的要求的,但由于那个时候C语言学得还不太扎实,而且从未接触过代码量如此大(29304行)的系统,我很多代码都看不懂,虽然问了学长们之后我懂得了我所问的小项目是如何实现的。但是我觉得我这只是知道完成这个小项目的方法而已,换成了另外一个项目我就不一定做得出来了。所以我对王总的这个嵌入式微系统(msOS)的框架以及其是如何帮助嵌入式研究人员完成他们的项目的,还是一脸迷惑。因为我看王总的嵌入式微系统(msOS)里面的代码存在很多地方仍然看不懂。于是,我就静下心来从新把强化C语言的学习,而且因为彭老师建议我们在暑假即将到来的时候要自学完数据结构。可能正是因为我对知识的渴望和不屈服于困难吧,在学校只要有空就往实验里跑,一步一步脚踏实地地学。我有不懂的就问学长们,就是这样暑假很快就来了,当我再次接触到嵌入式微系统(msOS)的时候,大概是我的C语言基础比较扎实了还有也许也得益于我学习数据结构后锻炼的自己抽象的思维吧,当我再次面对msOS系统时给我的感觉已经不再是恐惧,而是一种渴望更深入了解地学习心态,可想而知我当时兴奋的心情,我就这样不知不觉地把学习当做一种享受,慢慢地进步着。
后来知道王总的嵌入式微系统(msOS)呈现在我们面前的不仅仅只是一个嵌入式微系统,而且所体现出来的更是一种思想——分层设计,各模块独立运作,实现高内敛低耦合的思想。其实这种思想在生活中我们或许在做一系列事情时偶尔也会出现过这样类似的想法,但是却很少人愿意像王总那样将这种将这种思想运用在真实的生活中,王总从需求入手建立自己想要的软件系统(嵌入式微系统(msOS)),这个嵌入式微系统不仅仅使得公司员工的工作效率提高了,而且简单易用,便于交流和长期维护。王总正是避免了以往开发人员往往随意设计,无规划,此外因为低端嵌入式系统需求多样,没有一家专门的公司或机构为其设计一套通用的软件架构,大家各自为政,甚至到了一个公司几个嵌入式人员,各自编写的代码完全不同,新来的嵌入式人员往往无法读懂前人代码而推翻前人成果重做设计,大家都在不停地重复很多无用功,而这一切,都因为没有一个软件架构标准。王总一直被这种无序的现状困扰着,于是他基于这样的现状,基于这样的需求,他在克服一系列困难后,历时4年多,终于一个面向嵌入式工业控制的嵌入式微系统就这样正式诞生了。在我阅读了王邵伟、郑德智、吴玉勇所著的《嵌入式微系统》后,给我最大的感触就是:我们有了想法,而不应只是止步于现有的想法,而应该脚踏实地地把这种想法实现。虽然有的时候现实的难度远远大于想法,而且在实现想法的过程中,不见得总是一帆风顺,但正因为这样我们做一件事——无论是学习还是工作,都应该持之以恒,只有这样我们在将来才能谱写人生绚丽的华章。就像一首歌的歌词——没有不可以,永远不放弃!
下面来就让我总结一下这短暂而又充实的暑假msOS的培训的培训吧!
2018年7月16日,这天由何英杰、谢浩永学长给我们讲解msOS的开发环境的搭配msOS硬件的介绍以及msOS系统框架介绍。主要给我们讲解msOS系统是在什么样的环境下运行的,它的运行需要什么。在这堂课里,我们初步了解了如何安装驱动(Setup_JLink_V490(驱动).exe)的和如何使用msOS代码阅读器来阅读msOS系统的代码的,以及介绍了如何安装SYM32相关资源库。有了msOS代码阅读器来阅读msOS系统的代码后觉得,真的方便了很多。对变量的定义,函数的声明等等一目了然,避免了我们在Keil_5中跳读代码给学习者带来的不必要的麻烦。大大提高了初学者学习掌握msOS系统的效率,同时也方便嵌入式人员利用msOS代码阅读器来阅读msOS系统的代码的同时修改所需的部分代码从而完成自己所需完成的项目。第一天的培训结束了,我对msOS系统的框架有了更深一步的了解。首先嵌入式微系统(msOS)的整个系统分为App 和 System 两个层,分别存放在两个目录中。①App 是应用层,存放具体项目的需求,System 是系统层,提供各种应用接口,支撑应用层运行。System 下一般包含三部分:Device、 OS 及 GUI,也可以扩展其它的中间件,比如 Modbus、 PID 等。②Device是设备层,为 OS、 GUI 及 App 提供底层设备接口,它包含了 ST 提供的硬件驱动标准库。OS 为 uC/OS-II 的精简版本,支持 8个任务,去掉了很多动态连接的链表而以数组代替,代码精简明了,非常易懂。Gui 是为 App 层提供 Menu 设计的标准设计库,目前硬件支持 128*64 点阵黑白字库屏,控件支持页面背景字体(BackText)、表(Chart)、标签(Label)及文本(TextBox)。这天的学习任务虽然看起来简单,但是这关系到后期的学习,所以笔记还是做得满满的。                                 
2018年7月17日 ,这天由蓝常玉、杨春明学长给我们讲解msOS界面显示及其原理以及控件的原理 ,并且简要介绍进程界面以及包括控件解析原理。在这一天的课程里,我一直有一个疑问,到底什么是界面,msOS所实现的界面在哪里?就因为我对所谓的界面没有一个清晰的概念,所以我一直在想这个问题。后来我才知道他们所说的界面其实是涉及界面设计的问题,简单一点的就是我们在12864液晶屏上看到的显示效果。我们在12864上看到的效果就是一个页面。其实一个界面由多张页面组成。还有菜单界面,就 PC 机编程来说,大部分项目的主要工作量都是在菜单界面上, 甚至可以说微软的Windows 从命名上讲,就叫视窗,也就是菜单界面的意思。菜单界面:是用于显示数据及输入数据操作。专业的说法就是:界面设计属于人机接口的一部分,通常我们用 MMI 来描述,MMI 是 Man Machine Interface(人机界面) 的缩写,有些也叫 HMI, Man 换成 Human。完整的人机界面包括按键、鼠标、触摸与界面显示部分。一般除了指示状态之外,往往都是根据按键消息显示不同的菜单,执行不同的消息处理,MCU51 下消息处理往往比较简单。所以 MS 中按键处理程序基本上就等价于界面设计了。状态机界面设计往往采用 switch case 来实现,从按键处理这个共同的入口进,根据一个或多个菜单状态变量选择入口,再根据按键值进行相应的消息处理,退出时根据按键值或者消息处理的结果决定是否要改变状态变量。改变状态变量等价于切换菜单界面,这种利用状态字来实现界面设计方式就叫菜单状态机设计思想。当我弄懂了这个概念后,开始设计属于自己的一个界面了,并让它显示在12864液晶屏上。就这样,通过界面设计我做出了自己想要的界面效果。我当时还有一个疑问,什么是控件呢?难道就是我自己理解的控制元件吗?但是后来我了解什么是控件之后,自己都苦笑不得。其实所谓的控件就是:指对数据和方法的封装。控件可以有自己的属性和方法,其中属性是控件数据的简单访问者,方法则是控件的一些简单而可见的功能、控件创建过程包括设计、开发、调试工作,然后是控件的使用。设计控件是一项繁重的工作。自行开发控件与使用控件进行可视化程序开发存在着极大的不同,要求程序员精通面向对象程序设计。创建控件的最大意义在于封装重复的工作,其次是可以扩充现有控件的功能。在理解这些概念之后就要创建界面了。App 结构体由数据和界面组成, 一个界面由多张页面组成,界面和页面的定义放在一起。界面结构体中,除了四个控件外,还有一个就是页面焦点,这是在多个页面下,用于选择当前显示的是那张页面,这个页面焦点非常重要,切换页面,只要把所要显示的页面指针赋值给页面焦点即可,解析程序就是基于页面焦点解析页面的。一个界面由多个页面组成,一个页面由多个控件组成,同类控件采用单向链表串起来。一个控件由多个属性组成。因为同一时间只能显示一个页面,所以必须要有焦点页面来选择显示那个页面,因为同一时间只能按键操作一个文本控件,所以有焦点文本控件来选择操作那个文本控件。有了这些概念后,就可以创建界面。创建整个界面分为三步: 1、创建界面、页面和控件, 2、页面加载各种控件, 3、初始化控件属性,页面的文本焦点及界面的页面焦点。我们创建界面,还不行还应该实现我们想要的效果,那么实现这一步的过程,在菜单界面中,叫做解析执行,把界面最终在 LCD 屏上按照创建的界面模型,显示出来。 解析界面代码在 gui.c 中, GUI 为图形用户界面的缩写。假如界面有三张页面,具体选择哪一张由业务逻辑决定,选中的页面叫焦点页面,而切换页面,也就是切换焦点页面,以下代码为工作、设置、维护三张页面循环经过解决这一天的学习过程中自己存在的疑问,感觉这一天自己收获满满的。
2018年7月18日,这天由黄继翔 、谢浩永学长给我们讲解GPIO口控制及消息机制及进程切换ADC、DO、DI、PWM、按键。在上课之前我特地复习了2017年寒假培训过得消息机制,我那是对这个概念真得很模糊。然而这次,我终于对消息机制这个概念有了更深一步的了解。消息机制是一种常用的信息传递机制,外设中断或者节拍例行处理往往是消息的来源,通过预处理压缩提取特征值后,按类型和值组合成消息规定的格式发送到消息队列中保存。大循环从消息队列中读取消息(一般采用先进先出原则读取),根据消息的类型找到相应的事件处理函数,对消息值进行处理。一般,我们把外设中断或者节拍例行处理产生消息这么一个事情,叫做“事件”,以PC机为例,按下一次鼠标,键盘,都是一个事件,这样子我们就可以理解为: 事件产生消息,大循环获取消息执行相应的处理, 所以消息机制也叫事件驱动编程机制。节拍例行处理中扫描到按键,先进行分析按键是否正确,之后抛出消息在大循环中执行界面程序。一般的讲,捕获一个事件必须要高速,而处理这个事件往往不需要很高的速度。可以这么说,消息机制是连接前后台架构三要素中断、节拍与大循环的纽带,它有效解决了各外部设备因为速度、时间、数据量等不同引起的处理及时性问题,协调了系统的运转。消息只能在大循环中接收,不能在中断或者节拍中接收。消息采用 16bit 数据形式,高 8 位为消息类型,低八位是消息值,两条宏定义用于读取 16bit 消息的消息类型与消息值的。发送消息需要把8bit消息类型和8bit消息值合并成16bit类型,再发送到消息队列中去。消息机制很清晰的把中断、节拍和大循环分工,通过消息连接起来,这样还有一个很大的好处是保证了中断、节拍不会去修改大循环中的变量,这样不会出现变量的临界态问题,提高了系统的稳定性说到消息队列。说到进程的切换,其实就是切换页面。我们在做页面切换之前一定要记得设置一个Updata 界面更新函数,因为为了判断是否有数据更新,需要引入一个跟虚拟屏一样的数组,这个数组叫图形屏,也就是页面解析后的内容先放在图形屏中,之后这个图形屏与虚拟屏做数据比对,有更新则把虚拟屏内容更新,再调用 LCD相关函数去更新显示 。说到消息队列,那么就要对队列有一个清晰的概念了,这涉及数据结构的知识,现在想起来才知道彭老师之前建议我们在暑假即将到来的时候提前学完数据结构的原因了。感觉这一天收获满满的!
2018年7月18日,这天由杨春明 、蓝常玉学长给我们讲解msOS系统存储原理、msOS系统节拍、msOS系统定时器、msOS系统串口通信。这节课应该是培训的这些天里面最难的一天了,涉及到的内容比较多。对于msOS系统串口通信原理:我还是比较熟悉的,因为串口是 MCU51 最常用的一种通讯方式,往往用于下载程序、追踪调试信息、扩展 HMI串口屏、 与 PC 等其它设备通讯。TXD 为发送, RXD 为接收。Keil 自带的软件仿真器提供了一个 Serial #1 的串口对话窗口,可以基于这个窗口可以输入输出串口信息。但是值得注意的是:Serial #1 显示也是 GB-2312 码,不过 Serial#1 对中文支持不好,新显示的是乱码,需要刷新一下才能正确显示。串口通讯一个 Byte 是以 bit 流的形式串行输出,一个字符串再以多个字符一个个的发送,所以速度比较慢,占用时间长, MCU51 的 RAM 不多,并且实际MCU51 项目功能比较单一, 所以采用了最常规的等待发送方式。在大的 RAM 系统中,可以采用先把数据打印到 RAM 中,之后利用串口发送中断或者是系统节拍一个个的发送走,这样不占用系统等待资源。对于msOS系统节拍:节拍一般需要由芯片内部系统时钟产生的中断实现, 并且把这个中断功能强化了,用于精准控制。节拍也是一种中断,往往是由定时器产生的固定时间间隔的中断,比如间隔 10mS 一次中断,利用这个节拍可以实现很多例行处理,比如按键扫描获取按键值, 多路数码管轮流显示刷新,传感器扫描检测等等。可以认为节拍是一个特殊的中断,相比其它中断一般不是固定时间间隔的,往往取决于这个中断设备,具有随机特性。在ARM 的 Cortex 系列处理器中,专门为节拍提供了一路专用的定时器,叫 Systick,与普通中断以示区别,考虑到它的特殊性,所以把节拍独立出来。一开始我对什么是系统节拍这个概念很模糊,也是看了相关资料之后才比较清楚它的概念的。msOS系统定时器:这个是因为软件定时器是基于节拍模拟出来的。软件定时器处理模式有两种,一种是直接在节拍例行函数中直接执行,因为在节拍中执行,也就是在中断中执行,所以执行的回调函数不能太长,否则占用中断时间。但有些确实需要占用较长时间的,则采用另外一种处理模式,那就是通过消息抛出回调函数的函数入口地址,再在大循环中执行。软件定时器由注册开始函数 TimerStart、系统节拍例行函数 TimerSystickRoutine 和停止
函数 TimerStop 组成。首先 TimerStart 函数需要把软件定时器的工作模式、延时时间、回调函数注册到相关的静态变量中,注册之后 TimerSystickRoutine 函数被系统节拍例行调用,每调用一次, 延时时间减一,当减到为零的时候,按存储的处理方式开始执行存储的回调函数,之后把这一路定时器清空。软件定时器的运行是基于系统节拍的,实现计时,所以必须要有一个节拍例行处理函数。软件定时器非常灵活,一定要分析透彻后用,若理解不够,反而引起不必要的问题。同时在基于理解的基础上,可以自己修改或增加能功函数,以满足自己需求。
虽然暑假关于msOS系统的培训已经结束,但是我觉得我对王总历时四年多写出来的嵌入式微系统知之甚少甚至连入门都谈不上;另外对他欲通过这个嵌入式微系统所呈现出来的分层设计,各模块独立运作,实现高内敛低耦合的思想的理解不够深刻,还需继续进一步学习。
时光荏苒,水月流逝。不知不觉大一生活已经离我而去,我深感大学时光的宝贵。所以就每天坚持8点前到实验室,除要上的课外,其他时间都泡在实验室,一直到晚上将近0点听到看楼的校卫关门的声音我才离开实验室。我记得郭天祥老师曾经说过:“如果一个人的模拟电路、数字电路和高频电子线路的基础不好,那么他可能设计不出什么好的电路,我们在做硬件实践的同时再来看书中的理论知识,这样的结合是最好的”。虽然《数字电路基础》我还没有学,但是我还是坚持看《模拟电子技术基础》。另外我深刻的认识到在开始学习单片机的时候,千万不要为了了解单片机内部结构而浪费大量时间,这样只能打击自己学习的信心,当你学会编程后自然而然地就一步步地掌握其内部结构了。培训的假期已经告一段落,但是我的学校日常生活变得很充实。虽然实验有的时候十分枯燥也很累,明知道进了实验室就意味着自己牺牲了几乎所有玩的时间,但是我没有后悔当初加入实验室的决定。因为我知道在3年以后即将毕业的我,可以自豪的说你看这就是我的大学生活,可能有的人认为我失去了很多东西,但我得到的是无价的,也许这样的人生经历可能有很多人惋惜,失去了很多玩的时光。然而这样的结果我想必然有很多人羡慕!为了彻底地改变自己,为了最求我的梦想,我充分地利用每一分每一秒,为了实现我的目标,我在愿意把所有可以用的时间都花在学习上,我感觉到的是充实,而不是枯燥无味。只要你不满足于现状,你就有出改变自己的愿望。你能下得了做一件事的决心,并且有坚持下去的毅力,只要你天天都在进步,不久的将来你会发现一个全新的你重新站在大家面前。珍惜现在拥有的,在接下来的大学3年里把所有可用的时间都用在实验室学习并积极锻炼身体!
最后我觉得没有不可以,永远不放弃!正如彭老师所说的:“做一件事能坚持,静得下心来研究,大学4年后终将会有回报!”


注:嵌入式微系统msOS是博主凤舞天花两年时间编写的一套简单易用,服务于中小企业的嵌入式通用开发平台,再用三年时间编写了书籍推广。其中河池学院彭建盛实验室是重点合作单位,前期博主去学校讲解,高年级的学生掌握后,利用寒暑假教低年级学生,本文是大二学生方焕的培训总结,学的很不错。

文章评论1条评论)

登录后参与讨论

用户3883018 2018-8-29 07:08

感谢博主分享
相关推荐阅读
凤舞天 2019-01-20 20:07
运放的压摆率与增益带宽积,到底是怎么个关系?
今天在ADI上寻找一颗高速运放,但是看了ADI的运放列表,把我弄闷了,到底是选择压摆率高的还是增益带宽积大的。如下图:LT6275是40M增益带宽积,但是压摆率却到2.2K,非常高,相反LT6203X...
凤舞天 2019-01-13 12:53
雨滴慧目图像识别项目的产品定义过程详解!
需求来源:      俊知焊齿机的合金刀头上料机构,采用基恩士的光纤激光识别,对于一些对称性比较强的合金刀头,容易误判,所以高端的焊齿机采用价格昂贵的图像识别系...
凤舞天 2019-01-01 19:50
半导体空穴到底怎么导电的?
我们熟悉的半导体材料,常用的是P、N类型的,硅(SI)中掺杂元素硼(B),因为B三价,相对于SI的4价来说,缺少一颗电子,把这个缺失的部分叫做空穴,这类掺杂B的叫P型材料。对应的,掺杂了元素磷(P),...
凤舞天 2018-12-22 22:13
孩子的教育不应该只是学习,更应该是去挑战
大家会发现,很多优秀的知识分子,自己水平很高,但是自己的孩子却教不好,很多老师的孩子,小学成绩很好,初中也不错,但是到了高中,大学之后,很多走向平庸,这个似乎违背我们的认知。现在自己有小孩了,也面临知...
凤舞天 2018-12-01 11:34
MOS管应用概述(四):基本参数
mos管的基本参数,大家熟悉的必然是Ids电流,Ron导通电阻,Vgs的阈值电压,Cgs、Cgd、Cds这几项,然而在高速应用中,开关速度这个指标比较重要。上图四项指标,第一项是导通延时时间,第二项是...
凤舞天 2018-12-01 10:36
努力之前请先学会思考
公司这么多年下来,有一些人一直很努力,也很听话,让他做什么就做什么,然而一直以来他们很少自己主动做事,挑头做事,往往都是打个下手,听命令行事,一天无忧无虑,看看手机上上网,乐呵呵的,估计睡觉很容易睡着...
我要评论
1
26
关闭 站长推荐上一条 /2 下一条