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

程序小白
認證:優質創作者
所在專題目錄 查看專題
【第三篇】嵌入式系統的事件驅動型編程技術第二版(書籍分享)
【第四篇】QP量子編程之入門體驗
【第五篇】從(狀態圖)到(代碼)生成,一切交給軟件QM
【第六篇】基于QP開發應用程序的套路分享
【第七篇】哲學家就餐問題的對象分解
【第八篇】QF框架之時間管理——定時事件
作者動態 更多
基于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

【第七篇】哲學家就餐問題的對象分解

      例子不是影響他人的主要素材,是唯一素材。 ————原書引用。

      這一篇主要以官方提供的哲學家就餐的例子,來引出順序圖、活動對象、到整體的設計與應用,一切從需求開始,一張圓形的桌子上圍坐了五個哲學家,圓桌上有一盆意大利面,在哲學家的兩側都有餐叉,哲學家的日常由思考和吃面組成,思考一段時間,餓了,然后吃面一段時間,然后再思考,但是有個問題,就是面條太滑,如果想要吃面就得用兩把叉子,這個時候出現了一個問題,當一個吃面的時候,身邊的另外兩個人就不能同時吃面了,因為餐叉有限,有人獲得了,身邊的人就只能等待,如圖:

     

      在這個例子中,我們很明顯能夠確認的是,餐叉相當于是一種資源相對于哲學家,基于上一篇,我們規則里面,一般情況下將這種共享的資源封裝在一個活動對象內,統一管理,這里就有了第一個名為table的活動對象,負責管理餐叉,因為餐叉都是放在桌子上的,所以其名為table。除了這個共享的資源以外,看一看誰來申請餐叉,哲學家,同時,他還有不同的狀態,思考,饑餓,用餐等等。所以很符合狀態機的模式,于是將哲學家也封裝成活動對象,整個應用便是通過活動對象之間的交互完成的。

      接下來需要分離出整個應用當中需要的事件信號,這時候需要繪制順序圖,順序圖如下:

      這個圖很有意思,最左上是QF提供基礎的服務項,往右都是我們定義的活動對象,

從每個活動對象垂直看下去,就是活動對象在交互過程中的狀態轉換歷史,而帶箭頭的部分就是我們最需要的事件,從圖中可以看到箭頭上的說明是事件的信號,箭頭的方向是指示了事件的發送者到接收者。

      一般事件信號的定義和事件類型的定義都會放在一個公共的頭文件中,因為事件是用來交互的,他會涉及很多的活動對象,所以共享是這些是必要的,例如我們的應用中,事件信號的枚舉,事件結構體的定義。這里都放在了dpp.h中:

除了這些內容以外,共享的宏,以及構造函數的聲明也要放到這個文件中,因為main.c中要顯式的調用這些構造函數。

      在main函數中,你需要給每個活動對象創建一個事件隊列,給動態申請的事件創建內存池,給發行訂閱機制初始化隊列,如下:

       定義好了事件池以后,就要構造活動對象、初始化系統框架、初始化發行訂閱機制、初始化事件池、初始化板級資源,如下:

      

      接下來,啟動活動對象,并把系統控制權交回給QF,如下:

      到這里我們的應用也就真正的運行起來了。

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 6
收藏 6
關注 151
成為作者 賺取收益
全部留言
0/200
  • chaochao1545 2020-11-19 18:11
    ????????
    回復
主站蜘蛛池模板: 平原县| 龙门县| 昌乐县| 眉山市| 新邵县| 大厂| 渝中区| 腾冲县| 凌源市| 临沧市| 晋宁县| 凉山| 张家口市| 营口市| 景宁| 来凤县| 泸州市| 长乐市| 环江| 新干县| 德令哈市| 贵德县| 桂平市| 库车县| 水城县| 古浪县| 安岳县| 山丹县| 宣汉县| 新津县| 新民市| 神木县| 剑川县| 古交市| 于都县| 什邡市| 韶关市| 莒南县| 依兰县| 武川县| 新闻|