回复
     梅科尔工作室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秒钟的频率打印,受发消息的时间限制



扩展实验



©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
  标签 
   
        赞
        
 
        收藏 
      
 回复
  相关推荐
 



















