回复
梅科尔工作室OpenHarmony设备开发培训笔记-第三章学习笔记 原创
梅科尔陈新杰
发布于 2022-8-8 17:07
浏览
0收藏
@toc
任务管理
简介和相关介绍
任务的调度机制
任务管理的实现
接口详讲
osThreadNew(osThreadFunc_t func,voidargument,const osThreadAttr_tattr
osThreadFunc_t func:任务函数名
voidargument:指针
const osThreadAttr_tattr:参数列表,包含任务函数名,任务栈大小,任务优先级这些参数
返回值:任务的ID,根据ID可实现对任务的挂起,恢复,删除
代码介绍
- 运行该部分代码,进入串口,显示先执行一次任务,再执行两次任务二
优先级:attr.priority = ,数字越大,优先级越高 - 修改代码展示优先级
定义两个变量
分别在任务一和任务二中作如下修改
修改任务创建函数
注意打开文件,将SAMGR_Bootstrap();注释掉
然后修改任务创建函数的启动函数为SYS_RUN(Thread_example);
编译、烧录、点击复位按钮
打开串口工具
最后任务删除
如何查看:在删除任务之后打印hello,会发现串口当中不会打印,说明任务已被删除
软件定时器
基本概念
运作机制
软件定时器的创建
代码讲解
运行现有代码
扩展实验
将定时器1改为单词定时器
运行结果:1为单词定时器,停止之后两秒钟再执行停止程序,所以显示failed;
成功方法,将延时缩短至50U,保证停止程序在时钟1运行过程当中执行
信号量开发
基本概念
运作机制
实现功能
代码介绍
整体代码
基础实验
在任务一中申请两次,可以看到每秒钟2、3同时获取信号量
在任务1中申请一次,则可以看到任务2、3交替打印(另一个任务则被阻塞)
原理:释放一次信号量,计数值+1;获取一次信号量,计数值-1
扩展实验
如何去使用信号量的删除接口
任务2获取成功后执行,删除,则之后的获取信号量的操作都以失败告终
事件任务管理开发
基本概念
运作机制
功能实现
代码运行
每次打印一个事件id
任务阻塞
只发送了一个任务,且逻辑关系为“且”(osFlagsWaitAll)。需要三个任务同时执行才能停止阻塞
解决办法
同时发送三个任务
将逻辑关系改为“或”(osFlagsWaitAny)
互斥锁
基本概念
运作机制
功能实现
代码实现
高中低优先级产生互斥
删除互斥锁
执行两次删除
消息队列
基本概念
运作机制
功能实现
代码实现
消息的发送和接收
1秒钟的频率打印,受发消息的时间限制
扩展实验
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
赞
收藏
回复
相关推荐