女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

詳解互斥信號(hào)量的概念和運(yùn)行

開(kāi)源嵌入式 ? 來(lái)源:開(kāi)源嵌入式 ? 作者:開(kāi)源嵌入式 ? 2020-10-22 11:57 ? 次閱讀

1 、互 斥 信 號(hào) 量

1.1 互斥信號(hào)量的概念及其作用

互斥信號(hào)量的主要作用是對(duì)資源實(shí)現(xiàn)互斥訪問(wèn),使用二值信號(hào)量也可以實(shí)現(xiàn)互斥訪問(wèn)的功能,不過(guò)互斥信號(hào)量與二值信號(hào)量有區(qū)別。下面我們先舉一個(gè)通過(guò)二值信號(hào)量實(shí)現(xiàn)資源獨(dú)享,即互斥訪問(wèn)的例子,讓大家有一個(gè)形象的認(rèn)識(shí),進(jìn)而引出要講解的互斥信號(hào)量。

運(yùn)行條件:

讓兩個(gè)任務(wù) Task1 和 Task2 都運(yùn)行串口打印函數(shù) printf,這里我們就通過(guò)二值信號(hào)量實(shí)現(xiàn)對(duì)函數(shù)printf 的互斥訪問(wèn)。如果不對(duì)函數(shù) printf 進(jìn)行互斥訪問(wèn),串口打印容易出現(xiàn)亂碼。

用計(jì)數(shù)信號(hào)量實(shí)現(xiàn)二值信號(hào)量只需將計(jì)數(shù)信號(hào)量的初始值設(shè)置為 1 即可。

代碼實(shí)現(xiàn):

創(chuàng)建二值信號(hào)量

static SemaphoreHandle_t xSemaphore = NULL; * 函 數(shù) 名: AppObjCreate * 功能說(shuō)明: 創(chuàng)建任務(wù)通信機(jī)制 * 形 參: 無(wú) * 返 回 值: 無(wú) static void AppObjCreate (void) {/* 創(chuàng)建二值信號(hào)量,首次創(chuàng)建信號(hào)量計(jì)數(shù)值是 0 */xSemaphore = xSemaphoreCreateBinary();if(xSemaphore == NULL) {/* 沒(méi)有創(chuàng)建成功,用戶可以在這里加入創(chuàng)建失敗的處理機(jī)制 */}/* 先釋放一次,將初始值改為 1,利用二值信號(hào)量實(shí)現(xiàn)互斥功能 */xSemaphoreGive(xSemaphore); }

? 通過(guò)二值信號(hào)量實(shí)現(xiàn)對(duì) printf 函數(shù)互斥訪問(wèn)的兩個(gè)任務(wù)

static void vTaskLED(void *pvParameters) { TickType_t xLastWakeTime;const TickType_t xFrequency = 300;/* 獲取當(dāng)前的系統(tǒng)時(shí)間 */xLastWakeTime = xTaskGetTickCount();while(1) {/* 通過(guò)二值信號(hào)量實(shí)現(xiàn)資源互斥訪問(wèn),永久等待直到資源可用 */xSemaphoreTake(xSemaphore, portMAX_DELAY); printf("任務(wù) vTaskLED 在運(yùn)行 "); bsp_LedToggle(1); bsp_LedToggle(4); xSemaphoreGive(xSemaphore);/* vTaskDelayUntil 是絕對(duì)延遲,vTaskDelay 是相對(duì)延遲。*/vTaskDelayUntil(&xLastWakeTime, xFrequency); } } * 函 數(shù) 名: vTaskMsgPro * 功能說(shuō)明: 實(shí)現(xiàn)對(duì)串口的互斥訪問(wèn) * 形 參: pvParameters 是在創(chuàng)建該任務(wù)時(shí)傳遞的形參 * 返 回 值: 無(wú) * 優(yōu) 先 級(jí): 3 static void vTaskMsgPro(void *pvParameters) { TickType_t xLastWakeTime; const TickType_t xFrequency = 300; /* 獲取當(dāng)前的系統(tǒng)時(shí)間 */xLastWakeTime = xTaskGetTickCount(); while(1) { /* 通過(guò)二值信號(hào)量實(shí)現(xiàn)資源互斥訪問(wèn),永久等待直到資源可用 */ xSemaphoreTake(xSemaphore, portMAX_DELAY); printf("任務(wù) vTaskMsgPro 在運(yùn)行 "); bsp_LedToggle(2); bsp_LedToggle(3); xSemaphoreGive(xSemaphore); /* vTaskDelayUntil 是絕對(duì)延遲,vTaskDelay 是相對(duì)延遲。*/ vTaskDelayUntil(&xLastWakeTime, xFrequency); } }

有了上面二值信號(hào)量的認(rèn)識(shí)之后,互斥信號(hào)量與二值信號(hào)量又有什么區(qū)別呢?互斥信號(hào)量可以防止優(yōu)先級(jí)翻轉(zhuǎn),而二值信號(hào)量不支持,下面我們就講解一下優(yōu)先級(jí)翻轉(zhuǎn)問(wèn)題。

1.2 優(yōu)先級(jí)翻轉(zhuǎn)問(wèn)題

下面我們通過(guò)如下的框圖來(lái)說(shuō)明一下優(yōu)先級(jí)翻轉(zhuǎn)的問(wèn)題,讓大家有一個(gè)形象的認(rèn)識(shí)。


運(yùn)行條件:

創(chuàng)建 3 個(gè)任務(wù) Task1,Task2 和 Task3,優(yōu)先級(jí)分別為 3,2,1。也就是 Task1 的優(yōu)先級(jí)最高。
任務(wù) Task1 和 Task3 互斥訪問(wèn)串口打印 printf,采用二值信號(hào)實(shí)現(xiàn)互斥訪問(wèn)。
起初 Task3 通過(guò)二值信號(hào)量正在調(diào)用 printf,被任務(wù) Task1 搶占,開(kāi)始執(zhí)行任務(wù) Task1,也就是上圖的起始位置。

運(yùn)行過(guò)程描述如下:
任務(wù) Task1 運(yùn)行的過(guò)程需要調(diào)用函數(shù) printf,發(fā)現(xiàn)任務(wù) Task3 正在調(diào)用,任務(wù) Task1 會(huì)被掛起,等待 Task3 釋放函數(shù) printf。
在調(diào)度器的作用下,任務(wù) Task3 得到運(yùn)行,Task3 運(yùn)行的過(guò)程中,由于任務(wù) Task2 就緒,搶占了 Task3的運(yùn)行。優(yōu)先級(jí)翻轉(zhuǎn)問(wèn)題就出在這里了,從任務(wù)執(zhí)行的現(xiàn)象上看,任務(wù) Task1 需要等待 Task2 執(zhí)行完畢才有機(jī)會(huì)得到執(zhí)行,這個(gè)與搶占式調(diào)度正好反了,正常情況下應(yīng)該是高優(yōu)先級(jí)任務(wù)搶占低優(yōu)先級(jí)任務(wù)的執(zhí)行,這里成了高優(yōu)先級(jí)任務(wù) Task1 等待低優(yōu)先級(jí)任務(wù) Task2 完成。所以這種情況被稱之為優(yōu)先級(jí)翻轉(zhuǎn)問(wèn)題。
任務(wù) Task2 執(zhí)行完畢后,任務(wù) Task3 恢復(fù)執(zhí)行,Task3 釋放互斥資源后,任務(wù) Task1 得到互斥資源,從而可以繼續(xù)執(zhí)行。

上面就是一個(gè)產(chǎn)生優(yōu)先級(jí)翻轉(zhuǎn)問(wèn)題的現(xiàn)象。

1.3 FreeRTOS 互斥信號(hào)量的實(shí)現(xiàn)

FreeRTOS 互斥信號(hào)量是怎么實(shí)現(xiàn)的呢?其實(shí)相對(duì)于二值信號(hào)量,互斥信號(hào)量就是解決了一下優(yōu)先級(jí)翻轉(zhuǎn)的問(wèn)題。下面我們通過(guò)如下的框圖來(lái)說(shuō)明一下 FreeRTOS 互斥信號(hào)量的實(shí)現(xiàn),讓大家有一個(gè)形象的認(rèn)識(shí)。

運(yùn)行條件:

創(chuàng)建 2 個(gè)任務(wù) Task1 和 Task2,優(yōu)先級(jí)分別為 1 和 3,也就是任務(wù) Task2 的優(yōu)先級(jí)最高。
任務(wù) Task1 和 Task2 互斥訪問(wèn)串口打印 printf。
使用 FreeRTOS 的互斥信號(hào)量實(shí)現(xiàn)串口打印 printf 的互斥訪問(wèn)。

運(yùn)行過(guò)程描述如下:

低優(yōu)先級(jí)任務(wù) Task1 執(zhí)行過(guò)程中先獲得互斥資源 printf 的執(zhí)行。此時(shí)任務(wù) Task2 搶占了任務(wù) Task1的執(zhí)行,任務(wù) Task1 被掛起。任務(wù) Task2 得到執(zhí)行。
任務(wù) Task2 執(zhí)行過(guò)程中也需要調(diào)用互斥資源,但是發(fā)現(xiàn)任務(wù) Task1 正在訪問(wèn),此時(shí)任務(wù) Task1 的優(yōu)先級(jí)會(huì)被提升到與 Task2 同一個(gè)優(yōu)先級(jí),也就是優(yōu)先級(jí) 3,這個(gè)就是所謂的優(yōu)先級(jí)繼承(Priority inheritance),這樣就有效地防止了優(yōu)先級(jí)翻轉(zhuǎn)問(wèn)題。任務(wù) Task2 被掛起,任務(wù) Task1 有新的優(yōu)先級(jí)繼續(xù)執(zhí)行。
任務(wù) Task1 執(zhí)行完畢并釋放互斥資源后,優(yōu)先級(jí)恢復(fù)到原來(lái)的水平。由于互斥資源可以使用,任務(wù)Task2 獲得互斥資源后開(kāi)始執(zhí)行。

上面就是一個(gè)簡(jiǎn)單的 FreeRTOS 互斥信號(hào)量的實(shí)現(xiàn)過(guò)程。

1.4 FreeRTOS 中斷方式互斥信號(hào)量的實(shí)現(xiàn)

互斥信號(hào)量?jī)H支持用在 FreeRTOS 的任務(wù)中,中斷函數(shù)中不可使用。

2 互 斥 信 號(hào) 量 API 函 數(shù)

使用如下 18 個(gè)函數(shù)可以實(shí)現(xiàn) FreeRTOS 的信號(hào)量(含計(jì)數(shù)信號(hào)量,二值信號(hào)量和互斥信號(hào)):
? xSemaphoreCreateBinary()
? xSemaphoreCreateBinaryStatic()
? vSemaphoreCreateBinary()
? xSemaphoreCreateCounting()
? xSemaphoreCreateCountingStatic()
? xSemaphoreCreateMutex()
? xSemaphoreCreateMutexStatic()
? xSem'CreateRecursiveMutex()
? xSem'CreateRecursiveMutexStatic()
? vSemaphoreDelete()
? xSemaphoreGetMutexHolder()
? uxSemaphoreGetCount()
? xSemaphoreTake()
? xSemaphoreTakeFromISR()
? xSemaphoreTakeRecursive()
? xSemaphoreGive()
? xSemaphoreGiveRecursive()

? xSemaphoreGiveFromISR()

關(guān)于這 18 個(gè)函數(shù)的講解及其使用方法可以看 FreeRTOS 在線版手冊(cè):

2.1 函數(shù) xSemaphoreCreateMutex

函數(shù)原型:
SemaphoreHandle_t xSemaphoreCreateMutex( void )
函數(shù)描述:
函數(shù) xSemaphoreCreateMutex 用于創(chuàng)建互斥信號(hào)量。
返回值,如果創(chuàng)建成功會(huì)返回互斥信號(hào)量的句柄,如果由于 FreeRTOSConfig.h 文件中 heap 大小不足,無(wú)法為此互斥信號(hào)量提供所需的空間會(huì)返回 NULL。

使用這個(gè)函數(shù)要注意以下問(wèn)題:
1. 此函數(shù)是基于函數(shù) xQueueCreateMutex 實(shí)現(xiàn)的:
#define xSemaphoreCreateMutex() xQueueCreateMutex( queueQUEUE_TYPE_MUTEX )
函數(shù) xQueueCreateMutex 的實(shí)現(xiàn)是基于消息隊(duì)列函數(shù) xQueueGenericCreate 實(shí)現(xiàn)的。
2. 使用此函數(shù)要在 FreeRTOSConfig.h 文件中使能宏定義:
#define configUSE_MUTEXES 1

使用舉例:

static SemaphoreHandle_t xMutex = NULL; * 函 數(shù) 名: AppObjCreate * 功能說(shuō)明: 創(chuàng)建任務(wù)通信機(jī)制 * 形 參: 無(wú) * 返 回 值: 無(wú) static void AppObjCreate (void) {/* 創(chuàng)建互斥信號(hào)量 */xMutex = xSemaphoreCreateMutex(); if(xSemaphore == NULL) {/* 沒(méi)有創(chuàng)建成功,用戶可以在這里加入創(chuàng)建失敗的處理機(jī)制 */} }

2.2 函數(shù) xSemaphoreGive

函數(shù)原型:
xSemaphoreGive( SemaphoreHandle_t xSemaphore ); /* 信號(hào)量句柄 */
函數(shù)描述:
函數(shù) xSemaphoreGive 用于在任務(wù)代碼中釋放信號(hào)量。
第 1 個(gè)參數(shù)是信號(hào)量句柄。
返回值,如果信號(hào)量釋放成功返回 pdTRUE,否則返回 pdFALSE,因?yàn)樾盘?hào)量的實(shí)現(xiàn)是基于消息隊(duì)列,返回失敗的主要原因是消息隊(duì)列已經(jīng)滿了。
使用這個(gè)函數(shù)要注意以下問(wèn)題:
1. 此函數(shù)是基于消息隊(duì)列函數(shù) xQueueGenericSend 實(shí)現(xiàn)的:
#define xSemaphoreGive( xSemaphore ) xQueueGenericSend( ( QueueHandle_t ) ( xSemaphore ), NULL, semGIVE_BLOCK_TIME,queueSEND_TO_BACK )
2. 此函數(shù)是用于任務(wù)代碼中調(diào)用的,故不可以在中斷服務(wù)程序中調(diào)用此函數(shù),中斷服務(wù)程序中使用的是xSemaphoreGiveFromISR。

3. 使用此函數(shù)前,一定要保證用函數(shù) xSemaphoreCreateBinary(), xSemaphoreCreateMutex() 或者 xSemaphoreCreateCounting()創(chuàng)建了信號(hào)量。
4. 此函數(shù)不支持使用 xSemaphoreCreateRecursiveMutex()創(chuàng)建的信號(hào)量。

2.3 函數(shù) xSemaphoreTake

函數(shù)原型:
xSemaphoreTake( SemaphoreHandle_t xSemaphore, /* 信號(hào)量句柄 */
TickType_t xTicksToWait ); /* 等待信號(hào)量可用的最大等待時(shí)間 */
函數(shù)描述:
函數(shù) xSemaphoreTake 用于在任務(wù)代碼中獲取信號(hào)量。
第 1 個(gè)參數(shù)是信號(hào)量句柄。
第 2 個(gè)參數(shù)是沒(méi)有信號(hào)量可用時(shí),等待信號(hào)量可用的最大等待時(shí)間,單位系統(tǒng)時(shí)鐘節(jié)拍。

返回值,如果創(chuàng)建成功會(huì)獲取信號(hào)量返回 pdTRUE,否則返回 pdFALSE。
使用這個(gè)函數(shù)要注意以下問(wèn)題:
1. 此函數(shù)是用于任務(wù)代碼中調(diào)用的,故不可以在中斷服務(wù)程序中調(diào)用此函數(shù),中斷服務(wù)程序使用的是xSemaphoreTakeFromISR。
2. 如果消息隊(duì)列為空且第 2 個(gè)參數(shù)為 0,那么此函數(shù)會(huì)立即返回。
3. 如果用戶將 FreeRTOSConfig.h 文件中的宏定義 INCLUDE_vTaskSuspend 配置為 1 且第 2 個(gè)參數(shù)配置為 portMAX_DELAY,那么此函數(shù)會(huì)永久等待直到信號(hào)量可用。

使用舉例:

static SemaphoreHandle_t xMutex = NULL; * 函 數(shù) 名: vTaskLED * 功能說(shuō)明: 實(shí)現(xiàn)串口的互斥訪問(wèn),防止多個(gè)任務(wù)同時(shí)訪問(wèn)造成串口打印亂碼 * 形 參: pvParameters 是在創(chuàng)建該任務(wù)時(shí)傳遞的形參 * 返 回 值: 無(wú) * 優(yōu) 先 級(jí): 2 static void vTaskLED(void *pvParameters) { TickType_t xLastWakeTime;const TickType_t xFrequency = 200;/* 獲取當(dāng)前的系統(tǒng)時(shí)間 */xLastWakeTime = xTaskGetTickCount();while(1) {/* 互斥信號(hào)量,xSemaphoreTake 和 xSemaphoreGive 一定要成對(duì)的調(diào)用 */xSemaphoreTake(xMutex, portMAX_DELAY); printf("任務(wù) vTaskLED 在運(yùn)行 "); bsp_LedToggle(2); bsp_LedToggle(3); xSemaphoreGive(xMutex);/* vTaskDelayUntil 是絕對(duì)延遲,vTaskDelay 是相對(duì)延遲。*/vTaskDelayUntil(&xLastWakeTime, xFrequency); } }

互斥信號(hào)量,xSemaphoreTake 和 xSemaphoreGive 一定要成對(duì)的調(diào)用

經(jīng)過(guò)測(cè)試,互斥信號(hào)量是可以被其他任務(wù)釋放的,但是我們最好不要這么做,因?yàn)楣俜酵扑]的就是在同一個(gè)任務(wù)中接收和釋放。如果在其他任務(wù)釋放,不僅僅會(huì)讓代碼整體邏輯變得復(fù)雜,還會(huì)給使用和維護(hù)這套API的人帶來(lái)困難。遵守規(guī)范,總是好的。

裸機(jī)編程的時(shí)候,我經(jīng)常想一個(gè)問(wèn)題,就是怎么做到當(dāng)一個(gè)標(biāo)志位觸發(fā)的時(shí)候,立即執(zhí)行某個(gè)操作,如同實(shí)現(xiàn)標(biāo)志中斷一樣,在os編程之后,我們就可以讓一個(gè)優(yōu)先級(jí)最高任務(wù)一直等待某個(gè)信號(hào)量,如果獲得信號(hào)量,就執(zhí)行某個(gè)操作,實(shí)現(xiàn)類似標(biāo)志位中斷的作用(當(dāng)然,要想正真做到中斷效果,那就需要屏蔽所有可屏蔽中斷,而臨界區(qū)就可以做到)。

再說(shuō)一下遞歸互斥信號(hào)量:遞歸互斥信號(hào)量,其實(shí)就是互斥信號(hào)量里面嵌套互斥信號(hào)量

使用舉例:

static void vTaskMsgPro(void *pvParameters) { TickType_t xLastWakeTime; const TickType_t xFrequency = 1500; /* 獲取當(dāng)前的系統(tǒng)時(shí)間 */ xLastWakeTime = xTaskGetTickCount(); while(1) {/* 遞歸互斥信號(hào)量,其實(shí)就是互斥信號(hào)量里面嵌套互斥信號(hào)量 */ xSemaphoreTakeRecursive(xRecursiveMutex, portMAX_DELAY); {//假如這里是被保護(hù)的資源,第1層被保護(hù)的資源,用戶可以在這里添加被保護(hù)資源 printf("任務(wù)vTaskMsgPro在運(yùn)行,第1層被保護(hù)的資源,用戶可以在這里添加被保護(hù)資源 "); /* 第1層被保護(hù)的資源里面嵌套被保護(hù)的資源 */ xSemaphoreTakeRecursive(xRecursiveMutex, portMAX_DELAY); { //假如這里是被保護(hù)的資源,第2層被保護(hù)的資源,用戶可以在這里添加被保護(hù)資源 printf("任務(wù)vTaskMsgPro在運(yùn)行,第2層被保護(hù)的資源,用戶可以在這里添加被保護(hù)資源 "); /* 第2層被保護(hù)的資源里面嵌套被保護(hù)的資源 */ xSemaphoreTakeRecursive(xRecursiveMutex, portMAX_DELAY); { printf("任務(wù)vTaskMsgPro在運(yùn)行,第3層被保護(hù)的資源,用戶可以在這里添加被保護(hù)資源 "); bsp_LedToggle(1); bsp_LedToggle(4); } xSemaphoreGiveRecursive(xRecursiveMutex); } xSemaphoreGiveRecursive(xRecursiveMutex); } xSemaphoreGiveRecursive(xRecursiveMutex); /* vTaskDelayUntil是絕對(duì)延遲,vTaskDelay是相對(duì)延遲。*/ vTaskDelayUntil(&xLastWakeTime, xFrequency); } }

可以前面的那個(gè)官方文檔那樣用if判斷傳遞共享量:

也可以用我們遞歸互斥信號(hào)量里面的portMAX_DELAY指定永久等待,即xSemaphoreTakeRecursive返回的不是pdTRUE時(shí),會(huì)一直等待信號(hào)量,直到有信號(hào)量來(lái)才執(zhí)行后面的語(yǔ)句。

責(zé)任編輯:PSY

原文標(biāo)題:嵌入式系統(tǒng)FreeRTOS — 互斥信號(hào)量

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3665

    瀏覽量

    130896
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    489

    瀏覽量

    63738
  • 互斥信號(hào)量
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    2118
收藏 人收藏

    評(píng)論

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

    混合信號(hào)設(shè)計(jì)的概念、挑戰(zhàn)與發(fā)展趨勢(shì)

    本文介紹了集成電路設(shè)計(jì)領(lǐng)域中混合信號(hào)設(shè)計(jì)的概念、挑戰(zhàn)與發(fā)展趨勢(shì)。
    的頭像 發(fā)表于 04-01 10:30 ?402次閱讀

    嵌入式開(kāi)發(fā)避坑指南|FreeRTOS的5個(gè)\"反直覺(jué)\"小技巧

    ;整個(gè)系統(tǒng)! 類型選擇: 場(chǎng)景 推薦類型 關(guān)鍵特性 資源計(jì)數(shù)(如內(nèi)存池) 二值信號(hào)量 不可遞歸獲取 互斥訪問(wèn)(如串口) 互斥鎖(Mutex) 支持優(yōu)先級(jí)繼承 事件通知(如按鍵) 計(jì)數(shù)信號(hào)量
    發(fā)表于 03-20 13:57

    FreeRTOS(V9.0)中創(chuàng)建信號(hào)量的函數(shù)都沒(méi)有被定義,因此用不了,怎么解決

    問(wèn)題背景:我想要使用信號(hào)量,結(jié)果查找了整個(gè)工程都沒(méi)有創(chuàng)建信號(hào)量的函數(shù)。我還以為是我自己移植有問(wèn)題,因此還特地下載了其他人移植好的工程進(jìn)行編程。結(jié)果也沒(méi)有創(chuàng)建信號(hào)量的函數(shù)。不論是二值信號(hào)量
    發(fā)表于 03-13 09:30

    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫(kù)案例:Semaphore

    1、程序簡(jiǎn)介該程序是基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫(kù)的線程處理:Sempahore。本案例完成如下工作:(1)無(wú)名信號(hào)量使用方法定義1個(gè)無(wú)名信號(hào)量,1個(gè)供無(wú)名信號(hào)量管理
    的頭像 發(fā)表于 02-10 18:08 ?278次閱讀
    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫(kù)案例:Semaphore

    DM368視頻前端信號(hào)采集詳解

    電子發(fā)燒友網(wǎng)站提供《DM368視頻前端信號(hào)采集詳解.pdf》資料免費(fèi)下載
    發(fā)表于 09-29 10:58 ?0次下載
    DM368視頻前端<b class='flag-5'>信號(hào)</b>采集<b class='flag-5'>詳解</b>

    開(kāi)關(guān)和模擬的基本概念、特點(diǎn)及應(yīng)用

    開(kāi)關(guān)和模擬是電氣工程和自動(dòng)化控制領(lǐng)域中的兩個(gè)重要概念。開(kāi)關(guān)通常指二進(jìn)制信號(hào),即只有兩種狀態(tài):開(kāi)或關(guān),高或低,1或0。模擬
    的頭像 發(fā)表于 08-30 11:10 ?2009次閱讀

    熱控信號(hào)和保護(hù)裝置能否正常運(yùn)行

    熱控信號(hào)和保護(hù)裝置是確保電力系統(tǒng)安全、穩(wěn)定、經(jīng)濟(jì)運(yùn)行的重要手段。它們?cè)陔娏ο到y(tǒng)中起著至關(guān)重要的作用,能夠及時(shí)檢測(cè)和處理各種異常情況,防止設(shè)備損壞和系統(tǒng)故障。 一、熱控信號(hào)和保護(hù)裝置的基本概念
    的頭像 發(fā)表于 08-27 11:12 ?626次閱讀

    基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)的C++公共基礎(chǔ)類庫(kù)案例:Semaphore

    運(yùn)行如下命令: hb build -f 將鏡像燒錄到開(kāi)發(fā)板中。 5、運(yùn)行結(jié)果 5.1、無(wú)名信號(hào)量 運(yùn)行結(jié)果如下: # utils_noname_semaphore thread_0
    發(fā)表于 08-14 16:38

    PLC對(duì)模擬信號(hào)的處理過(guò)程及方法 詳解

    模擬信號(hào)是自動(dòng)化過(guò)程控制系統(tǒng)中最基本的過(guò)程信號(hào)(壓力、溫度、流量等)輸入形式。系統(tǒng)中的過(guò)程信號(hào)通過(guò)變送器,將這些檢測(cè)信號(hào)轉(zhuǎn)換為統(tǒng)一的電壓、
    的頭像 發(fā)表于 07-30 16:31 ?855次閱讀
    PLC對(duì)模擬<b class='flag-5'>量</b><b class='flag-5'>信號(hào)</b>的處理過(guò)程及方法 <b class='flag-5'>詳解</b>版

    傳感器的基本概念、工作原理及輸出類型

    傳感器是一種將物理或化學(xué)轉(zhuǎn)換為電信號(hào)的裝置,廣泛應(yīng)用于工業(yè)、農(nóng)業(yè)、醫(yī)療、環(huán)保等領(lǐng)域。傳感器的輸出可以是模擬或數(shù)字量,這取決于傳感器的類型和應(yīng)用場(chǎng)景。 一、傳感器的基本
    的頭像 發(fā)表于 07-25 09:34 ?4238次閱讀

    模擬信號(hào)和開(kāi)關(guān)信號(hào)的重要區(qū)別以及具體應(yīng)用

    。 ? ? ??但是對(duì)于一些剛?cè)腴T(mén)學(xué)習(xí)PLC和變頻器的師傅而言就不同了,對(duì)于開(kāi)關(guān)信號(hào)和模擬信號(hào)非常容易弄混亂,甚至分不清楚哪些設(shè)備是開(kāi)關(guān)
    的頭像 發(fā)表于 07-21 16:09 ?1011次閱讀
    模擬<b class='flag-5'>量</b><b class='flag-5'>信號(hào)</b>和開(kāi)關(guān)<b class='flag-5'>量</b><b class='flag-5'>信號(hào)</b>的重要區(qū)別以及具體應(yīng)用

    互斥鎖和自旋鎖的實(shí)現(xiàn)原理

    互斥鎖和自旋鎖是操作系統(tǒng)中常用的同步機(jī)制,用于控制對(duì)共享資源的訪問(wèn),以避免多個(gè)線程或進(jìn)程同時(shí)訪問(wèn)同一資源,從而引發(fā)數(shù)據(jù)不一致或競(jìng)爭(zhēng)條件等問(wèn)題。 互斥鎖(Mutex) 互斥鎖是一種基本的同步機(jī)制,用于
    的頭像 發(fā)表于 07-10 10:07 ?933次閱讀

    4到20ma模擬信號(hào)怎么測(cè)?及原理介紹

    模擬信號(hào)的測(cè)量方法、原理、特點(diǎn)以及注意事項(xiàng)。 ? ? ??一、4到20mA模擬信號(hào)的基本概念 ? ? ??1.1 4到20mA
    的頭像 發(fā)表于 06-23 08:38 ?7555次閱讀
    4到20ma模擬<b class='flag-5'>量</b><b class='flag-5'>信號(hào)</b>怎么測(cè)?及原理介紹

    4到20ma模擬信號(hào)怎么測(cè)

    的測(cè)量方法、原理、特點(diǎn)以及注意事項(xiàng)。 一、4到20mA模擬信號(hào)的基本概念 1.1 4到20mA信號(hào)的定義 4到20mA模擬
    的頭像 發(fā)表于 06-20 11:37 ?2799次閱讀

    星儀小課堂:開(kāi)關(guān)與模擬詳解

    在現(xiàn)場(chǎng)儀表使用中,開(kāi)關(guān)與模擬是使用最多的兩種輸入輸出方式。今天我們就用圖文結(jié)合的方式,詳細(xì)講解一下開(kāi)關(guān)與模擬的原理是怎樣的。開(kāi)關(guān)
    的頭像 發(fā)表于 06-18 09:47 ?972次閱讀
    星儀小課堂:開(kāi)關(guān)<b class='flag-5'>量</b>與模擬<b class='flag-5'>量</b><b class='flag-5'>詳解</b>