chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何讓RTOS多任務(wù)訪問(wèn)同一個(gè)UART?

strongerHuang ? 來(lái)源:strongerHuang ? 作者:strongerHuang ? 2021-03-12 17:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

RTOS多任務(wù)編程的時(shí)候,同一個(gè)硬件(比如UARTI2C等)被多個(gè)任務(wù)訪問(wèn)的情況比較多,如果不合理處理,就會(huì)導(dǎo)致“混亂”的局面。 處理“混亂”局面的方法比較多,下面基于FreeRTOS,以UART為例講講常見(jiàn)的互斥、隊(duì)列這兩種方法。

1

互斥訪問(wèn)方法互斥量:是一個(gè)可以處于兩態(tài)之一的變量:解鎖和加鎖。 原理:創(chuàng)建一個(gè)互斥量,任務(wù)A在需要占用資源(使用UART發(fā)送數(shù)據(jù)),把資源(UART)占用。此時(shí),任務(wù)B及其他任務(wù)就不能占用該資源。當(dāng)任務(wù)A使用完資源(UART發(fā)送完數(shù)據(jù)),釋放資源,其他任務(wù)就可以搶占該資源。

創(chuàng)建互斥量 任務(wù)A占用資源 使用資源(發(fā)送數(shù)據(jù)) 任務(wù)A釋放資源 優(yōu)先級(jí)高的任務(wù)B占用資源 使用資源 任務(wù)B釋放資源 依次,優(yōu)先級(jí)任務(wù)占用資源 · · ·

代碼:

//創(chuàng)建互斥量資源SemaphoreHandle_t xSemaphore = NULL;xSemaphore = xSemaphoreCreateMutex(); void TaskA(void *pvParameters){ for(;;) { //占用資源 if(xSemaphoreTake(xSemaphore, 10 ) == pdTRUE) { //使用資源(發(fā)送數(shù)據(jù)) USART_SendNByte(); //釋放資源 xSemaphoreGive(xSemaphore); } }} 信號(hào)量與互斥量區(qū)別:信號(hào)量:多個(gè)任務(wù)同步使用某個(gè)資源; 一個(gè)任務(wù)完成某個(gè)動(dòng)作后通過(guò)信號(hào)告訴別的任務(wù),別的任務(wù)才可以執(zhí)行某些動(dòng)作; 互斥量:多任務(wù)互斥使用某個(gè)資源; 一個(gè)任務(wù)占用某個(gè)資源,那么別的任務(wù)就無(wú)法訪問(wèn),直到該任務(wù)離開,其他任務(wù)才可以訪問(wèn)該資源;

2

隊(duì)列操作方法隊(duì)列操作方法就是FIFO,先入先出的原理。比如:任務(wù)A要使用UART發(fā)送一串?dāng)?shù)據(jù),將其加入隊(duì)列; 接著任務(wù)B也要使用UART發(fā)送一串?dāng)?shù)據(jù)。 那么,任務(wù)A將這串?dāng)?shù)據(jù)加入隊(duì)列,接著任務(wù)B又將要發(fā)送的一串?dāng)?shù)據(jù)加入隊(duì)列。 在另外一個(gè)UART發(fā)送的任務(wù)中,從隊(duì)列中按照FIFO方式讀取隊(duì)列里面的數(shù)據(jù),依次發(fā)送出去即可。

創(chuàng)建一個(gè)隊(duì)列(發(fā)送數(shù)據(jù)隊(duì)列) 創(chuàng)建一個(gè)任務(wù)(UART發(fā)送數(shù)據(jù)任務(wù)) 任務(wù)A加入隊(duì)列 任務(wù)B加入隊(duì)列 · · · 另外一邊的任務(wù),依次讀取隊(duì)列數(shù)據(jù),使用UART發(fā)送出去。

代碼:

QueueHandle_t xQueue;xQueue = xQueueCreate(QUEUE_LENGTH, QUEUE_ITEM_SIZE); xTaskCreate(UART_Send_Task, “UART_Send”, STACK_SIZE, NULL, TASK_PRIORITY, NULL); void TaskA(void *pvParameters){ for(;;) { //任務(wù)相關(guān)操作 //加入隊(duì)列 xQueueSend(xQueue, &TaskA_Buf, 10) }} void TaskB(void *pvParameters){ for(;;) { //任務(wù)相關(guān)操作 //加入隊(duì)列 xQueueSend(xQueue, &TaskB_Buf, 10) }} void UART_Send_Task(void *pvParameters){ for(;;) { //循環(huán)讀取隊(duì)列BUF if(xQueueReceive(xQueue, &Buf, 10) == pdTRUE) { USART_SendNByte(&Buf); } }}

以上兩種方法比較常用,也比較簡(jiǎn)單,希望對(duì)大家有幫助。

提示:代碼僅供學(xué)習(xí)理解原理,在項(xiàng)目中需要結(jié)合實(shí)際情況增、刪、修改代碼。

原文標(biāo)題:RTOS多任務(wù)訪問(wèn)同一個(gè)UART的方法

文章出處:【微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編程
    +關(guān)注

    關(guān)注

    90

    文章

    3708

    瀏覽量

    96777
  • RTOS
    +關(guān)注

    關(guān)注

    25

    文章

    862

    瀏覽量

    122619

原文標(biāo)題:RTOS多任務(wù)訪問(wèn)同一個(gè)UART的方法

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    什么是嵌入式操作系統(tǒng)?

    、嵌入式 OS 的核心作用(嵌入式開發(fā)中最實(shí)用的 3 個(gè)功能) 1. 多任務(wù)管理: 裸機(jī)開發(fā)的痛點(diǎn):所有功能寫在個(gè)main函數(shù)的循環(huán)里,代碼臃腫、邏輯混亂,
    發(fā)表于 12-09 10:33

    RTOS Crash 問(wèn)題全維度分析與解決指南

    ,RTOS Crash往往伴隨硬件級(jí)異常、任務(wù)調(diào)度紊亂、資源耗盡等核心問(wèn)題,需結(jié)合RTOS內(nèi)核特性、硬件架構(gòu)、應(yīng)用邏輯分層定位。 、RTOS
    發(fā)表于 12-08 03:56

    請(qǐng)問(wèn)TCP 和 UDP 可以使用同一個(gè)端口嗎?

    TCP 和 UDP 可以使用同一個(gè)端口嗎?
    發(fā)表于 12-03 08:01

    RTOS 必學(xué)概念:任務(wù)、信號(hào)量、隊(duì)列次搞懂

    如果你剛接觸RTOS(實(shí)時(shí)操作系統(tǒng)),很可能會(huì)有這樣的困惑:“RTOS和裸機(jī)程序到底有什么區(qū)別?”“任務(wù)是線程嗎?為什么要分任務(wù)?”“信號(hào)量和互斥鎖有什么區(qū)別,不都是同步手段嗎?”“隊(duì)
    的頭像 發(fā)表于 11-17 10:53 ?199次閱讀
    <b class='flag-5'>RTOS</b> 必學(xué)概念:<b class='flag-5'>任務(wù)</b>、信號(hào)量、隊(duì)列<b class='flag-5'>一</b>次搞懂

    嵌入式和單片機(jī),是同一個(gè)東西嗎?

    的程序控制各種外部設(shè)備,完成特定的操作。 總結(jié)來(lái)說(shuō),單片機(jī)是嵌入式系統(tǒng)中的種重要硬件組件,而嵌入式系統(tǒng)則是個(gè)更為廣泛的概念,它包含了單片機(jī)在內(nèi)的所有軟硬件組件,旨在實(shí)現(xiàn)特定任務(wù)的控
    發(fā)表于 07-09 10:20

    快速入門——LuatOS:sys庫(kù)多任務(wù)管理實(shí)戰(zhàn)攻略!

    的開發(fā)者,這里將用最簡(jiǎn)明的步驟,助你輕松實(shí)現(xiàn)多任務(wù)應(yīng)用開發(fā)! sys庫(kù)是LuatOS的核心系統(tǒng)調(diào)度庫(kù),它基于Lua協(xié)程機(jī)制實(shí)現(xiàn)了實(shí)時(shí)多任務(wù)調(diào)度、定時(shí)器管理以及消息通信等功能。 在詳細(xì)介紹sys庫(kù)之前,我們先來(lái)補(bǔ)充些關(guān)于實(shí)時(shí)操作
    的頭像 發(fā)表于 05-29 14:36 ?603次閱讀
    快速入門——LuatOS:sys庫(kù)<b class='flag-5'>多任務(wù)</b>管理實(shí)戰(zhàn)攻略!

    請(qǐng)問(wèn)如何在同一個(gè)FX3上實(shí)現(xiàn)兩個(gè)GPIF接口?

    我們按照 AN75779 應(yīng)用說(shuō)明在 FX3 上成功實(shí)現(xiàn)了自定義圖像傳感器接口。 現(xiàn)在我們想添加另一個(gè) GPIF 接口,這將允許同一個(gè) FX3 設(shè)備從 FPGA 接收數(shù)據(jù)并發(fā)送到 USB 主機(jī),但不
    發(fā)表于 05-13 06:35

    啟用了同一個(gè)攝像頭的3個(gè)vicap通道和3個(gè)venc通道遇到的疑問(wèn)求解

    我啟用了同一個(gè)攝像頭的3個(gè)vicap通道和3個(gè)venc通道 他們一一進(jìn)行了系統(tǒng)綁定 CSI2 -- vicap0 -- venc0 h264編碼 網(wǎng)絡(luò)推流使用 CSI2 -- vicap1
    發(fā)表于 04-28 06:16

    詳解RTOS中的Hook函數(shù)

    Hook函數(shù)是RTOS中的個(gè)關(guān)鍵特性,通過(guò)該函數(shù),用戶可以增強(qiáng)對(duì)任務(wù)管理的控制,定義系統(tǒng)行為。
    的頭像 發(fā)表于 03-24 16:14 ?843次閱讀

    stm32同一個(gè)定時(shí)器不同的通道,可以不同時(shí)的輸出pwm波形嗎?

    請(qǐng)問(wèn),stm32的同一個(gè)定時(shí)器,不同的通道,可以不同時(shí)的輸出pwm波形嗎?比如tim1的ch1輸出,延時(shí)幾毫秒后tim1的ch2輸出。 現(xiàn)在是要輸出兩個(gè)相位不同的pwm波形,延時(shí)時(shí)間、頻率、占空比
    發(fā)表于 03-07 08:20

    RTOS中的本地存儲(chǔ)指針使用

    本地存儲(chǔ)指針是RTOS中的個(gè)重要特性,增強(qiáng)了任務(wù)管理和數(shù)據(jù)處理能力。在RTOS上下文中,本地存儲(chǔ)是指存儲(chǔ)在本地的特定
    的頭像 發(fā)表于 02-28 16:33 ?1176次閱讀
    <b class='flag-5'>RTOS</b>中的本地存儲(chǔ)指針使用

    同一個(gè)74AHC138控制輸出的8個(gè)GPIO口是可以同時(shí)輸出的嗎?

    前端DSP沒(méi)有足夠的GPIO口來(lái)驅(qū)動(dòng)4個(gè)IC:TPS7A8300,現(xiàn)在想使用SN74AHC138來(lái)使GPIO口由3個(gè)復(fù)用為8個(gè) 請(qǐng)問(wèn),同一個(gè)74AHC138控制輸出的8
    發(fā)表于 01-23 06:41

    使用任務(wù)通知提高RTOS應(yīng)用的效率

    在實(shí)時(shí)嵌入式系統(tǒng)中,性能和資源效率是決定設(shè)計(jì)成敗的關(guān)鍵因素。傳統(tǒng)的實(shí)時(shí)操作系統(tǒng)(RTOS)提供了如隊(duì)列、信號(hào)量和事件組機(jī)制,實(shí)現(xiàn)任務(wù)之間的同步和通信。FreeRTOS/SAFERTOS還提供種方法可以使這些過(guò)程更快、更輕量化,
    的頭像 發(fā)表于 12-27 14:54 ?1079次閱讀

    同一個(gè)I2C總線,能帶多少片相同的ADS1115芯片?

    請(qǐng)問(wèn):同一個(gè)I2C總線,能帶多少片相同的ADS1115芯片,謝謝了!??!那個(gè)地址沒(méi)看明白?。≡趺床僮???
    發(fā)表于 12-27 06:45

    請(qǐng)問(wèn)ULN2003同一個(gè)芯片不同輸出端能接不同的上拉電平嗎?

    ULN2003同一個(gè)芯片不同輸出端能接不同的上拉電平嗎?
    發(fā)表于 12-16 06:29