FreeRTOS 二值信号量

本文详细介绍了在FreeRTOS中,二值信号量的使用方式。任务Task1和Task2通过xSemaphoreTake尝试获取资源,若资源被对方占用则进入阻塞状态。在资源使用完毕后,通过xSemaphoreGive释放资源。当串口1接收到数据时,会触发中断服务程序,释放信号量,使得挂起的任务得以继续运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运行过程描述如下:
 任务 Task1 运行过程中调用函数 xSemaphoreTake 获取信号量资源,如果信号量没有被任务 Task2占用,Task1 将直接获取资源。如果信号量被 Task2 占用,任务 Task1 将由运行态转到阻塞状态,等待资源可用。一旦获取了资源并使用完毕后会通过函数 xSemaphoreGive 释放掉资源。
 任务 Task2 运行过程中调用函数 xSemaphoreTake 获取信号量资源,如果信号量没有被任务 Task1占用,Task2 将直接获取资源。如果信号量被 Task1 占用,任务 Task2 将由运行态转到阻塞状态,等待资源可用。一旦获取了资源并使用完毕后会通过函数 xSemaphoreGive 释放掉资源。

void get_adv_task(void *pvParameters)
{
static BaseType_t err=pdFALSE;
while(1)

{
err=1;
err=1;
printf(“run\r\n”);
if(BinarySemaphore!=NULL)
{
err=xSemaphoreTake(BinarySemaphore,portMAX_DELAY); //获取信号量
//err=xSemaphoreTake(BinarySemaphore,portMAX_DELAY); //获取信号量
if(err==pdTRUE) //获取信号量成功
{

				printf("命令为:\r\n");

			}
			else
			{
				printf("无效的命令,请重新输入!!\r\n");
			}

		}

    adcx=Get_Adc_Avera
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值