娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年04月25日(星期五)

2019年04月25日 | UCOSIII任務間的通信

發布者:Xiaohan521 來源: eefocus關鍵字:UCOSIII  任務間  通信 手機看文章 掃描二維碼
隨時隨地手機看文章

1、UCOSIII任務間通信

       1.1、任務間通信

一個任務或者中斷服務程序有時候需要和另一個任務交流信息,這個就是消息傳遞的過程就叫做任務間通信;任務間的消息傳遞可以通過2種途徑:一是通過全局變量,二是通過發布消息。


       使用全局變量的時候每個任務或者中斷服務程序都必須保證其對全局變量的獨占訪問。消息也可以通過消息隊列作為中介發布給任務。


       1.2 什么是消息?

       消息包含一下幾個部分:指向數據的指針,數據的長度和記錄消息發布時刻的時間戳,指針指向的可以是一塊數據區域或者甚至是一個函數。  消息的內容必須一直保持可見性,可見性是指代表消息的變量必須在接收消息的任務代碼范圍內有效。這是因為發布的數據采用的是指針傳遞,也就是引用傳遞,并不是值傳遞。也就是說,發布的消息本身并不產生拷貝,我們可以使用動態內存分配的方式來給消息分配一個內存塊,或者,也可以傳遞一個指向全局變量、全局數據結構、全局數組或者函數的指針。


2、UCOSIII消息隊列

2.1消息隊列的操作:

中斷服務程序只能使用OSQPost()函數,在UCOSIII中對于消息隊列的讀取是先進先出FIFO,也可以后進先出LIFO的方式,采用后進先出的方式發布的消息會繞過其他所有位于消息隊列中的消息而最先傳遞給任務。


       小沙漏表示任務指定一個超時時間,如果任務在這段時間內沒接收到消息就會喚醒任務,并返回錯誤碼告訴UCOIII任務是被超時而喚醒的不是因為接收到了消息。超時時間設置為0那任務就會一直等待下去,知道接收到消息。


消息隊列中有一個列表,就是消息隊列記錄了所有正在等待獲得消息的任務,當一則消息發布到隊列中時,最高優先級任務獲得該消息,發布方也可以向消息隊列中所有等待的任務廣播一則消息。


2.2 消息隊列是UCOSIII中的一個內核對象,為結構體OS_Q。

struct  os_q {

OS_OBJ_TYPE                Type;

CPU_CHAR                *NamePtr;

OS_PEND_LIST             PendList;                         

#if OS_CFG_DBG_EN > 0u

    OS_Q                *DbgPrevPtr;

    OS_Q                *DbgNextPtr;

    CPU_CHAR            *DbgNamePtr;

#endif

OS_MSG_Q               MsgQ     //消息列表

};

OS_MSG_Q也是一個結構體,如下:


struct  os_msg_q {                                          

OS_MSG              *InPtr;  

OS_MSG              *OutPtr;

OS_MSG_QTY           NbrEntriesSize;

OS_MSG_QTY           NbrEntries;

OS_MSG_QTY           NbrEntriesMax;

};

消息發布以后會被存放在OS_MSG類型的數據結構中,OS_MSG如下:


struct  os_msg {

OS_MSG              *NextPtr;                           

void                *MsgPtr;

OS_MSG_SIZE          MsgSize;

CPU_TS               MsgTS;

};

2.3 消息隊列API函數


2.3.1 創建消息隊列

void  OSQCreate (OS_Q        *p_q,           //指向一個消息隊列,采用OS_Q Msg_Que定//義一個消息隊列

                 CPU_CHAR    *p_name,  //消息隊列的名字

                 OS_MSG_QTY   max_qty, //消息隊列的長度,必須大于0

                 OS_ERR      *p_err)        //保存錯誤碼

2.3.2 等待消息隊列

void  *OSQPend (OS_Q         *p_q,//指向一個消息隊列

                OS_TICK       timeout,//等待消息的超時時間

                OS_OPT        opt,//選擇是否使用阻塞模式,有2個選項

                OS_MSG_SIZE  *p_msg_size,//指向一個變量用來表示接收到消息長度

                CPU_TS       *p_ts,//指向一個時間戳,表明什么時候接收到消息

                OS_ERR       *p_err)

2.3.3 向消息隊列發送消息

void  OSQPost (OS_Q         *p_q,//指向一個消息隊列

               void         *p_void,//指向實際發送的內容

               OS_MSG_SIZE   msg_size,//設定消息的大小,字節數

               OS_OPT        opt,//選擇消息發送操作的類型,基本有四種也可結合

               OS_ERR       *p_err)

3、UCOSIII任務內建消息隊列

同任務內嵌信號量一樣,UCOSIII的每個任務中也有內建消息隊列。而且多個任務等待同一個消息隊列的應用很少見,UCOSIII中每個任務多有其內建消息隊列的話用戶可以不用通過外部的消息隊列而直接向任務發布消息。


   如果需要使用任務內建消息隊列功能的時候需要將宏OS_CFG_TASK_Q_EN置1來使能相關的代碼。


任務內建消息隊列的函數在os_task.c中

3.1等待任務內建消息

void  *OSTaskQPend (OS_TICK       timeout,//等待消息的超時時間

                    OS_OPT        opt,//是否使用阻塞模式

                    OS_MSG_SIZE  *p_msg_size,//存放消息大小的變量

                    CPU_TS       *p_ts,//時間戳

                    OS_ERR       *p_err)

3.2 發送任務內建消息

void  OSTaskQPost (OS_TCB       *p_tcb,//指向接收消息任務的TCB

                   void         *p_void,//發送給一個任務的消息

                   OS_MSG_SIZE   msg_size,//消息的大小

                   OS_OPT        opt,//發送操作類型:LIFO和FIFO

                   OS_ERR       *p_err)

 


關鍵字:UCOSIII  任務間  通信 引用地址:UCOSIII任務間的通信

上一篇:UCOSIII事件標志組和同時等待多個內核對象
下一篇:UCOSIII中斷和時間管理

推薦閱讀

中國 北京---2018年4月24日---福祿克測試儀器(上海)有限公司近日宣布,4月17日在中國重慶隆重舉辦了福祿克70周年紀念活動暨品牌戰略和新品發布會。 七十年前,John Fluke先生在位于美國康涅狄格州家中的地下室創立了福祿克公司,并親自設計了第一款產品——VAW Meter(伏特、安培、瓦數表),由此開啟了福祿克在測試測量領域的發展篇章。如今,福祿克...
對于ARM7串口接收、發送數據的處理中,一般都會涉及到中斷,但是有時候有的數據可以丟棄,有的必須接收或發送。有兩種處理方法:1、中斷優先級的設置可以。中斷的話,直接調用自己的中斷處理函數。2、可以用查詢方式來接收或發送。查詢的話,直接查看接收或發送狀態(LPC2000里好像是LSR寄存器),根據狀態來接受或發送。對于多串口操作,個人覺得,可以用...
1.說在前面:最近嘗試操作VS1053音頻模塊 使用的數據傳輸方法使用SPI協議,打算學一下SPI的配置方式2.SPI2-1:SPI(Secial Periperal interface),作為四線的通信接口,有著MISO MOSI SCLK和CSMISO:主進從出MOSI:主出從進SCLK: 時間信號CS:片選信號2-2:CPHA和CPOLCPHA為時鐘相位,可以配置為1/0,控制數據的采樣方式,設置為0的時候,控制在時鐘周期...
據華爾街日報報道,Skyworks 將斥資27.5億美元收購Silicom Labs的相關業務,這主要目的是將公司從對蘋果的依賴中剝離出去 。華爾街認為這,家芯片制造商正在討價還價。Skyworks專門研究可過濾對智能手機和其他無線設備產生干擾的射頻芯片,該公司正花費大量現金從Silicon Laboratories收購基礎設施和汽車業務 。 該交易將使Skyworks在電動汽車,5G設備...

史海拾趣

問答坊 | AI 解惑

說說用51都要注意什么問題吧。

我開始時候不懂的地方就跳過去了。到現在我也不知道以前都有什么問題了。反正是現在都會了。…

查看全部問答∨

《單片機典型模塊設計實例導航》源碼

目錄: 第1章 51單片機的基本端口操作  1.1 點亮最簡單的單片機系統  1.2 更加明亮的小燈  1.3 定時亮滅的小燈  1.4 小燈亮滅的人工控制  1.5 典型外部ROM和RAM器件的使用  1.6 串口電平轉換電路  1.7 單片機系統開發經驗(1) ...…

查看全部問答∨

wince6.0 下添加Hiv注冊表的問題!

   我在wince6.0下添加Hiv注冊表時,系統運行完OEMInit系統就停止了,起不來。 我添加了以下組件: 1. Hiv-based Registry 2. Binary Rom Image File System 3. exFAT File System 4. FAT File System 5. Slient FAT File System U ...…

查看全部問答∨

WINCE6.0用系統自帶的“Bluetooth設備屬性”可以找到搜索到我的手機,但是怎么傳輸文件或上網?

1,WINCE6.0 三星6410處理器,在選擇“Bluetooth設備屬性”后,能掃描到我的手機,但是怎么進行文件傳輸? 用系統自帶的PROFILES,選擇了全部組件,手機發送給開發板,都說連接錯了。。 我想是不是要自己加驅動? 2,WINCE下怎么通過與手機藍牙 ...…

查看全部問答∨

LDS文件鏈接的一個問題,跪求高手解答

比如程序中有 main.c  lib.c 兩個文件。而main.c中有兩個函數,init() 和 main() 函數,lib.c 中 有delay() 函數。 且在main.c中,由main函數做為程序入口,由main函數來調用init()函數,來完成一些初始化工作。那么,根據C語言的規則。 ...…

查看全部問答∨

zigbee中向串口發送數據

各位XDJM們,     有沒有開發zigbee產品的呢?     我現在想將一個uint16(unsigned short)類型的數字發送到串口, 有沒有參考程序啊  我使用的是無線龍的套件  謝謝…

查看全部問答∨

請問EEPROM25AA320可以用哪個型號的燒寫器?

最近要用NRF9E5模塊,其中用到了EEPROM25AA320,不知道要用什么型號的燒寫器才能將程序下載到芯片中?麻煩大家給推薦一個便宜適用的燒寫器型號,謝謝! 另外,編程器和仿真器的作用分別是什么?單獨用燒寫器是不是能實現從電腦上將程序燒寫到芯片 ...…

查看全部問答∨

觸摸屏和電池管理的AD采樣驅動怎么實現同步????

請教各位: 觸摸屏和電源管理中用到同一個AD,這樣當觸摸屏操作的時候,電源管理的采樣就會出現問題 有人說看看是否在這兩個驅動中實現同步 請問怎么做才算實現同步????…

查看全部問答∨

字符串庫函數的C語言實現(已用VC++6.0調試過)

#include <stdio.h> char * str_index( char *string, char letter){   while ((*string != letter) && (*string))     string++;    if(*string==\'\\0\')     & ...…

查看全部問答∨

單片機直流電機

單片機對直流電機的運行控制的工作流程是怎么樣的,結合軟硬件作答?…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 都昌县| 环江| 克东县| 连云港市| 香港| 鲁甸县| 澄江县| 洞口县| 五台县| 肥城市| 板桥市| 文成县| 昭通市| 林芝县| 西丰县| 南乐县| 靖宇县| 柘城县| 会理县| 柯坪县| 秦皇岛市| 淅川县| 临高县| 卓尼县| 巴林右旗| 运城市| 无为县| 綦江县| 宣汉县| 唐海县| 吴桥县| 襄垣县| 湾仔区| 大厂| 沽源县| 定州市| 霍城县| 滦南县| 水富县| 福贡县| 南岸区|