91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

如何讓RTOS多任務訪問同一個UART?

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

掃碼添加小助手

加入工程師交流群

RTOS多任務編程的時候,同一個硬件(比如UART、I2C等)被多個任務訪問的情況比較多,如果不合理處理,就會導致“混亂”的局面。 處理“混亂”局面的方法比較多,下面基于FreeRTOS,以UART為例講講常見的互斥、隊列這兩種方法。

1

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

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

代碼:

//創(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); } }} 信號量與互斥量區(qū)別:信號量:多個任務同步使用某個資源; 一個任務完成某個動作后通過信號告訴別的任務,別的任務才可以執(zhí)行某些動作; 互斥量:多任務互斥使用某個資源; 一個任務占用某個資源,那么別的任務就無法訪問,直到該任務離開,其他任務才可以訪問該資源;

2

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

創(chuàng)建一個隊列(發(fā)送數(shù)據(jù)隊列) 創(chuàng)建一個任務(UART發(fā)送數(shù)據(jù)任務) 任務A加入隊列 任務B加入隊列 · · · 另外一邊的任務,依次讀取隊列數(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(;;) { //任務相關操作 //加入隊列 xQueueSend(xQueue, &TaskA_Buf, 10) }} void TaskB(void *pvParameters){ for(;;) { //任務相關操作 //加入隊列 xQueueSend(xQueue, &TaskB_Buf, 10) }} void UART_Send_Task(void *pvParameters){ for(;;) { //循環(huán)讀取隊列BUF if(xQueueReceive(xQueue, &Buf, 10) == pdTRUE) { USART_SendNByte(&Buf); } }}

以上兩種方法比較常用,也比較簡單,希望對大家有幫助。

提示:代碼僅供學習理解原理,在項目中需要結合實際情況增、刪、修改代碼。

原文標題:RTOS多任務訪問同一個UART的方法

文章出處:【微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

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

    關注

    90

    文章

    3716

    瀏覽量

    97182
  • RTOS
    +關注

    關注

    25

    文章

    866

    瀏覽量

    122977

原文標題:RTOS多任務訪問同一個UART的方法

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    文說透了如何實現(xiàn)單片機的多任務并發(fā)!

    多任務并發(fā)。 、任務調度 任務調度是多任務并發(fā)中
    發(fā)表于 01-06 06:46

    RTOS在嵌入式開發(fā)中的作用

    中,不依賴其它任務或調度器。 高峰負載管理 RTOS提供了為管理系統(tǒng)高峰活動提供了有效的方法。更高的優(yōu)先級分配給執(zhí)行峰值負載活動的任務,
    發(fā)表于 12-26 07:53

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

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

    RTOS Crash 問題全維度分析與解決指南

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

    多任務系統(tǒng)中,如何平衡任務調度以防止因高負載導致的再次進入低功耗模式的延遲?

    多任務系統(tǒng)中,如何平衡任務調度以防止因高負載導致的再次進入低功耗模式的延遲?
    發(fā)表于 12-04 06:37

    請問TCP 和 UDP 可以使用同一個端口嗎?

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

    RTOS 必學概念:任務、信號量、隊列次搞懂

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

    句話,多個命令同時執(zhí)行,AI語音模組也能多任務處理?

    、 Ai-WV02-32S ? 將語音識別、喚醒、語義理解等核心功能, 濃縮在顆小小的模組中。 安信可AI語音模組支持 MCP 協(xié)議(Multi Command Processing,多命令并行處理) ,語音交互從“單線程”進化為真正的“
    的頭像 發(fā)表于 10-31 14:45 ?523次閱讀
    <b class='flag-5'>一</b>句話,多個命令同時執(zhí)行,AI語音模組也能<b class='flag-5'>多任務</b>處理?

    當不同的數(shù)據(jù)放在同一個Flash頁面上時,請問如何在不影響其他數(shù)據(jù)的情況下更改些單獨的數(shù)據(jù)?

    當不同的數(shù)據(jù)放在同一個Flash頁面上時,如何在不影響其他數(shù)據(jù)的情況下更改些單獨的數(shù)據(jù)?
    發(fā)表于 08-22 06:25

    嵌入式和單片機,是同一個東西嗎?

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

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

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

    請問如何在同一個FX3上實現(xiàn)兩GPIF接口?

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

    啟用了同一個攝像頭的3vicap通道和3venc通道遇到的疑問求解

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

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

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

    stm32同一個定時器不同的通道,可以不同時的輸出pwm波形嗎?

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