91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

程序小白
認證:優質創作者
所在專題目錄 查看專題
【第二篇】大話單片機軟件構架
【第三篇】嵌入式系統的事件驅動型編程技術第二版(書籍分享)
【第四篇】QP量子編程之入門體驗
【第五篇】從(狀態圖)到(代碼)生成,一切交給軟件QM
【第六篇】基于QP開發應用程序的套路分享
【第七篇】哲學家就餐問題的對象分解
作者動態 更多
基于stm32采用PWM驅動伺服控制器學習筆記
05-13 15:25
基于STM32驅動TM1638學習筆記——軟件篇
04-19 12:42
基于TM1638驅動8位數碼管設計分享
02-24 11:26
RT-Thread驅動之路: Studio創建FAL分區⑤
01-02 08:30
RT-Thread驅動之路: Studio 掛載通用SPI flash④
2024-12-23 13:41

【第六篇】基于QP開發應用程序的套路分享

      這一篇來聊一聊如何開發基于QP的應用程序,他可能和我們平時開發的應用程序所遵循的規則不太一樣,其實規則一詞有點別扭,不如說是套路,每個人開發軟件都有自己的套路,每個套路都是你站在問題需求的一個角度上理解以后,產生的策略,問題需求的角度不同,你能產生的策略就不一樣,不要站在一個套路的高度,嘗試著把軟件融入到另一種套路中,一切重新從需求出發,問題會變得更簡單。

      QP這本書提了兩點要求我們必須遵守的準則,并且用了很大的篇幅去說服你一定要遵守這兩條準則:

      準則一、活動對象之間僅應該通過異步事件交換來相互作用,不應該共享內存或者其它資源。(通俗舉例:取消全局變量)

      準則二、活動對象不應該被阻塞或者在RTC處理中間忙等待事件。(通俗來講:不太好講,大概是活動對象內部處理代碼不要有死等或者被掛起的操作)

      知道這兩條規則,你依舊是寫不好QP的應用,就像是懂得了很多大道理卻依舊過不好這一生(扯遠了),規則的目的,不是讓你僅僅停留在理解的階段,而是要在今后的實戰應用中,不斷地實踐,不斷的進階,才會獲得更好的理解(莫要怕犯錯,不犯錯你就永遠無法掌握它)。

      這兩條規則都在圍繞著一個核心的主題來,也就是【活動對象】,他爹就是【狀態機】,時代變了,很難靠狀態機來打天下了,必須要披上一層QF的糖衣,這樣生意就好做多了,QF提供了事件隊列,內存池等等一系列的基礎設施給狀態機使用,同樣,用上了這些高端貨的狀態機,已經不能叫做狀態機了,于是,他有了另一個喜人的名字【活動對象】。

      一個基于QP的應用程序,實際上是被分割成了多個【活動對象】,每個活動對象都為系統管理一部分【資源】,資源這個詞很有意思,看到管理資源,第一時間可能想到的是管理內存,其實在活動對象看來,不光是一片內存叫資源,兩個IO引腳,一個LED燈都可以叫做是資源,如何實現應用,其實就是靠管理這些資源協調運作,從而實現應用的功能。

      又扯遠了,【活動對象】的本職就是管理資源,他們高度的自治,就是我管的事情別人不可以插手,那么如何協調工作呢,那就需要一個叫做【事件】的郵件,你想改變某個資源,對不起,發郵件告訴我。什么?你很急?哦,那你趕緊寫郵件啊(大家必須遵守規則,不然又回到了全局變量滿地找的解放前)~!

      整個應用程序功能可以很復雜,有可能很多活最終都分配給某個【活動對象】,其它的【活動對象】就很閑,是不是會讓你想起ARM打天下的場景,嘿嘿~!這就要看作者的創作水平了,這個叫【某個】的【活動對象】變得很忙,其他人都在聊天打屁,還時不時給他發郵件,讓他干這干那,他倒是任勞任怨,但是好多郵件到家門口的時候,他可能在忙,于是郵遞員【QF】把郵件放到他家門口,敲門就走了,這貨現在忙得跟孫子似的,根本沒時間開門接郵件,結果一陣大風刮過,他開門的時候啥也沒了。整個應用到這里就凌亂了。

      為了解決這個問題,于是乎,QF就給每個【活動對象】在他們家門口都按了一個箱子,叫郵箱(這個郵箱是真實生活中的郵箱,可不是操作系統概念中的郵箱)【事件隊列】,于是乎,這個問題仿佛得到了一部分解決,快遞員每次來的時候,就把郵件放到你的郵箱里,然后敲門離開,當然也會遇到一種特殊情況,郵件太多,實在放不下了(一個合適大小的事件隊列有多重要,只能等你實戰的時候體會了),這時候,快遞小哥只能把郵件放在門口,敲門離開,繼續送信,小心大風~!

      針對這個寫的郵件【事件】,還有一個重要的方面沒講,也就是【活動對象】能處理的郵件的要求是受限,你不能寫個郵件【事件】,內容是幫我造一顆原子彈,這時候【活動對象】可能懶得理你,也可能和警察【QF】報告抓你,為了防止惡作劇的存在,于是大家規定了一整套的【事件】類型的定義,叫做【信號】,通過枚舉來完成,確保大家都不同。

      到這里已經引出了本篇的所有主題,你要開發QP應用程序,就必須將他分解成多個【活動對象】,并用【事件】機制將他們串起來,這個復雜的機制又引入了【信號】、【事件隊列】等等內容。

      于是總結一下:

      QP應用程序 = 多個【活動對象】+【信號】+【事件】+【事件隊列】;

     【活動對象】是可以展開的,展開就是狀態機,如何基于狀態機開發應用程序的專題我寫了,所以這里就不展開了。

      下一篇,教你如何分解成活動對象,基于一個官方的實例,從問題需求,到順序圖,到活動對象一條龍。再見~!

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 6
收藏 5
關注 151
成為作者 賺取收益
全部留言
0/200
  • 星球居民-G9sQj7p6 2020-12-31 10:37
    全部收藏,感謝分享
    回復
主站蜘蛛池模板: 汉中市| 义马市| 泾阳县| 舟曲县| 拜城县| 大城县| 诸城市| 南涧| 隆昌县| 荔波县| 收藏| 六盘水市| 含山县| 精河县| 巍山| 岢岚县| 峨边| 正镶白旗| 玉龙| 凌云县| 河西区| 左云县| 上林县| 龙山县| 阿克陶县| 木里| 新源县| 砚山县| 金沙县| 民乐县| 元阳县| 女性| 卢氏县| 呼和浩特市| 浦江县| 兴和县| 红安县| 开平市| 昌图县| 峨边| 闽清县|