基于华为云的智慧路灯实现--小熊派学习笔记(1)
一,该功能实现的系统架构
从上至下,最上层为系统级应用层,在云服务平台上实现,比如 智慧家居、智慧交通、车联网等等。一般通过PC、手机、端设备与用户进行交互,实现配置、监控、管理等功能。
云平台现在有阿里云、腾讯云、华为云、亚马逊云等。
端设备通过 无线4G/5G/LoRa/NB-IOT/eLTE-IOT及有线的方式家庭网关企业网关与云平台连接。
端设备通过固定的协议,LWM2M、CoAP、MQTT(基于TCP,UDP的协议)与云平台通信,端设备一般用于采集目标数据,或者执行目标操作。一般有完整的软件机构层次,统一的应用层协议,方便与各大平台连接。
下图为基于liteos的端设备架构
最上层为系统应用组件,例如GUI框架,传感器框架,OTA差分升级。
应用层接口支持CMSIS,POSIX,通行协议栈(LwM2M,CoAP,MQTT)。
文件系统支持vfs,littlefs,spiffs。
内核增强主要包括C++支持,低功耗,调测。
基础内核实现系统基本功能,IPC通信,软件定时器,内存任务管理,异常管理,中断管理。
硬件抽象层
硬件内核支持 ARM-M,ARM-A,ARM-64,RISC-V。
二、LiteOS 使用介绍
支持LINUX下以及WINDOWS下的编译,配置项目工程使用了make menuconfig工具。
liteos启动流程图
内存管理支持两种方式,静态内存和动态内存的方式,支持内存的初始化,分配及释放。
软件定时器是基于系统Tick时钟中断且由软件来模拟的定时器。LiteOS支持创建、启动,停止,删除,获取TICK,配置等对软件定时器的操作。
Liteos支持对中断函数的创建、配置、删除。支持中断共享,中断嵌套,支持独立中断栈,支持中断优先级配置等。
Liteos支持异常接管,属于一种调测手段。
Liteos支持多任务,抢占式调度,时间片轮询。支持配置任务优先级设置。
任务状态示意图
为了配合任务机制的运行,Liteos还支持队列,信号量,互斥锁,自旋锁。
队列用于任务间数据交互的支持。
信号量用于任务事件发生在任务之间同步使用。
自旋锁、互斥锁通常用于对共用内存数据的保护。
详细Liteos的使用间接请参考华为Liteos开发文档。
liteos 应用入口在targets\…\Src\main.c的main函数中,在任务调度函数(LOS_Start)运行前,初始化应用任务(create_work_tasks)即可。
单次与循环任务写法
initParam.pfnTaskEntry = (TSK_ENTRY_FUNC)TestTask1;ret = LOS_TaskCreate(&g_taskLoId, &initParam); //在main函数中创建任务
UIN32 testTask1(VOID)
{
UCHAR i = 5;
Single Task(); //此处任务运行一次
while(1)
{
Cyclic Tasks(); //此处任务无限次数运行
}
while(i –)
{
Multiple Tasks(); //此处任务运行 i次
}
}
中断写法
ret = LOS_HwiCreate(_VECTOR,0,0(VOID(*)(uintptr_t)) osInterruptHandler,0);
STATIC VOID osInterruptHandler(VOID);
{
//中断服务处理函数
}