【大厂内参】第9期:掌握IoT开发,从操作系统LiteOS内核源码学习开始

华为云社区精选 发表于 2021/05/06 17:30:23 2021/05/06
【摘要】 为了更好地让大家了解和掌握LiteOS开发,我们通过介绍Huawei LiteOS的体系结构,详细解读LiteOS各模块开发及其实现原理。专题内容适用于Huawei LiteOS的开发者,及物联网端侧软件开发工程师和物联网架构设计师。


  Huawei LiteOS 是华为面向IoT领域开发的一个基于实时内核的轻量级操作系统。Huawei LiteOS主要包括硬件Hardware、硬件抽象层、基础内核和内核增强等组成部分。
  现有基础内核包括不可裁剪的极小内核和可裁剪的其他模块。极小内核包含任务管理、内存管理、异常管理、系统时钟和中断管理。可裁剪模块包括信号量、互斥锁、队列管理、事件管理、软件定时器等。
  Huawei LiteOS自开源社区发布以来,围绕NB-IoT物联网市场从技术、生态、解决方案、商用支持等多维度使能合作伙伴,构建开源的物联网生态,为开发者提供 “一站式” 完整软件平台,有效降低了开发门槛、缩短开发周期。
  为了更好地让大家了解和掌握LiteOS开发,我们通过介绍Huawei LiteOS的体系结构,详细解读LiteOS各模块开发及其实现原理。专题内容适用于Huawei LiteOS的开发者,及物联网端侧软件开发工程师和物联网架构设计师。


数据结构应用之最:双向循环链表Doubly Linked List

在学习Huawei LiteOS源代码的时候,常常会遇到一些数据结构的使用。如果没有掌握这它们的用法,阅读LiteOS源代码的时候会很费解、很吃力。本文为大家介绍LiteOS源码中应用最多的数据结构——双向循环链表Doubly Linked List。

Priority Queue:让接口更灵活支持任务优先调度

本文为大家介绍LiteOS源码中经常使用的数据结构——Priority Queue优先级队列。优先级队列是个双向循环链表数组,提供更加方便的接口支持任务基于优先级进行调度。

时间到期、超时…排序链表SortLinkList助你轻松处理

SortLinkList是LiteOS另外一个比较重要的数据结构,它在LOS_DL_LIST双向链表结构体的基础上,增加了RollNum滚动数,用于涉及时间到期、超时的业务场景。

Percpu:记录着每一个CPU信息内容

LiteOS提供一个结构体Percpu来记录每一个CPU的相关信息,包含任务排序链表,定时器排序刘安邦,锁任务调度标记、请求调度标记等。

一文了解SpinLock自旋锁及LockDep死锁检测特性

本文为大家带来LiteOS 5.0引入的LockDep死锁检测特性。

中断Hwi:提高系统实时性及执行效率的秘密武器

介绍中断的概念,带领大家一起剖析LiteOS中断模块的源代码。

踩准时钟节拍,LiteOS内核时间管理有妙招

LiteOS的时间管理模块为任务调度提供必要的时钟节拍,会向应用程序提供所有和时间有关的服务,如时间转换、统计、延迟功能。

解析LiteOS内核位操作的四个常用API

位操作是指对二进制数的bit位进行操作。程序可以设置某一变量为状态字,状态字中的每一bit位(标志位)可以具有自定义的含义。

保存局部变量、寄存器、函数参数…任务栈有一套

LiteOS任务栈是高地址向低地址生长的递减栈,栈指针指向即将入栈的元素位置。

任务LOS_Task:小身板,大责任

Huawei LiteOS的任务模块可以给用户提供多个任务,实现任务间的切换,帮助用户管理业务程序流程。本文带来任务模块的结构体,任务初始化的源代码及操作指导内容。

从结构体到常用操作的源代码,带你掌握任务LOS_Task(1)

Huawei LiteOS的任务模块可以给用户提供多个任务,实现任务间的切换,帮助用户管理业务程序流程。本文带来任务模块的任务常用操作的源代码及操作指导内容。

从结构体到常用操作的源代码,带你掌握任务LOS_Task(2)

Huawei LiteOS的任务模块可以给用户提供多个任务,实现任务间的切换,帮助用户管理业务程序流程。本文带来任务模块的任务常用操作的源代码及操作指导内容。

调度Schedule:任务处理、资源使用的指挥官

Schedule也称为Dispatch,是操作系统的一个重要模块,它负责选择系统要处理的下一个任务。调度模块需要协调处于就绪状态的任务对资源的竞争,按优先级策略从就绪队列中获取高优先级的任务,给予资源使用权。

互斥锁Mutex:处理临界资源独占的“法官”

互斥锁是一种特殊的二值性信号量,用于实现对临界资源的独占式处理,还可以解决信号量存在的优先级翻转问题。

信号量Semaphore:任务间“互斥访问”通信机制

信号量(Semaphore)是一种实现任务间通信的机制,可以实现任务间同步或共享资源的互斥访问。一个信号量的数据结构中,通常有一个计数值,用于对有效资源数的计数,表示剩下的可被使用的共享资源数。

事件Event:带你体验一对多、多对多任务同步

事件(Event)是一种任务间通信的机制,可用于任务间的同步。多任务环境下,任务之间往往需要同步操作,一个等待即是一个同步。事件可以提供一对多、多对多的同步操作。

消息队列Queue:帮你把任务间的消息读写安排的明明白白

队列(Queue)是一种常用于任务间通信的数据结构。任务能够从队列里面读取消息,也能够往队列里写入消息。消息队列提供了异步处理机制,同时还有缓冲消息的作用。

软件定时器Swtmr:不受数量限制,满足用户一切定时需求

软件定时器(Software Timer)是基于系统Tick时钟中断且由软件来模拟的定时器。LiteOS提供了软件定时器功能可以提供更多的定时器,满足用户需求。

LiteOS内存管理要想效率高,静态内存Static Memory必不可少

LiteOS的内存管理分为静态内存管理和动态内存管理,静态内存实质上是一个静态数组,静态内存池内的块大小在初始化时设定,初始化后块大小不可变更。静态内存池由一个控制块和若干相同大小的内存块构成。

从四大结构体,带你掌握LiteOS动态内存Bestfit算法(1)

本文为大家剖析LiteOS动态内存模块bestfit算法的源代码,包含动态内存的结构体、动态内存池初始化、动态内存申请、释放等。

从四大结构体,带你掌握LiteOS动态内存Bestfit算法(2)

本文为大家剖析LiteOS动态内存模块bestfit算法的源代码,包含动态内存的结构体、动态内存池初始化、动态内存申请、释放等。

bestfit_little算法:降低内存碎片产生的可能性,让内存得以完美利用

bestfit_little算法是在最佳适配算法的基础上加入slab机制形成的算法。最佳适配算法使得每次分配内存时,都会选择内存池中最小最适合的内存块进行分配,而slab机制可以用于分配固定大小的内存块,从而减小产生内存碎片的可能性。

本合集为《大厂内参》009期,欢迎大家持续关注。


大厂内参

根据开发者普遍关注的热门技术领域,汇编实践精华内容。从业务场景选型,应用案例分析,到前瞻趋势预测。以专题的形式,深度解读华为云核心技术,分享一线工程师的实战经验。


【第一期】敏捷&Devops:80+篇实践干货分享,深度解读敏捷&DevOps如何革新软件开发

【第二期】数据库:从数据库科普到核心技术解读、上云案例分享,全方位剖析云数据库

【第三期】云服务器:选型解读+案例分享:云服务器“软硬技术”全公开

【第四期】人工智能:海量实战经验教你零门槛进场AI开发,无成本负担玩转AI应用

【第五期】云原生:读懂云原生2.0,看它如何重塑业务开发架构

【第六期】云安全:Get防范云安全的必杀技,学会构建云上完整安全体系

【第七期】物联网:“端边云”IoT全栈技术大揭秘,开发实战指南带你轻松上手IoT

【第八期】数据仓库:8大场景系列玩转数仓运维,做个不秃头的DBA

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。