简述如何使用Harmony的动态驱动和状态机来编写程序

描述

上一篇中介绍了UART的收发数据操作,那些操作都是基于外设库的,而不是采用Harmony的动态驱动,也没有采用状态机的机制。本篇就来介绍一下如何使用Harmony的动态驱动和状态机来编写程序。其实状态机是挺简单的,就是事先定义好可能发生的哪些状态,然后主循环里根据不同的状态进行不同的处理,这个在项目中也是比较常用的方法。

注意Dynamic的驱动对象都需要有一个Open动作来创建一个Handle,后续所有操作都是用Handle来代表这个驱动对象。所有动态驱动的中断都是采用注册回调函数的方式来使用,无需到system_init中添加,也无需自己清除中断标识,驱动已经自己完成了。

另外要注意的一点是,串口接收一个字节后进入了中断,如果不使用Read接收一下,那么后续就再也无法进入中断,就会出现仅中断一次的现象,因此,也不要在中断中进行耗时操作,避免没有及时接收数据,导致数据残缺不全。

先在app.h文件中定义状态机和UART要使用的相关变量结构体,使用结构体也是满方便的。

状态机

在app.c中编写应用程序,包含头文件之后,初始化函数编写,这里的初始化不是底层的初始化,而是初始化UART的相关变量,并创建句柄。第一步要initial(open一个客户端),然后判断创建的客户端时候有效,有效的话,就创建中断回调函数,中断程序的内容直接在回调函数里编写就可以了。

状态机

编写中断回调函数内容程序,收到一个数据后存储到数据缓冲区,并置位接收完成标志位

状态机

发送数据的函数,发送采用查询方式

状态机

编写Uart_Task()函数,状态里就在这里处理,初始化状态时进行初始化,然后进入接收数据状态,接收到数据后回发,并在OLED上显示接收到的字节数。

状态机

在APP_Tasks()中循环调用Uart_Task(),以处理接收到的数据。

状态机

编译,下载程序到开发板,打开串口软件测试

状态机

OLED显示效果

状态机

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分