一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

簡述如何使用Harmony的動態(tài)驅(qū)動和狀態(tài)機來編寫程序

算法&編程學(xué)院 ? 來源:網(wǎng)絡(luò)整理 ? 2018-02-01 03:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

上一篇中介紹了UART的收發(fā)數(shù)據(jù)操作,那些操作都是基于外設(shè)庫的,而不是采用Harmony的動態(tài)驅(qū)動,也沒有采用狀態(tài)機的機制。本篇就來介紹一下如何使用Harmony的動態(tài)驅(qū)動和狀態(tài)機來編寫程序。其實狀態(tài)機是挺簡單的,就是事先定義好可能發(fā)生的哪些狀態(tài),然后主循環(huán)里根據(jù)不同的狀態(tài)進行不同的處理,這個在項目中也是比較常用的方法。

注意Dynamic的驅(qū)動對象都需要有一個Open動作來創(chuàng)建一個Handle,后續(xù)所有操作都是用Handle來代表這個驅(qū)動對象。所有動態(tài)驅(qū)動的中斷都是采用注冊回調(diào)函數(shù)的方式來使用,無需到system_init中添加,也無需自己清除中斷標識,驅(qū)動已經(jīng)自己完成了。

另外要注意的一點是,串口接收一個字節(jié)后進入了中斷,如果不使用Read接收一下,那么后續(xù)就再也無法進入中斷,就會出現(xiàn)僅中斷一次的現(xiàn)象,因此,也不要在中斷中進行耗時操作,避免沒有及時接收數(shù)據(jù),導(dǎo)致數(shù)據(jù)殘缺不全。

先在app.h文件中定義狀態(tài)機和UART要使用的相關(guān)變量結(jié)構(gòu)體,使用結(jié)構(gòu)體也是滿方便的。

1

在app.c中編寫應(yīng)用程序,包含頭文件之后,初始化函數(shù)編寫,這里的初始化不是底層的初始化,而是初始化UART的相關(guān)變量,并創(chuàng)建句柄。第一步要initial(open一個客戶端),然后判斷創(chuàng)建的客戶端時候有效,有效的話,就創(chuàng)建中斷回調(diào)函數(shù),中斷程序的內(nèi)容直接在回調(diào)函數(shù)里編寫就可以了。

2

編寫中斷回調(diào)函數(shù)內(nèi)容程序,收到一個數(shù)據(jù)后存儲到數(shù)據(jù)緩沖區(qū),并置位接收完成標志位

3

發(fā)送數(shù)據(jù)的函數(shù),發(fā)送采用查詢方式

4

編寫Uart_Task()函數(shù),狀態(tài)里就在這里處理,初始化狀態(tài)時進行初始化,然后進入接收數(shù)據(jù)狀態(tài),接收到數(shù)據(jù)后回發(fā),并在OLED上顯示接收到的字節(jié)數(shù)。

5

在APP_Tasks()中循環(huán)調(diào)用Uart_Task(),以處理接收到的數(shù)據(jù)。

6

編譯,下載程序到開發(fā)板,打開串口軟件測試

7

OLED顯示效果

092736phxohksn4x4kxd44

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 狀態(tài)機
    +關(guān)注

    關(guān)注

    2

    文章

    493

    瀏覽量

    28252
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    為什么PIC32的Harmony編寫沒有交互的狀態(tài)機?

    重新定義,但是基于和聲方法,這些狀態(tài)機也基于中斷在不同的文件中從一個狀態(tài)移動到另一個狀態(tài)。這個應(yīng)用程序運行良好,但我詢問您的意見,如果這種方法是正確的或可以改進的,或者如果您有任何SU
    發(fā)表于 08-12 08:36

    什么是有限狀態(tài)機

    在嵌入式,機器人領(lǐng)域,由于多的復(fù)雜邏輯狀態(tài),我們編寫程序的時候不得不考慮很多種情況,容易造成功能間的沖突。有限狀態(tài)機(finite-state machine),簡稱狀態(tài)機,是一種表示
    發(fā)表于 12-20 06:51

    狀態(tài)機原理在控制程序設(shè)計中的應(yīng)用

    計算機控制系統(tǒng)的控制程序具有有限狀態(tài)自動機的特征 可以用有限狀態(tài)機理論描述。利用狀態(tài)轉(zhuǎn)移圖和條件編碼可以更直觀和清晰地描述
    發(fā)表于 03-22 15:30 ?1次下載

    VFP9.0編寫程序

    數(shù)據(jù)庫編寫程序,VFP9.0編寫程序,中文版利用數(shù)據(jù)庫知識編寫可以運行程序
    發(fā)表于 06-21 16:42 ?1次下載

    狀態(tài)機VHDL程序

    狀態(tài)機VHDL程序,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 11-11 15:51 ?5次下載

    簡述使用QII狀態(tài)機向?qū)绾蝿?chuàng)建一個狀態(tài)機

    如何使用QII狀態(tài)機向?qū)?chuàng)建一個狀態(tài)機
    的頭像 發(fā)表于 06-20 00:11 ?4573次閱讀
    <b class='flag-5'>簡述</b>使用QII<b class='flag-5'>狀態(tài)機</b>向?qū)绾蝿?chuàng)建一個<b class='flag-5'>狀態(tài)機</b>

    狀態(tài)機如何簡化PLC程序編寫

    在PLC程序編寫過程中,可以使用狀態(tài)機的控制思路,將一些復(fù)雜的控制過程使用狀態(tài)機的方法處理。這里簡單給大家介紹一下什么是狀態(tài)機?如下圖所示
    的頭像 發(fā)表于 09-10 14:44 ?4663次閱讀
    <b class='flag-5'>狀態(tài)機</b>如何簡化PLC<b class='flag-5'>程序</b>的<b class='flag-5'>編寫</b>

    FPGA:狀態(tài)機簡述

    本文目錄 前言 狀態(tài)機簡介 狀態(tài)機分類 Mealy 型狀態(tài)機 Moore 型狀態(tài)機 狀態(tài)機描述 一段式
    的頭像 發(fā)表于 11-05 17:58 ?8059次閱讀
    FPGA:<b class='flag-5'>狀態(tài)機</b><b class='flag-5'>簡述</b>

    基于事件驅(qū)動的有限狀態(tài)機介紹

    ? 一、介紹 EFSM(event finite state machine,事件驅(qū)動型有限狀態(tài)機),是一個基于事件驅(qū)動的有限狀態(tài)機,主要應(yīng)用于嵌入式設(shè)備的軟件系統(tǒng)中。 EFSM的設(shè)計
    的頭像 發(fā)表于 11-16 15:29 ?2595次閱讀

    狀態(tài)模式(狀態(tài)機)

    share,作者:亞索老哥)),原來狀態(tài)機還可以這么簡單地玩~~亞索老哥提出的狀態(tài)機六步法(1)、定義狀態(tài)接口(2)、定義系統(tǒng)當前狀態(tài)指針(3)、定義具體
    發(fā)表于 12-16 16:53 ?9次下載
    <b class='flag-5'>狀態(tài)</b>模式(<b class='flag-5'>狀態(tài)機</b>)

    基于事件驅(qū)動的有限狀態(tài)機介紹

    EFSM(event finite state machine,事件驅(qū)動型有限狀態(tài)機),是一個基于事件驅(qū)動的有限狀態(tài)機,主要應(yīng)用于嵌入式設(shè)備的軟件系統(tǒng)中。
    的頭像 發(fā)表于 02-11 10:17 ?1312次閱讀

    自動生成程序狀態(tài)機代碼狀態(tài)機建模方法

    首先運行fsme命令啟動狀態(tài)機編輯器,然后單擊工具欄上的“New”按鈕創(chuàng)建一個新的狀態(tài)機。FSME中用于構(gòu)建狀態(tài)機的基本元素一共有五種:
    的頭像 發(fā)表于 09-13 16:50 ?1669次閱讀
    自動生成<b class='flag-5'>程序</b><b class='flag-5'>狀態(tài)機</b>代碼<b class='flag-5'>狀態(tài)機</b>建模方法

    如何使用FSME定制狀態(tài)機

    定制狀態(tài)機 目前得到的狀態(tài)機已經(jīng)能夠響應(yīng)來自外部的各種事件,并適當?shù)卣{(diào)整自己當前所處的狀態(tài),也就是說已經(jīng)實現(xiàn)了狀態(tài)機引擎的功能,接下來要做的就是根據(jù)應(yīng)用的具體需求
    的頭像 發(fā)表于 09-13 16:57 ?1871次閱讀
    如何使用FSME<b class='flag-5'>來</b>定制<b class='flag-5'>狀態(tài)機</b>

    虛擬linux怎么編寫程序

    在虛擬Linux上編寫程序是一項非常常見且有用的任務(wù)。無論是開發(fā)一個簡單的腳本、一個Web應(yīng)用程序還是一個復(fù)雜的軟件項目,Linux提供了強大的工具和環(huán)境幫助你進行編程。本文將詳細
    的頭像 發(fā)表于 11-17 10:08 ?2401次閱讀

    怎樣在codeblocks上編寫程序

    在CodeBlocks上編寫程序是一項相對簡單而又重要的任務(wù)。CodeBlocks是一個廣泛使用的集成開發(fā)環(huán)境(IDE),它能夠幫助程序編寫、編譯和運行他們的代碼。在本篇文章中,我們將詳細介紹
    的頭像 發(fā)表于 11-26 09:26 ?2193次閱讀