哪些公司做網(wǎng)站競價排名的優(yōu)缺點(diǎn)
一。信號量的概念與應(yīng)用
信號量定義
FreeRTOS信號量介紹
FreeRTOS信號量工作原理
1.信號量的定義
? ? ? ? 多任務(wù)環(huán)境下使用,用來協(xié)調(diào)多個任務(wù)正確合理使用臨界資源。
2.FreeRTOS信號量介紹
????????Semaphore包括Binary,Count,Mutex;
? ? ? ? Mutex包括RecursiveMutex,Mutex。
3.FreeRTOS信號量工作原理
? ? ? ? 任務(wù)1在運(yùn)行時,使用了一個臨界資源,他發(fā)送一個二值信號量同步信號,表示占用資源,任務(wù)2來運(yùn)行時,發(fā)現(xiàn)有任務(wù)占用資源(信號量同步信號),所以堵塞任務(wù),等待下資源的釋放。
二。二值信號量函數(shù)的應(yīng)用
1.功能需求
1、修改按鍵功能
2、當(dāng)按鍵按下觸發(fā)打印一次CPU利用率
3、使用二值信號量實現(xiàn)按鍵與任務(wù)間同步
2.API詳解
(1)xSemaphoreCreateBinary()創(chuàng)建二值信號量
(2)xSemaphoreGive()任務(wù)間釋放信號量
?(3)xSemaphoreGiveFromISR()任務(wù)間釋放信號量
?(4)xSemaphoreTake()任務(wù)間獲取信號量 semphr.h
?(5)xSemaphoreTakeFromISR()中斷獲取信號量
?3.任務(wù)實現(xiàn)
1.創(chuàng)建二值信號量
2.在任務(wù)中獲取信號量
3.在中斷中發(fā)送信號量
?3.1Cubemx創(chuàng)建工程(在上一個基礎(chǔ)上queue隊列)
(1)在FREERTOS中創(chuàng)建二值信號量
二值信號量在FREERTOS的初始化的時候就會創(chuàng)建(返回信號量的句柄)
3.2 步驟:
(1)把FREERTOS.c中的二值信號量聲明外接到GPIO.c中(GPIO.c中有按鍵按下的GPIO中斷處理)
#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "cmsis_os.h"extern osSemaphoreId CpuPrintBinarySemHandle;
(2)在GPIO.c中的按鍵中斷回調(diào)函數(shù)中加入任務(wù)釋放信號量函數(shù)?
xSemaphoreGiveFromISR(CpuPrintBinarySemHandle,NULL);
(3)FREERTOS.c中的串口輸出的主函數(shù)中
if(xSemaphoreTake(CpuPrintBinarySemHandle,portMAX_DELAY) == pdPASS){
結(jié)果
????????復(fù)位直接打印程序的cpu利用率,由于沒有運(yùn)行就輸出,所以只能打印printf,字符串沒有東西,按key3釋放信號量,這個時候主函數(shù)中接受到有信號量,所以再次運(yùn)行。
三。技術(shù)信號量函數(shù)的應(yīng)用
功能分析
API詳解
功能實現(xiàn)
1.功能分析
1、修改按鍵功能,模擬停車位出入功能
2、當(dāng)按鍵K3按下獲取車位
3、當(dāng)按鍵K4按下釋放車位
2.API講解
xSemaphoreCreateCounting()
?uxSemaphoreGetCount()
3.功能實現(xiàn)
1.按鍵k4初始化
2.創(chuàng)建技術(shù)信號量
3.k3按下獲取停車位
4.按下釋放停車位
1.cubemx創(chuàng)建工程
(1)Key4(PF11)初始配置,中斷配置
?(2)FREERTOS中使能以下后,才可以添加計數(shù)信號量
?(3)創(chuàng)建計數(shù)信號量(初始化為4)
?2.步驟:
(1)在FREERTOS.c中有設(shè)置的計數(shù)信號量,extern設(shè)置到GPIO.c中
extern osSemaphoreId KeyCountingSemHandle;
(2)GPIO.c的中斷回調(diào)函數(shù)中,Give為釋放信號量,Take為使用信號量,Key3為釋放,Key為使用。
《獲取》
《釋放》
?
//key3中
if(xSemaphoreTakeFromISR(KeyCountingSemHandle,NULL)==pdPASS){printf("Take success\n");
}else{printf("Take fail\n");
}
//key4中
if(xSemaphoreGiveFromISR(KeyCountingSemHandle,NULL)==pdPASS){printf("Give success\n");
}else{printf("Give fail\n");
}
結(jié)果:
按Key3為開走車,Key為停車
四。信號量實現(xiàn)原理
1.信號量創(chuàng)建刪除
?
2.信號量釋放
?
3.信號量獲取
?