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

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

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

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

算法&編程學(xué)院 ? 來源:網(wǎng)絡(luò)整理 ? 2018-02-01 03:33 ? 次閱讀

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

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

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

先在app.h文件中定義狀態(tài)機(jī)和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ū),并置位接收完成標(biāo)志位

3

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

4

編寫Uart_Task()函數(shù),狀態(tài)里就在這里處理,初始化狀態(tài)時進(jìn)行初始化,然后進(jìn)入接收數(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)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 狀態(tài)機(jī)
    +關(guān)注

    關(guān)注

    2

    文章

    491

    瀏覽量

    27456
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

    VFP9.0編寫程序

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

    狀態(tài)機(jī)VHDL程序

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    虛擬機(jī)linux怎么編寫程序

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

    怎樣在codeblocks上編寫程序

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