梅科尔工作室OpenHarmony设备开发培训笔记-第3章学习笔记 原创
华为设备开发第三章笔记
第三章:内核开发
3.1任务管理
任务管理简介:
任务状态相关的概念
任务状态迁移(必须去了解)
任务接口简介
创建任务接口详情
Func:任务函数,argument:作为启动参数传递给任务函数的指针,attr:任务入口函数的参数列表,返回值:任务id。
3.2软件定时器
软件定时器,是基于系统Tick时钟中断且有软件来模拟的定时器,当经过设定的Tick时钟计数值后,会触发用户的回调函数。定时精度与系统Tick的时钟有关。
软件定时器为了解决硬件定时器的受限制问题而开发的。LiteOS提供软件定时器。
以下是软件定时器的运作机制
下一步通过操作来实现软件计时器
首先修改一下build.gn进行如下修改
其次在此文件中
取消一个注释如下 ,之后在mobaXterm中输入hpm dist进行编译,再用hiburn进行烧录,操作与之前的一样。
之后会对定时器相关的函数进行修改以达到其他的功能,
在Time_example中将原有的代码进行修改,如下
,
之后进行编译在进行烧录,之后如果出问题的话,将延时代码osdelay时间改变位50,在进行编一个烧录即可成功
总结:单次定时器想停止定时器需要在定时器运行期间,删除定时器是可以在任意时间。
3.3信号量
信号量基本概念:
运作原理:
(6)信号量允许多个任务在同一时刻访问同一资源
之后进行实际操作
在vscode中打开
下图红色的文件。
之后对此文件的代码进行编译和烧录,
之后会注释一部分来进行代码的改变和现象的改变
之后重复上面的编译和烧录操作
3.4事件管理
事件基本概念:
任务的与和或是一个重要的机制,通常来说,一个事件对应多个任务的话,先让或的先来,而与的是一种两个或者多个事件显现的时候才会触发。
实际操作:
在build.gn中将一些取消注释另一个进行注释
之后进行常规的编译和烧录,观察程序是否正常运行
,正常之后对代码进行修改
之后在进行常规的代码的编译和烧录
发现事件有阻塞,在对代码进行如下修改
再进行烧录和编译不过和上述的不太一样需要在vscode中编译,如果把all改成any一个事件也可以调度任务。
3.5互斥锁
,下面是互斥锁的基本概念
互斥锁的运作原理
仍然打开此文件夹
之后对这里面的代码编译和烧录,之后可以进行一些相关的修改来删除此互斥锁,相关操作如下
修改好后进行编译和烧录,重复之前的操作。
3.6消息队列
消息队列基本概念
消息队列运作原理
编译前需要先修改一下代码
之后进行相关的烧录,观察现象。
在修改一下相关的代码,如下 ,之后在进行编译和烧录检验修改的操作是否成功