毕设选题:基于Lite OS的多协议环境检测与控制系统
开学一个月了,毕设就完成了开题报告,并没有着手进行开发,同时研究生复试还没通知。那就先准备毕设吧!因为之前学着做过一个智慧农业的实践,并没有代码编写,跟着跑了一遍的样子。现在回头复习。
硬件上我选用的小熊派的开发套件,E53系列的扩展板还有一系列的通信模组。主要参考资料来源有:小熊派开发板资料、华为Lite OS论坛及Lite OS开发资料、微信公众号Lite OS物联网操作系统。
先照着公众号的入门基础回顾一下
1、开发环境配置,
主要有4个开发环境可以用于开发配置,适用于arm系列中STM32等的Keil5(需破解、导入适合小熊派开发的STM32L431RCT硬件库、配置和生成C代码生成的图形化工具STM32CubeMX(包含所有STM32系列芯片,但需安装Java环境JRE)、华为自家的Lite OS Studio(IOT Studio)、微软集成开发的VIsual Studio Code(不是Visual Studio)
2、物联网操作系统
运行在终端上,对终端进行控制和管理,并提供统一接口的操作系统软件。或者说,满足物联网需求的服务软件平台
3、下面引入正题华为Lite OS:华为面向物联网领域开发的一个基于实时内核的轻量级操作系统。
主要介绍五大内核模块
a、任务管理
任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间等系统资源,并独立于其它任务运行。
Huawei LiteOS是一个支持多任务的操作系统,一个任务就表示一个线程,任务之间可以进行切换和通信。LiteOS的任务管理模块提供任务创建、删除、延时、挂起和恢复、更改任务优先级、锁定任务调度和解锁任务调度、根据任务控制块查询任务 ID、根据 ID 查询任务控制块信息等功能。
LiteOS内核是抢占式调度内核,所以高优先级的任务可以打断低优先级任务,低优先级任务必须在高优先级任务阻塞或结束后才能得到调度,同优先级任务会进行时间片轮转调度。优先级表示任务执行的优先顺序,决定了在发生任务切换时即将要执行的任务。LiteOS中的任务一共有32个优先级 (0-31),最高优先级为 0,最低优先级为31。
每一个任务都含有一个任务控制块(TCB)。TCB 包含了任务上下文栈指针(stack pointer)、任务状态(包括就绪、运行、阻塞、退出4种状态)、任务栈大小(任务栈里保存着局部变量、寄存器、函数参数、函数返回地址等)、任务优先级、任务ID、任务名等信息。TCB相当于每个任务在内核中的身份证,可以反映出每个任务运行情况。
在任务模块初始化时,系统会先申请TCB需要的内存空间。如果任务初始化成功,则系统对TCB内容进行初始化。用户创建任务时,系统会将任务栈进行初始化,预置上下文。此外,系统还会将“任务入口函数”地址放在相应位置。这样在任务第一次启动进入运行态时,将会执行“任务入口函数”。
信号量(Semaphore)是一种实现任务间通信的机制,可以用于任务之间同步或临界资源的互斥访问。
信号量可以被任务获取或者申请,不同的信号量通过信号量索引号来唯一确定,每个信号量都有一个计数值和任务队列。通常信号量的计数值表示有效的资源数,即剩下的可被占用的互斥资源数。当任务申请(Pend)信号量时,如果申请成功,则信号量的计数值递减,如申请失败,则挂起在该信号量的等待任务队列上,一旦有任务释放该信号量,则等待任务队列中的任务被唤醒开始执行。
互斥锁(mutex)又称互斥型信号量,是一种特殊的二值信号量,用于实现对共享资源的独占式处理。互斥锁主要使用在多任务环境下,此时往往存在多个任务竞争同一共享资源的应用场景。另外,Huawei LiteOS通过优先级继承算法,解决了信号量存在的优先级翻转问题。
任意时刻互斥锁只有两种状态:开锁或闭锁。当有任务持有时,互斥锁处于闭锁状态,这个任务获得该互斥锁的所有权。当该任务释放它时,该互斥锁被开锁,任务失去该互斥锁的所有权。当一个任务持有互斥锁时,其他任务将不能再对该互斥锁进行开锁或持有,所以其他任务此时访问这个公共资源将会被阻塞,直到互斥锁被持有该锁的任务释放后,其他任务才能重新访问该公共资源。