当前位置: 首页 > wzjs >正文

用fullpage做的网站河南核酸检测vip

用fullpage做的网站,河南核酸检测vip,网页打包成小程序,石家庄论坛建站模板递归信号量 一、概述 互斥量的使用比较单一,因为它是信号量的一种,并且它是以锁的形式存在。在初始化的时候,互斥量处于开锁的状态,而被任务持有的时候则立刻转为闭锁的状态。 递归类型的互斥量可以被拥有者重复获取。拥有互斥量…

递归信号量

一、概述

互斥量的使用比较单一,因为它是信号量的一种,并且它是以锁的形式存在。在初始化的时候,互斥量处于开锁的状态,而被任务持有的时候则立刻转为闭锁的状态。

递归类型的互斥量可以被拥有者重复获取。拥有互斥量的任务必须调用API函数xSemaphoreGiveRecursive()将拥有的递归互斥量全部释放后,该信号量才真正被释放。比如,一个任务成功获取同一个互斥量5次,那么这个任务要将这个互斥量释放5次之后,其它任务才能获取到它。递归互斥信号量,其实就是互斥信号量里面嵌套互斥信号量,示例如下:

static void vTaskMsgPro(void *pvParameters){TickType_t xLastWakeTime;const TickType_t xFrequency = 1500;/* 获取当前的系统时间 */xLastWakeTime = xTaskGetTickCount();while(1){/* 递归互斥信号量,其实就是互斥信号量里面嵌套互斥信号量 */xSemaphoreTakeRecursive(xRecursiveMutex, portMAX_DELAY);{/* -------------------------------------- *///假如这里是被保护的资源,第1层被保护的资源,用户可以在这里添加被保护资源/* ---------------------------------------------------------------------------- */printf("任务vTaskMsgPro在运行,第1层被保护的资源,用户可以在这里添加被保护资源\r\n");/* 第1层被保护的资源里面嵌套被保护的资源 */xSemaphoreTakeRecursive(xRecursiveMutex, portMAX_DELAY);{/* ------------------------------------------------------------------------ *///假如这里是被保护的资源,第2层被保护的资源,用户可以在这里添加被保护资源/* ------------------------------------------------------------------------ */printf("任务vTaskMsgPro在运行,第2层被保护的资源,用户可以在这里添加被保护资源\r\n");/* 第2层被保护的资源里面嵌套被保护的资源 */xSemaphoreTakeRecursive(xRecursiveMutex, portMAX_DELAY);{printf("任务vTaskMsgPro在运行,第3层被保护的资源,用户可以在这里添加被保护资源\r\n");}xSemaphoreGiveRecursive(xRecursiveMutex);}xSemaphoreGiveRecursive(xRecursiveMutex);    }xSemaphoreGiveRecursive(xRecursiveMutex);/* vTaskDelayUntil是绝对延迟,vTaskDelay是相对延迟。*/vTaskDelayUntil(&xLastWakeTime, xFrequency);}}

二、配置

使能递归互斥量,详细文件在FreeRTOS.h。

文件路径:FreeRTOS.h

#ifndef configUSE_RECURSIVE_MUTEXES#define configUSE_RECURSIVE_MUTEXES 1#endif

三、函数接口

1.创建递归互斥量

#if((configSUPPORT_DYNAMIC_ALLOCATION==1) && (configUSE_RECURSIVE_MUTEXES ==1))#define xSemaphoreCreateRecursiveMutex() xQueueCreateMutex( queueQUEUE_TYPE_RECURSIVE_MUTEX )#endif

参数:无

返回值:

如果创建成功则返回一个递归互斥量句柄,用于访问创建的递归互斥量。如果创建不成功则返回 NULL。

2.获取递归互斥量

#if( configUSE_RECURSIVE_MUTEXES == 1 )#define xSemaphoreTakeRecursive( xMutex, xBlockTime )xQueueTakeMutexRecursive( ( xMutex ), ( xBlockTime ) )#endif

参数:

  1. tick(即系统节拍周期)。如果

宏 INCLUDE_vTaskSuspend 定义为 1 且形参 xTicksToWait 设置为portMAX_DELAY ,则任务将一直阻塞在该递归互斥量上(即没有超时时间)。

返回值:

获取成功则返回 pdTRUE,在超时之前没有获取成功则返回 errQUEUE_EMPTY。

3.释放递归互斥量

#if( configUSE_RECURSIVE_MUTEXES == 1 )#define xSemaphoreGiveRecursive( xMutex ) \xQueueGiveMutexRecursive( ( xMutex ) )#endif

参数:

返回值:

成功,pdPASS

失败,pdFAIL

四、示例代码

1.freertos.cstatic void app_task1(void* pvParameters){for(;;){//获取递归互斥信号量xSemaphoreTakeRecursive(MutexSemaphore, portMAX_DELAY);{printf("app_task1 is running 1...\r\n");//获取递归互斥信号量xSemaphoreTakeRecursive(MutexSemaphore, portMAX_DELAY);{printf("app_task1 is running 2...\r\n");//获取递归互斥信号量xSemaphoreTakeRecursive(MutexSemaphore, portMAX_DELAY);{printf("app_task1 is running 3...\r\n");}//释放递归互斥信号量xSemaphoreGiveRecursive(MutexSemaphore); }//释放递归互斥信号量  xSemaphoreGiveRecursive(MutexSemaphore);  }  //释放递归互斥信号量xSemaphoreGiveRecursive(MutexSemaphore);  vTaskDelay(300);  }static void app_task2(void* pvParameters){for(;;){//获取递归互斥信号量xSemaphoreTakeRecursive(MutexSemaphore, portMAX_DELAY);{printf("app_task2 is running 1...\r\n");//获取递归互斥信号量xSemaphoreTakeRecursive(MutexSemaphore, portMAX_DELAY);{printf("app_task2 is running 2...\r\n");//获取递归互斥信号量xSemaphoreTakeRecursive(MutexSemaphore, portMAX_DELAY);{printf("app_task2 is running 3...\r\n");}//释放递归互斥信号量xSemaphoreGiveRecursive(MutexSemaphore); }//释放递归互斥信号量  xSemaphoreGiveRecursive(MutexSemaphore);  }  //释放递归互斥信号量xSemaphoreGiveRecursive(MutexSemaphore);  vTaskDelay(200);}

演示


文章转载自:

http://12EETIsd.Lwdzt.cn
http://Iwvm8BMq.Lwdzt.cn
http://IonxR7cl.Lwdzt.cn
http://6lfmPpI0.Lwdzt.cn
http://x9EPoZlL.Lwdzt.cn
http://Uw1xRtnc.Lwdzt.cn
http://U8ZtQ6Th.Lwdzt.cn
http://Y3bkCQcE.Lwdzt.cn
http://4CPTkPoX.Lwdzt.cn
http://NafPNnxD.Lwdzt.cn
http://RnLvUPGI.Lwdzt.cn
http://5xo1MwaQ.Lwdzt.cn
http://EfqxV4m8.Lwdzt.cn
http://rjuaxXFe.Lwdzt.cn
http://3Hn7z0cB.Lwdzt.cn
http://kyhSOuNr.Lwdzt.cn
http://FuQYbnK1.Lwdzt.cn
http://JXimT8BI.Lwdzt.cn
http://HGuAAWr6.Lwdzt.cn
http://boRA45HG.Lwdzt.cn
http://FhAsfs5x.Lwdzt.cn
http://EXMmtnxL.Lwdzt.cn
http://EDZ8FJos.Lwdzt.cn
http://fratT9Wc.Lwdzt.cn
http://w1ivGor5.Lwdzt.cn
http://VFVJuGxF.Lwdzt.cn
http://iyfF5gF1.Lwdzt.cn
http://jPhWsvup.Lwdzt.cn
http://LPrf9Jjy.Lwdzt.cn
http://y7rJP56w.Lwdzt.cn
http://www.dtcms.com/wzjs/764196.html

相关文章:

  • 家居网站建设营销推广网站推广公司运营模式
  • 网站栅格新乡平原新区建设局网站
  • 国外网站建设现状wordpress积分代码
  • 广西两学一做网站深圳提倡居家办公
  • 如何模板建站承接php网站建设
  • 专业网站建设网站设计软件如何开发制作
  • 网站建设中手机版中国建设工程造价网
  • 电信网站备案郑州定制网站建设
  • 门户网站开源win主机wordpress
  • 网页制作与网站建设答案教师网络培训
  • 微网站地图定位wordpress怎么多用户
  • 用什么软件做公司网站免费纯ftp空间
  • 建一个网站大概多少钱天水网站建设公司
  • 专门下载工程建设标准的网站卧龙区建网站
  • 绍兴模板建站代理网站开发用什么框架合适
  • 怎么用自己的主机做网站服务器吗科技 网站 推荐
  • 运城市住房和城乡建设部网站网站引导页设计
  • 公司网站怎么做备案信息三元里网站建设
  • 网站建设进度表模板下载给公司做门户网站 可以用凡客吗
  • qq刷网站空间本地计算机做网站服务器
  • 重庆建设安全员信息网站提供网站建设框架
  • 天津网站开发公司请列出页面上影响网站排名的因素
  • 做商城网站需要什么wordpress自适应手机
  • 网站建设与管理工作内容活动策划方案详细模板
  • 网站备案负责人照片免费申请商家收款码
  • 网站建设公司的服务特点兴义建设局网站
  • 极速建站系统金华网站建设
  • 做我的世界缩略图的网站行业网站开发方案
  • 极品wordpress素材教程网站百度无广告搜索引擎
  • 网站开发的两种模式wordpress带前端积分系统主题