中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      μC/OS-II的多任務信息流與CAN總線驅動

      時間:2024-05-30 21:57:31 理工畢業論文 我要投稿
      • 相關推薦

      μC/OS-II的多任務信息流與CAN總線驅動

      摘要:闡述μC/OS-II多任務信息流關鍵技術與中斷處理的一般方法和PC體系中斷的基本概念;以CAN總線為例,詳細分析在x86實模式下基于μC/OS-II的CAN總線驅動的實現過程。

      μC/OS-II是美國人Jean Labrosse編寫的一個免費的、源碼公開的嵌入式實時內核。對于開發計算機嵌入式應用產品的技術人員來說是一個實用價值很高的實時嵌入式操作系統ERTOS(Embedded Real Time Operation System)。

        要開發出完善的ERTOS,就要在多任務的調度和對I/O設備操作的穩定性、協調性方面做出大量的工作,這也是我在開發ERTOS過程中深深體會到的重點所在。希望本文能對開發ERTOS的技術人員在多任務信息流和I/O驅動方面有所啟迪。

      1 多任務信息流關鍵技術

        在討論多任務信息流之前,先討論一下多任務的工作狀態。在μC/OS中,每個任務都是無限循環的,每個任務都處在以下五種狀態之一:休眠態、就緒態、運行態、掛起態和中斷態,如圖1所示。

        在多任務的調度和驅動程序的編寫過程中,必然要涉及到公用代碼段和共享存儲區的保護問題。即使是原有的C函數,可重用性方面在沒有得到理論和實踐的驗證情況下也需要對其進行保護。這樣就需要合理的算法對公用代碼段、共享存儲區進行保護,避免操作系統在運行過程中產生重用性問題而導致運行結果不可預測。

        系統在開發過程中,既要考慮到減少系統的復雜程度,也要兼顧其穩定性與運行效率的要求。這就需要我們對各種算法進行合理的選擇:在穩定性可以保障的情況下,選擇相對簡單,占用CPU時間少的算法;在穩定性不能保障的情況下,考慮選擇周全的算法。只有這樣才能使操作系統在一定的配置環境下達到最高的運行效率。

        接下來分別用void CanSendMessageProcess(void *data)、void CanSendMessage(void *data)、void CanReceiveMessageProcess(void *data)和void CanReceiveMessage(void *data)這四個任務來描述在采用消息隊列、郵箱和信號量通信機制時的信息流的傳遞過程。

        (1)消息隊列通信機制

        消息隊列在初始化的時候,建立一個指定空間大小的數組,這個數組在使用的時候取得了環形緩沖區的概念。這個數組在運行期間不會被消除,這樣就避免了重復建立數組的時候內存空間的泄漏問題。當一個任務向消息隊列發送一個信息的時候,相應的指針加1(OSQIn 1),隊列滿時(OSQEntries = OSQSize),OSQIn則與OSQOut指向同一單元。如果在OSQIn指向的單元內插入新的指向消息的指針,就構成FIFO(First-In-First-Out)隊列。相反,如果在OSQOut指向單元的下一個單元插入新的指針,就構成LIFO隊列(Last-In-First-Out)。在本實例中,我們定義FIFO隊列。消息指針總是從OSQOut指向的單元取出。OSQStart和OSQEnd定義了消息指針數組的頭和尾,以便在OSQIn和OSQOut到達隊列的邊緣時,進行邊界檢查和必要的指針調整,實現其循環功能。

        消息隊列數據結構如下:

      typedef struct os_q {

      struct os_q *OSQPtr; /* 在空閑隊列控制塊中鏈接所有的隊列控制塊*/

      void *OSQStart; /*指向消息隊列的指針數組的起始地址的指針*/

      void *OSQEnd; /* 指向消息隊列結束單元的下一個地址的指針*/

      void *OSQIn; /* 指向消息隊列中插入下一條信息位置的指針*/

      void *OSQOut; /* 指向消息隊列中下一個取出消息位置的指針*/

      INT16U OSQSize; /* 消息隊列中總的單元數*/

      INT16U OSQEntries; /*消息隊列中總的消息數量*/

      } OS_Q;

      圖2為消息隊列信息流的演示說明。

        ① CanSendMessageProcess任務完成信息的計算工作以后,將要發送的信息送進消息隊列1。

        ② CanSendMessage任務負責取得消息隊列1里面的信息。

      【μC/OS-II的多任務信息流與CAN總線驅動】相關文章:

      基于ADμC812的CAN總線智能節點的設計03-19

      嵌入式Linux下CAN總線驅動程序設計03-07

      CAN總線控制器與DSP的接口03-07

      光纖CAN總線自愈環網的研究01-09

      CAN總線在樓宇監控系統中的應用03-07

      CAN總線中位定時的設定方法03-18

      基于PCI總線的CAN卡的設計與實現03-18

      CAN總線位定時參數的確定03-18

      基于CAN總線的汽車液晶儀表設計03-07

      主站蜘蛛池模板: 亚洲国产黄色一区二区三区| 按摩女内射少妇一二三区| 申扎县| 麻豆精品av国产一区久久| 99久久亚洲精品加勒比| 国产一区二区三区亚洲精品| 华池县| 精品国产91久久综合| 国产又粗又猛又黄色呦呦| 国产丝袜美腿美女视频| 丰满人妻中文字幕乱码| 亚洲精品国产综合久久一线| 欧美日本国产亚洲网站免费一区二区 | 五河县| 亚洲国产精品亚洲高清| 色播在线永久免费视频网站| 无码人妻丝袜在线视频| av网页在线免费观看| 欧美高h视频| 女同在线观看免费网站| 精品一区二区中文字幕| 日韩激情网| 亚洲人妻中文字幕在线视频| a欧美一级爱看视频| 精品丝袜国产在线播放| 中文字幕精品乱码亚洲一区99| 吉隆县| 凭祥市| 亚洲情精品中文字幕有码在线 | 成人影院视频免费观看| 天天射色综合| 精品系列无码一区二区三区| 妺妺窝人体色www聚色窝| 国产精品美女主播一区| av天堂资源网在线播放| 昌都县| 看黄色亚洲看黄色亚洲| 日本最新在线一区二区| 久久久久久久综合日本| 亚洲综合综合在线| 国产粉嫩高清|