简述如何使用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显示效果

Lattice正朝着网络边缘领域进军
MAX15003三输出buck控制器
这是一个iPhone8和三星S8都无法解决的问题,你别奢望了!
英伟达CTO谈DPU:这是我们的重中之重
立讯精密入选“2021中国数字经济产业示范样本50”
简述如何使用Harmony的动态驱动和状态机来编写程序
美军无人机文件流出 路由器是罪魁祸首
云计算、大数据与AI之间的相互关系
Qorvo即将推出真正广泛电源管理产品系列 为客户提供高效服务
纳新勇进,“辰”风破浪丨南京纳特通信电子有限公司2024新春年会圆满落幕
射频、微波天线技术探讨
物联网开发之个性化的网关设计分析
2020年中国锂电池总出货量158.5GWh,电池占新能源汽车成本40-50%
Microchip专家技术文章:热电偶信号调理
三星s8配色抢先曝光,超大屏占比,今晚发售!
人工智能潜力爆发,重庆发力AI技术创新
几个优秀的开源C语言开源项目
iphone常见硬件故障之-不充电
联发科携新芯片低价入局 国产智能机雪上加霜
CES大展观察:激光显示唱主角,显示界的“变形金刚”引外媒点赞