鸿蒙设备开发----内核开发

wx62cedf3b681ab
发布于 2022-7-22 18:54
浏览
0收藏

一、任务管理

简介

鸿蒙设备开发----内核开发-鸿蒙开发者社区

名词解释

鸿蒙设备开发----内核开发-鸿蒙开发者社区
鸿蒙设备开发----内核开发-鸿蒙开发者社区

调度机制(优先级高的先运行)

鸿蒙设备开发----内核开发-鸿蒙开发者社区

如何实现任务管理

相关API链接网址:++https://arm-software.github.io/CMSIS_5/RTOS2/html/index.html++

举例介绍:

实现任务的管理实际,在适当的情况下运行所需要的任务,这就得依赖任务调度机制。
实现任务管理中需要用到cmsis_os2的API任务接口
接口名 功能
osThreadNew 创建任务
osThreadTerminate 删除任务
osThreadSuspend 任务挂起
osThreadResume 任务恢复
以任务创建的参数进行介绍:
osThreadNew(osThreadFunc_t func, void * argument, const osThreadAttr_t * attr)
func:任务函数
argument:作为启动参数传递给任务函数的指针
attr:任务入口函数的参数列表,此处就传递给osThreadNew()任务接口。
任务创建函数的返回值即为任务ID。

二、使用定时器定时

定时器介绍

鸿蒙设备开发----内核开发-鸿蒙开发者社区

运行机制(先进先出)

鸿蒙设备开发----内核开发-鸿蒙开发者社区

接口介绍

鸿蒙设备开发----内核开发-鸿蒙开发者社区

实现定时功能主要代码:

初始化及配置
鸿蒙设备开发----内核开发-鸿蒙开发者社区
鸿蒙设备开发----内核开发-鸿蒙开发者社区
在main函数中定时
鸿蒙设备开发----内核开发-鸿蒙开发者社区

三、信号量

概念

鸿蒙设备开发----内核开发-鸿蒙开发者社区

运作原理

鸿蒙设备开发----内核开发-鸿蒙开发者社区
鸿蒙设备开发----内核开发-鸿蒙开发者社区

接口介绍

鸿蒙设备开发----内核开发-鸿蒙开发者社区

信号量申请模式:

非阻塞模式、永久阻塞模式、定时阻塞模式,用 timeout 参数的值选择

非阻塞模式(0):

任务需要申请信号量,若当前信号量的任务数没有到信号量设定的上限,则申请成功。否则,立即返回申请失败

永久阻塞模式(cn_osal_timeout_forever或0xFFFFFFFF):

任务需要申请信号量,若当前信号量的任务数没有到信号量设定的上限,则申请成功。否则,该任务进入阻塞态,系统切换到就绪任务中优先级最高者继续执行。任务进入阻塞态后,直到有其他任务释放该信号量,阻塞任务才会重新得以执行

定时阻塞模式(任意定时值,32bit):

任务需要申请信号量,若当前信号量的任务数没有到信号量设定的上限,则申请成功。否则,该任务进入阻塞态,系统切换到就绪任务中优先级最高者继续执行。任务进入阻塞态后,指定时间超时前有其他任务释放该信号量,或者用户指定时间超时后,阻塞任务才会重新得以执行
由于中断不能被阻塞,因此在申请信号量时,阻塞模式不能在中断中使用。

四、互斥锁

概念

鸿蒙设备开发----内核开发-鸿蒙开发者社区

运作机制

鸿蒙设备开发----内核开发-鸿蒙开发者社区

接口介绍:

鸿蒙设备开发----内核开发-鸿蒙开发者社区

书写代码时注意:

需要配置 CONFIGUSERDEMO 宏定义
鸿蒙设备开发----内核开发-鸿蒙开发者社区

五、消息队列

概念

鸿蒙设备开发----内核开发-鸿蒙开发者社区

运作原理

鸿蒙设备开发----内核开发-鸿蒙开发者社区

接口介绍

鸿蒙设备开发----内核开发-鸿蒙开发者社区

注意:

1.函数osMessageQueueNew创建并初始化一个消息队列对象。该函数返回消息队列对象标识符,如果出现错误则返回NULL,可以在RTOS启动(调用 osKernelStart)之前安全地调用该函数,也可以在内核初始化 (调用 osKernelInitialize)之前调用该函数,但是不能在中断服务调用该函数
2.函数osMessageQueuePut将msg_ptr指向的消息放入参数mq_id指定的消息队列中。如果参数timeout设置为0,可以从中断服务例程调用

分类
收藏
回复
举报
回复
    相关推荐