梅科尔工作室OpenHarmony设备开发培训笔记-第3章学习笔记 原创
快速入门之Hello World
-
**进程一:**添加hello world源码文件
1.新建my_app文件夹
在./applications/BearPi/BearPi-HM_ Nano/sample路径 下新建一个my_ app目录,用于存放业务源码文件。
2.新建hello_world.c文件
在./applications/BearP/BearPi-HM_ Nano/sample/my_ app路径下新建一个hello_ _world.c文件,该文件为业务源码文件。
3.新增BUILD.gn文件
在./applications/BearPi/BearPi-HM_ Nano/sample/my_ app路径下新建一个BUILD.gn文件, 该文件为业务源码编译脚本。
-
**进程二:**编写Hello World业务代码
打印与<stdio.h>有关,APP FEATURE INIT与“ohos_init.h”有关。
-
**进程三:**编写编译构建文件BUILD.gn
在/applications/BearPi/BearPi-HM/sample/my_ app 下的BUILD.gn文件中添加如下代码。
在/applications/BearPi/BearPi-HM/sample下的BUILD.gn
先屏蔽掉“B2_ basic button : button example ”
-
进程四:调试Hello World程序
进入MX,登录。直接输入hmp dist,编译失败。(原因:未进入文件)
进入bundle.json,继续编译hmp dist,编译成功。
-
**进程五:**使用开发板
电脑插上开发板,打开“电脑”-----“设备管理器”查看COM口,设置波特率921600,选择烧录文件(工程目录下out----BearPi-HM_Nano------选择Hi3861 wifliot app allinone.bin),勾选normal,点击connect,至此代码烧录完毕,led闪烁。
串口工具看现象
执行下图操作后,按开发板上复位按键即可。
HarmonyOS编译框架介绍
-
ninji编译工具简介
在Unix/Linux下通常使用Makefile来控制代码的编译,但是Makefile对于比较大的项目有时候会比较慢,Google的程序员在开发Chrome的时候因为受不了Makefile的速度,自己重新开发出来一套新的控制编译的工 具叫作Ninja, Ninja相对于Makefile这套Makefile具更注重于编译速度。除了Chrome现在还有一些其他的比较大的项目也在开始使用Ninja。
-
如何编译模块
用vs code访问服务器操作如下:
终端——新终端——输入用户名 登录名@地址——输入密码——进入源码目录——编译(hpm dist)
HarmonyOS CMSIS接口简介
什么是CMSIS-RTOS2接口?
CMSIS是Cortex微控制器软件接口标准(Cortex Microcontroller Software Interface Standard)是ARM和一些编译器厂家以及半导体厂家共同遵循的一套标准,是由ARM专门]针对Cortex-M系列提出的标准。在该标准的约定下,ARM和芯片厂商会提供- -些通用的API接口来访问Cortex内核以及一 些专用外设,以减少更换芯片以及开发工具等移植工作所带来的金钱以及时间上的消耗。CMSIS-RTOS2 (CMSIS-RTOS API Version 2)是Arm⑧Cortex⑧-M处理器的通用的RTOS接口。为需要RTOS功能的软件组件提供了标准化的API。DCMSIS-RTOS2是一个通用的API,它与底层的RTOS内核无关,写应用程序的程序员在用户代码中调用CMS] S-N,RTOS2 API函数,可以更方便地将应用程序从-个RTOS到另一个RTOS,使用CMSIS-RTOS2 API的中间件也可以避免很多不必要的移植工作。
鸿蒙与CMSIS-RTOS2接口联系
鸿蒙在CMSIS- RTOS2接口中封装了LiteOS- m的内核代码
最新CMSIS-RTOS2实现://kernel/liteos m/kal/cmsis/cmsis liteos2.c
上层应用或中间键要使用用内核的功能的话,我们通过调用CMSIS-RTOS API v2来实现对内核功能的调用。
如何使用CMSIS-RTOS2接口?
1、在业务代码中包含"cmsis_ os2.h“
2、通过调用"cmsis_ os2.h"中的API函数使用系统相关功能
HarmonyOS内核开发一任务管理(上)
1.任务管理简介
基本概念
1、从系统的角度看,任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间 等系统资源,并独立于其它任务运行。
2、LiteOS的任务模块可以给用户提供多个任务,实现了任务之间的切换和通信,帮助用户管理业务程序 流程。这样用户可以将更多的精力投入到业务功能的实现中。
3、LiteOS中的任务 是抢占式调度机制,高优先级的任务可打断低优先级任务,低优先级任务必须在高 优先级任务阻塞或结束后才能得到调度,同时支持时间片轮转调度方式。
4、LiteOS的任务默认有32个优先级(0-31),最高优先级为0,最低优先级为31。(具体有多少个,可以进 行配置)
2.任务相关概念
任务状态
任务状态通常分为以下四种:
就绪(Ready) :该任务在就绪列表中,只等待CPU。
运行(Running) :该任务正在执行。
阻塞(Blocked) :该任务不在就绪列表中。包含任务被挂起、任务被延时、任务正在等待信号量、读写队 列或者等待读写事件等。
退出态(Dead) :该任务运行结束,等待系统回收资源。
任务ID:在任务创建时通过参数返回给用户,作为任务的- -个非常重要的标识。
任务优先级:优先级表示任务执行的优先顺序。
任务入口函数:每个新任务得到调度后将执行的函数。
任务控制块TCB:每一个任务都含有一个任务控制块(TCB)。TCB包含了任务上下文栈指针(stack pointer)、 任务状态、任务优先级、任务ID、 任务名、任务栈大小等信息。TCB可以反映出每个任务运行情况。
任务栈:每- -个任务都拥有一一个独立的栈空间,我们称为任务栈。
任务上下文:任务在运行过程中使用到的-些资源,如寄存器等,我们称为任务上下文。LiteOS在任务挂起的时候会将本任务的任务上下文信息,保存在自己的任务栈里面,以便任务恢复后,从栈空间中恢复挂起时的上下文信息,从而继续执行被挂起时被打断的代码。
**任务切换:**任务切换包含获取就绪列表中最高优先级任务、切出任务上下文保存、切入任务上下文恢复等动作。
3.任务的调度机制
4.实现任务的管理
Attention:①先创建的任务先运行②改完代码要在MS编译(同快速入门Hello World进程四)