www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

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



作者:ming_mei


前言

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


可以這么說(shuō),QP框架引導(dǎo)了我的技術(shù)成長(zhǎng)。我共享的博文,雖然都以QP為起點(diǎn)進(jìn)行展開(kāi),但很多東西,都是QP官網(wǎng)的資料所沒(méi)有的。我希望接受大家的意見(jiàn)、建議和批評(píng),相信對(duì)我來(lái)說(shuō),會(huì)有更大的提升。


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


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


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


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


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


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


入門QP

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


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

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


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


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


這四個(gè)源碼分別是:


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


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


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


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


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


  • 其他


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

QP的啟動(dòng)流程

以下代碼就是QP框架的啟動(dòng)過(guò)程。


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

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

ao_led_t led;                                           // 狀態(tài)機(jī)LED對(duì)象

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)機(jī)框架初始化
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)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉