【大厂内参】第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的开发者,及物联网端侧软件开发工程师和物联网架构设计师。


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


大厂内参

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


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

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

【第三期】云服务器:

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

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

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

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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