日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 公眾號精選 > 技術(shù)讓夢想更偉大
[導(dǎo)讀]關(guān)注、星標(biāo)公眾號,直達(dá)精彩內(nèi)容來源:技術(shù)讓夢想更偉大作者:ming_mei前言前些日子在微信上看到李肖遙的公眾號,里面系統(tǒng)講述了QP框架,我很有感觸。我用QP框架很多年了,一開始是使用QM和QPC,到后來拋棄了QM,直接使用QPC裸寫程序,到后來自己寫狀態(tài)機框架??梢赃@么說,QP...



作者:ming_mei


前言

前些日子在微信上看到李肖遙的公眾號,里面系統(tǒng)講述了QP框架,我很有感觸。我用QP框架很多年了,一開始是使用QM和QPC ,到后來拋棄了QM,直接使用QPC裸寫程序,到后來自己寫狀態(tài)機框架。


可以這么說,QP框架引導(dǎo)了我的技術(shù)成長。我共享的博文,雖然都以QP為起點進行展開,但很多東西,都是QP官網(wǎng)的資料所沒有的。我希望接受大家的意見、建議和批評,相信對我來說,會有更大的提升。


這一系列的博文,稱為《當(dāng)單片機遇上狀態(tài)機》系列,暫時先規(guī)劃以下幾篇:


  • 入門QP
讓大家開始使用QP,消除對QP的畏難心理,建立起初步的信心。這一步非常重要。


  • 從switch-case到框架的進化
大家很難理解,自己用switch-case實現(xiàn)狀態(tài)機,用的好好的,干嘛要用狀態(tài)機框架。這篇博文,就是為了說明,switch-case狀態(tài)機,是如何一步一步進化到一個狀態(tài)機框架的。我們所寫的這個狀態(tài)機框架,和QP之間,到底有著什么關(guān)系,有著多少差距。


  • QP的高階使用和QM的使用
QM作為一個輔助工具?它的作用是什么?它是怎么生成代碼的?它和QP之間是什么關(guān)系?在這一篇里,將會做詳細(xì)介紹。


  • QP的哲學(xué)
精通QP,理解其哲學(xué)思想非常重要。它的哲學(xué)思想是什么樣的?是如何體現(xiàn)的?


  • 其他
后續(xù)的規(guī)劃,我希望根據(jù)大家的反饋意見而定。我用狀態(tài)機框架多年,難免做不到換位思考,不能照顧到初學(xué)者的感受。希望大家踴躍反饋意見。無論是贊揚還是批評,我都虛心接受。


入門QP

我們學(xué)習(xí)一個語言,或者一項技術(shù),第一件要做的事情,就是實現(xiàn)一個類似于Hello world的最小程序。在單片機上,當(dāng)然就是LED燈的閃爍。不說廢話了,先上代碼。


代碼結(jié)構(gòu)

代碼結(jié)構(gòu),可以在Keil工程中看到,是一個QP的運行最小系統(tǒng)。QP版本使用的是最新的V6.9.3版本。


為了便于大家的學(xué)習(xí),我拋棄了官方例程。官方例程有些繁瑣,里面還有大量的doxygen格式的注釋,對初學(xué)者不友好。與官方例程相比,能刪掉的部分,全部都刪掉了,只留下代碼和必要中文注釋,目的就是為了最大限度降低大家學(xué)習(xí)QP的入門門檻,也算是中國特色吧。這四個源碼,代碼未來我們程序架構(gòu)的不同層次,以后所有的例程,就是以這個代碼結(jié)構(gòu)為基礎(chǔ),進行擴充。


還有一個需要說明的,第一個例程,我并沒有使用QM建模工具進行LED狀態(tài)機的建模和代碼生成。QM工具,本質(zhì)上基于模型的開發(fā)方法,是形式化開發(fā)方法之一。在軟件開發(fā)中,這種方法一直飽受爭議。這個世界現(xiàn)存的大部分軟件框架,是不存在所謂代碼生成工具的。目前我對QM等建模工具持保守態(tài)度,軟件開發(fā)還是要回歸代碼本身,能利用工具,但不要依賴工具。QM工具,我認(rèn)為是QP框架在營銷和商業(yè)上的需求推動的。因此,在未來的教程中,我將QM的使用,放在次要位置,主要還直接編程為主,我認(rèn)為這樣才會給大家?guī)碚嬲奶嵘?


這四個源碼分別是:


  • main.c 包含了硬件的初始化、QP框架的初始化、各狀態(tài)機模塊(暫定稱呼,嚴(yán)謹(jǐn)應(yīng)叫AO模塊)的構(gòu)建,框架的啟動等一系列流程。


  • bsp.c 硬件初始化,此處僅包含SysTick的初始化和SysTick中斷函數(shù)。


  • ao_led.c LED狀態(tài)機的源碼。


  • hook.c QP框架的回調(diào)函數(shù)的實現(xiàn),此處都為空函數(shù),暫時不予實現(xiàn)。


  • evt_def.h 事件的定義。QP框架的事件定義,使用枚舉實現(xiàn)。個人覺得,事件的定義,如果用字符串實現(xiàn),更加有利于模塊的解耦和對分布式的支持(這個問題可參考后續(xù)的博客《將軟總線進行到底》)。QP使用枚舉來定義事件,個人認(rèn)為是為了降低RAM和CPU的開銷。


  • 其他


    • QP源碼
    • QP接口代碼
    • QP框架對硬件平臺或者RTOS的接口源碼。
    • MCU相關(guān)代碼,包含Startup文件、CMSIS相關(guān)、固件庫相關(guān)代碼

QP的啟動流程

以下代碼就是QP框架的啟動過程。


#include "qpc.h"                                        // qpc框架頭文件
#include "evt_def.h"                                    // 事件定義頭文件
#include "bsp.h"                                        // 硬件初始化
#include "ao_led.h"                                     // LED狀態(tài)機

Q_DEFINE_THIS_MODULE("Main")        // 定義當(dāng)前的模塊名稱,此名稱在QS和斷言中會使用。

ao_led_t led;                                           // 狀態(tài)機LED對象

int main(void)
{
static QSubscrList sub_sto[MAX_PUB_SIG];            // 定義訂閱緩沖區(qū)
static QF_MPOOL_EL(m_evt_t) sml_pool_sto[128];      // 定義事件池

QF_init();                                          // 狀態(tài)機框架初始化
QF_psInit(sub_sto, Q_DIM(sub_sto));                 // 發(fā)布-訂閱緩沖區(qū)的初始化
QF_poolInit(sml_pool_sto,                           // 事件池的初始化
sizeof(sml_pool_sto),
sizeof(sml_pool_sto[0]));

ao_led_ctor(
本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

串口作為單片機開發(fā)的一個常用的外設(shè),應(yīng)用范圍非常廣。大部分時候,串口需要接收處理的數(shù)據(jù)長度是不定的。那么怎么才能判斷一幀數(shù)據(jù)是否結(jié)束呢,今天就以STM32單片機為例,介紹幾種接收不定長數(shù)據(jù)的方法。

關(guān)鍵字: 單片機 串口 STM32

單片機誕生于1971年,經(jīng)歷了SCM、MCU、SoC三大階段。單片機由以前的1位、4位、8位、16位,發(fā)展到現(xiàn)在的32位甚至64位。當(dāng)前國內(nèi)MCU廠商已有上百家,對標(biāo)進口芯片的情況非常嚴(yán)重,導(dǎo)致國內(nèi)MCU產(chǎn)品將陷入同質(zhì)化...

關(guān)鍵字: 單片機 MCU 市場

(微控制單元 MCU(Microcontroller Unit),又稱單片機,是把中央處理器(CentralProcess Unit; CPU)的頻率與規(guī)格做適當(dāng)縮減,并將內(nèi)存(memory)、計數(shù)器(Timer)、US...

關(guān)鍵字: 單片機 芯片 CPU

在疫情的影響下,出門后、用餐前使用酒精消毒已成了人們的日常,而酒精噴霧機也因此變得十分熱銷。為了避免交叉感染的風(fēng)險,自動酒精噴霧器也就應(yīng)運而生。不同于傳統(tǒng)手動噴霧器不美觀、手部接觸不衛(wèi)生的bug,此款自動感應(yīng)酒精噴霧器使...

關(guān)鍵字: 芯嶺技術(shù) 方案開發(fā) 解決方案 單片機

在實際的單片機控制系統(tǒng)中,有時候會使用數(shù)字邏輯芯片對單片機和受控元件進行隔離,以保護單片機,或者令單片機更好地對后級進行控制。

關(guān)鍵字: 單片機 數(shù)字邏輯芯片 受控元件

MH32F103AVET6使用高性能的32位內(nèi)核,內(nèi)置了多達(dá)2個高級定時器、10個通用定時器、2個基本定時器、3個12位的ADC、2個12位的DAC,還包含標(biāo)準(zhǔn)和先進的通信接口包括:3個SPI接口、2個I2S接口、2個I...

關(guān)鍵字: 單片機 MCU

最近由于換季,天氣突然的轉(zhuǎn)涼,大家也是直呼好冷。天冷了自然是要注意防寒保暖。一個能夠當(dāng)充電寶用的暖手寶會是你最好的陪伴。暖手寶是一種非常便捷易用的發(fā)熱工具,并且體形小巧,可以隨身攜帶并輕易握在手中,也可以放置在身上的其它...

關(guān)鍵字: 芯嶺技術(shù) 方案開發(fā) 解決方案 單片機

XL32F003 系列微控制器采用高性能的 32 位 ARM?Cortex?- M0+ 內(nèi)核,寬電壓工作范圍的MCU。嵌入高達(dá)64 Kbytes flash和8 Kbytes SRAM存儲器,最高工作頻率32 MHz。包...

關(guān)鍵字: 單片機 MCU

電動洗鼻器是一種全新的鼻腔清潔工具,一般是通過水壓將生理鹽水送進鼻腔,借助于生理鹽水的殺菌作用及水流的沖擊力,將鼻腔內(nèi)已聚集的致病菌及污洉排出,從而使鼻腔恢復(fù)正常的生理環(huán)境,恢復(fù)鼻腔的自我排毒功能,達(dá)到保護鼻腔的目的。讓...

關(guān)鍵字: 芯嶺技術(shù) 方案開發(fā) 解決方案 單片機

大家好,我是小舒,今天我?guī)砹艘粋€開源項目。學(xué)習(xí)單片機的小伙伴,對J-link一定不會陌生。J-link可以使用JATA和SWD接口進行在線Debug和程序的燒錄,曾經(jīng)一段時間,某寶上J-Link鋪天蓋地,各種各樣,價格...

關(guān)鍵字: 開源項目 J-link 單片機

技術(shù)讓夢想更偉大

257 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉