外包公司 网站建设 深圳,国外做装饰画的网站,深圳php网站建设,html全屏网站一。信号量的概念与应用
信号量定义
FreeRTOS信号量介绍
FreeRTOS信号量工作原理
1.信号量的定义 多任务环境下使用#xff0c;用来协调多个任务正确合理使用临界资源。
2.FreeRTOS信号量介绍 Semaphore包括Binary#xff0c;Count#xff0c;Mutex#xff1b; Mutex包…一。信号量的概念与应用
信号量定义
FreeRTOS信号量介绍
FreeRTOS信号量工作原理
1.信号量的定义 多任务环境下使用用来协调多个任务正确合理使用临界资源。
2.FreeRTOS信号量介绍 Semaphore包括BinaryCountMutex Mutex包括RecursiveMutexMutex。 3.FreeRTOS信号量工作原理 任务1在运行时使用了一个临界资源他发送一个二值信号量同步信号表示占用资源任务2来运行时发现有任务占用资源信号量同步信号所以堵塞任务等待下资源的释放。 二。二值信号量函数的应用
1.功能需求 1、修改按键功能 2、当按键按下触发打印一次CPU利用率 3、使用二值信号量实现按键与任务间同步 2.API详解
1xSemaphoreCreateBinary()创建二值信号量 2xSemaphoreGive()任务间释放信号量 3xSemaphoreGiveFromISR()任务间释放信号量 4xSemaphoreTake()任务间获取信号量 semphr.h 5xSemaphoreTakeFromISR()中断获取信号量 3.任务实现 1.创建二值信号量 2.在任务中获取信号量 3.在中断中发送信号量 3.1Cubemx创建工程在上一个基础上queue队列
1在FREERTOS中创建二值信号量 二值信号量在FREERTOS的初始化的时候就会创建返回信号量的句柄 3.2 步骤
1把FREERTOS.c中的二值信号量声明外接到GPIO.c中GPIO.c中有按键按下的GPIO中断处理 #include FreeRTOS.h
#include task.h
#include main.h
#include cmsis_os.hextern osSemaphoreId CpuPrintBinarySemHandle;
2在GPIO.c中的按键中断回调函数中加入任务释放信号量函数 xSemaphoreGiveFromISR(CpuPrintBinarySemHandle,NULL);
3FREERTOS.c中的串口输出的主函数中 if(xSemaphoreTake(CpuPrintBinarySemHandle,portMAX_DELAY) pdPASS){
结果 复位直接打印程序的cpu利用率由于没有运行就输出所以只能打印printf字符串没有东西按key3释放信号量这个时候主函数中接受到有信号量所以再次运行。 三。技术信号量函数的应用
功能分析
API详解
功能实现
1.功能分析 1、修改按键功能模拟停车位出入功能 2、当按键K3按下获取车位 3、当按键K4按下释放车位 2.API讲解
xSemaphoreCreateCounting() uxSemaphoreGetCount() 3.功能实现 1.按键k4初始化 2.创建技术信号量 3.k3按下获取停车位 4.按下释放停车位 1.cubemx创建工程
1Key4PF11初始配置中断配置 2FREERTOS中使能以下后才可以添加计数信号量 3创建计数信号量初始化为4 2.步骤
1在FREERTOS.c中有设置的计数信号量extern设置到GPIO.c中 extern osSemaphoreId KeyCountingSemHandle;
2GPIO.c的中断回调函数中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);
}
结果 按Key3为开走车Key为停车 四。信号量实现原理
1.信号量创建删除 2.信号量释放 3.信号量获取