鸿蒙设备开发----内核开发
一、任务管理
简介
名词解释
调度机制(优先级高的先运行)
如何实现任务管理
相关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,可以从中断服务例程调用