0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

算法&编程学院 来源:网络整理 2018-02-01 03:33 次阅读

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

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

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

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

1

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

2

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

3

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

4

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

5

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

6

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

7

OLED显示效果

092736phxohksn4x4kxd44

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

    关注

    2

    文章

    490

    浏览量

    27447
收藏 人收藏

    评论

    相关推荐

    为什么PIC32的Harmony编写没有交互的状态机

    重新定义,但是基于和声方法,这些状态机也基于中断在不同的文件中从一个状态移动到另一个状态。这个应用程序运行良好,但我询问您的意见,如果这种方法是正确的或可以改进的,或者如果您有任何SU
    发表于 08-12 08:36

    什么是有限状态机

    在嵌入式,机器人领域,由于多的复杂逻辑状态,我们编写程序的时候不得不考虑很多种情况,容易造成功能间的冲突。有限状态机(finite-state machine),简称状态机,是一种表示
    发表于 12-20 06:51

    状态机原理在控制程序设计中的应用

    计算机控制系统的控制程序具有有限状态自动机的特征 可以用有限状态机理论描述。利用状态转移图和条件编码可以更直观和清晰地描述
    发表于 03-22 15:30 1次下载

    VFP9.0编写程序

    数据库编写程序,VFP9.0编写程序,中文版利用数据库知识编写可以运行程序
    发表于 06-21 16:42 0次下载

    状态机VHDL程序

    状态机VHDL程序,感兴趣的小伙伴们可以瞧一瞧。
    发表于 11-11 15:51 5次下载

    简述使用QII状态机向导如何创建一个状态机

    如何使用QII状态机向导创建一个状态机
    的头像 发表于 06-20 00:11 4174次阅读
    <b class='flag-5'>简述</b>使用QII<b class='flag-5'>状态机</b>向导如何创建一个<b class='flag-5'>状态机</b>

    状态机如何简化PLC程序编写

    在PLC程序编写过程中,可以使用状态机的控制思路,将一些复杂的控制过程使用状态机的方法处理。这里简单给大家介绍一下什么是状态机?如下图所示
    的头像 发表于 09-10 14:44 3831次阅读
    <b class='flag-5'>状态机</b>如何简化PLC<b class='flag-5'>程序</b>的<b class='flag-5'>编写</b>

    FPGA:状态机简述

    本文目录 前言 状态机简介 状态机分类 Mealy 型状态机 Moore 型状态机 状态机描述 一段式
    的头像 发表于 11-05 17:58 7231次阅读
    FPGA:<b class='flag-5'>状态机</b><b class='flag-5'>简述</b>

    基于事件驱动的有限状态机介绍

      一、介绍 EFSM(event finite state machine,事件驱动型有限状态机),是一个基于事件驱动的有限状态机,主要应用于嵌入式设备的软件系统中。 EFSM的设计
    的头像 发表于 11-16 15:29 2285次阅读

    状态模式(状态机)

    share,作者:亚索老哥)),原来状态机还可以这么简单地玩~~亚索老哥提出的状态机六步法(1)、定义状态接口(2)、定义系统当前状态指针(3)、定义具体
    发表于 12-16 16:53 8次下载
    <b class='flag-5'>状态</b>模式(<b class='flag-5'>状态机</b>)

    基于事件驱动的有限状态机介绍

    EFSM(event finite state machine,事件驱动型有限状态机),是一个基于事件驱动的有限状态机,主要应用于嵌入式设备的软件系统中。
    的头像 发表于 02-11 10:17 1006次阅读

    自动生成程序状态机代码状态机建模方法

    首先运行fsme命令启动状态机编辑器,然后单击工具栏上的“New”按钮创建一个新的状态机。FSME中用于构建状态机的基本元素一共有五种:
    的头像 发表于 09-13 16:50 1045次阅读
    自动生成<b class='flag-5'>程序</b><b class='flag-5'>状态机</b>代码<b class='flag-5'>状态机</b>建模方法

    如何使用FSME定制状态机

    定制状态机 目前得到的状态机已经能够响应来自外部的各种事件,并适当地调整自己当前所处的状态,也就是说已经实现了状态机引擎的功能,接下来要做的就是根据应用的具体需求
    的头像 发表于 09-13 16:57 1374次阅读
    如何使用FSME<b class='flag-5'>来</b>定制<b class='flag-5'>状态机</b>

    虚拟linux怎么编写程序

    在虚拟Linux上编写程序是一项非常常见且有用的任务。无论是开发一个简单的脚本、一个Web应用程序还是一个复杂的软件项目,Linux提供了强大的工具和环境帮助你进行编程。本文将详细
    的头像 发表于 11-17 10:08 1589次阅读

    怎样在codeblocks上编写程序

    在CodeBlocks上编写程序是一项相对简单而又重要的任务。CodeBlocks是一个广泛使用的集成开发环境(IDE),它能够帮助程序编写、编译和运行他们的代码。在本篇文章中,我们将详细介绍
    的头像 发表于 11-26 09:26 1425次阅读