鸿蒙设备开发C语言,《鸿蒙开发板外设控制》直播图文版(2020.10.28)

直播主题:

58bb3781b7f1878f9ad24735ce6f660a.png

直播实验设备 Hi3861核心板 + 交通灯外设板 + 底板,如下图:

15e1c954936ad4da69f71c206295cf24.png

00809a798f289985ba937793d1d99528.png

1. Hello World(如果不想迈出第一步时就踩坑,请严格遵守步骤)

0bba76d770b248bf130005144a229dee.png

解说:

1) 对于初学者来说,SYS_RUN(HelloWorld);  可理解为一个“注册语句”,将 HelloWorld() 注册为一个板载应用程序的入口函数,即,我们所写的应用程序中第一个被调用的函数。

2) BUILD.gn 编译脚本是应用程序被编译的关键,必须仔细编写和修改

07ce0e63d3f069d857f03268570911f6.png

这里值得大家思考问题如下:

1) 为什么任务入口函数不是 C 语言中的 main() ?(反思:C 语言中的入口函数必须是 main() 吗?)

2) SYS_RUN(HelloWorld);  这行语句是什么?(函数调用?函数调用语句能位于全局作用域中?)

fc7034e32eb33ad0b9812c369e99d54d.png

b0e2dec4428932b426cd33f8a294988b.png

解说:

在鸿蒙设备开发中,应用程序入口函数并不等价于传统 C 语言中的 main() 函数,不能随意的 while(1); 或者做一些耗时的操作,必须快速的返回,否则会妨碍其它应用程序的运行;因此,在入口函数中创建专用的任务(线程)是一种“标准”操作。

e47b8ef92f3d7d8727253f291ab6a952.png

2. 点灯操作(外设控制的经典操作模式)

2d2dda5d9e4ae946a6207ea100ab6192.png

c1efd9909aff45be799c70984d70c362.png

解说:

1)GPIO (General Purpose Input/Output) 是核心板对外设的物理接口(可理解为计算机上的 USB 口,用于插入设备,扩展功能)

2)操作 GPIO 几乎贯穿整个外设控制的全部,所以,搞清楚外设所接入的 GPIO 引脚成为了关键

3.  按键编程(外设板上的物理按钮可看作一种 GPIO 设备)

6bdd250d2d2710c30d9f25663b766c5f.png

411e930b353695039e4235fc0365e272.png解说:

1. 按键编程中需要设置回调函数,并且回调函数是在中断上下文中被调用,因此,回调函数不能做耗时操作(中断编程基本原则)

2. 如果回调函数需要改变某个全局变量,那么,对应的全局变量需要使用 volatile 关键字修饰(详见《C语言进阶剖析教程》)

5. 蜂鸣器控制

1733d2618b13f594cf3a710c3dc08e13.png

a8b803304f43ea50f66e697b2a4b4c66.png

解说:

1) PwmInit(), PwmStart(), PwmStop() 都属于“耗时”操作,因此不能在中断回调函数中调用,必须放到任务执行函数中调用

2) 中断回调函数可理解为 Linux 中的中断上半部(快速执行并返回),任务执行函数为中断下半部(执行具体的数据处理操作)

预告:

按键编程时每次只能注册执行一个回调函数,即:要么下降沿触发回调,要么上升沿触发回调;因此,要捕捉按键“按下事件”和按键”释放事件"就需要另外想办法了,下一篇帖子会讨论这个方法,大家多多关注哦。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值