论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
移动端开发
›
鸿蒙
›
OpenHarmony学习笔记——多线程的创建
OpenHarmony学习笔记——多线程的创建
没腿的鸟
金牌会员
|
2022-6-24 04:17:49
|
显示全部楼层
|
阅读模式
楼主
主题
781
|
帖子
781
|
积分
2343
文章目录
前言
OpenHarmony多线程创建
多线程业务代码新建
对比FreeRTOS
KAL内核抽象
CMSIS简介
OpenHarmony移植到STM32
总结
前言
上一篇中,通过一个LED灯的闪烁来捋了下OpenHarmony的代码运行以及编译流程,此篇结合多任务的创建来浅浅分析一下OpenHarmony的系统框架及CMSIS-RTOS2接口。
OpenHarmony多线程创建
多线程业务代码新建
参考上一篇点亮LED灯的工程创建方式,首先需要新建一个多任务的“工程”。具体步骤如下:
1.在 applications/sample下新建一个A1_kernal_thread文件夹;
2.在A1_kernal_thread下新建 thread_example.c文件
3.在A1_kernal_thread下新建 BUILD.gn文件
然后分别编写多任务的业务代码以及配置,编译下载即可实现效果。
对比FreeRTOS
观察代码可以发现,这个多线程的创建与单片机中使用的FreeRTOS、RTX等操作系统有着异曲同工之处,任务创建的过程基本是一致的。
诶~~~,到这笔者有个疑问,鸿蒙使用的是LiteOS,而下面的代码中STM32是使用的FreeRTOS,按理来说是两种OS理应存在差异才对,而且二者的硬件底层架构也不同,STM32是ARM的架构,而hi3861貌似是RISC-V的架构(笔者在一篇文章上看见的,芯片手册上并没有说是啥架构)为什么从代码来看操作过程如此相似,难道是传说中的“套壳”?
Hi3861的模组功能示意:
STM32系统结构:
emmmm,在听了小熊派的讲解后,融合了一下元气派的讲解,笔者弄清楚了这个疑问,答案显然不是套壳。
KAL内核抽象
不知道大家还有映像没,在笔者第一篇鸿蒙介绍中,提到过一嘴KAL这个内核抽象层,鸿蒙是有多内核组成的,可能会有多个内核同时具有实现一个类似功能的能力,但是接口函数会存在差异,为了能够将接口进行统一鸿蒙在内核层进行了抽象,把线程管理、内存管理、文件系统、网络管理和外设管理的接口函数进行了统一。
如上图中KAL模块就有一个CMSIS的接口规范,说到CMSIS大家应该都有印象,在学习STM32新建工程的时候就一定会涉及到这个CMSIS的,那么CMSIS到底是什么呢,两个OS的任务创建如此相像又与他有何关系呢?继续扒一扒。
CMSIS简介
这里借用原子的描述:
经常有人问到 STM32 和 ARM 以及 ARM7是什么关系这样的问题,其实 ARM 是一个做芯片标准的公司,它负责的是芯片内核的架构设计,而 TI,ST 这样的公司,他们并不做标准,他们是芯片公司,他们是根据 ARM 公司提供的
芯片内核标准设计自己的芯片。所以,任何一个做 Cortex-M3 芯片,他们的内核结构都是一样的,不同的是他们的存储器容量,片上外设,IO 以及其他模块的区别。所以你会发现,不同公司设计的 Cortex-M3 芯片他们的端口数量,串口数量,控制方法这些都是有区别的,这些资源他们可以根据自己的需求理念来设计。同一家公司设计的多种 Cortex-m3 内核芯片的片上外设也会有很大的区别。下图就是各个厂商基于 Cortex-m内核的微处理器产品。
正是因为这么多的厂商,这么多种类的微处理器,如果没有统一的标准来定义接口,大家都按照自己的意愿去编写代码,这将严重影响位处理器的生态;为了使大家都有一个统一的标准,CMSIS诞生了。
有关CMSIS的详细介绍参考此文,写的很通透——
CMSIS到底是个什么东西
。
笔者的理解:CMSIS定义了统一的接口函数,这样使得用户在编写应用程序代码时可以不用去管底层,可以直接调用标准接口即可实现相应功能。
而在CMSIS的标准中,又分了几个成员,
CMSIS-DSP,这个是数字信号处理器的接口定义,M4才有。
CMSIS-RTOS,是一个通用的API,它与底层的RTOS内核无关,写应用程序的程序员在用户代码中调用CMSISRTOS2 API函数,可以更方便地将应用程序从一个RTOS到另一个RTOS,使用CMSIS-RTOS2 API的中间件也可以
避免很多不必要的移植工作。
CMSIS-SVD。
CMSIS-DAP:通用的调试接口。
而OpenHarmony也是使用了CMSIS-RTOS2来统一接口,这也就是为什么两个OS如此相似的原因。
聊聊CMSIS-RTOS是什么东东
。
更多有关CMSIS-RTOS2的介绍大家可以去ARM官网查看。
OpenHarmony移植到STM32
看到这,之前的疑问解决了,另外一个想法油然而生,既然OpenHarmony支持CMSIS的接口,只是不是意味着,可以反向操作,将OpenHarmony移植到我们常用的STM32、GD32或者其他架构的芯片呢,答案是必然的,刚好昨晚看了连志安老师移植到STM32F407的教程,笔者还没实操,等后面有时间一定会加以尝试。把链接共享给大家,想要操作的可以试试水——
openharmony移植示例
。
总结
正是由于OpenHarmony使用了CMSIS-RTOS2的统一标准接口,这就使得我们在使用Hi3861进行多线程开发的时候可以借用FreeRTOS的开发经验,这可以大大降低我们使用Hi3861开发的难度。有关OpenHarmony的CMSIS-RTOS2接口简介及多线程就记录到此,文中如有错误之处欢迎大佬批评指出。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
没腿的鸟
金牌会员
这个人很懒什么都没写!
楼主热帖
【ollama】Linux下更改ollama模型下载 ...
CVE-2022-23131 Zabbix SAML SSO认证绕 ...
ManageEngine ServiceDesk Plus之CVE漏 ...
Doris(七) -- 修改表、动态和临时分区 ...
Redis事务
iOS全埋点解决方案-采集崩溃 ...
java代码审计-XSS
【密码管理器】上海道宁为您提供存储和 ...
北斗授时产品(GPS北斗授时设备)加NTP ...
【必知必会的MySQL知识】④DCL语言 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表