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

用fullpage做的网站网站建设要钱吗

用fullpage做的网站,网站建设要钱吗,怎么申请自己公司的网址,专业微网站建设公司哪家好递归信号量 一、概述 互斥量的使用比较单一,因为它是信号量的一种,并且它是以锁的形式存在。在初始化的时候,互斥量处于开锁的状态,而被任务持有的时候则立刻转为闭锁的状态。 递归类型的互斥量可以被拥有者重复获取。拥有互斥量…

递归信号量

一、概述

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

递归类型的互斥量可以被拥有者重复获取。拥有互斥量的任务必须调用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://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://00000000.tfpbm.cn
http://www.dtcms.com/wzjs/602793.html

相关文章:

  • 南昌网站建设基本流程网站前台显示数据库指定分类怎么做php
  • 如何安装网站模板文件湖南网站建设公司速来磐石网络
  • 郑州企业网站排名上海网站建设设计公司哪家好
  • 网站h1标签用在哪里wordpress主导航菜单
  • 网站图片漂浮代码烟台网站建设找企汇互联专业
  • 购物网站建设的意义与目的遵义做百度网站一年多少钱
  • 做电影下载网站赚钱郑州建设信息网 首页
  • 中国做健身补剂的网站广西建设工程招标网
  • 大连网站搜索排名搭建网站需要什么软件
  • 徐州企业网站推广局域网端口映射做网站
  • 腾讯云cdn配置wordpressseo排名推广
  • 建设网站的企业专业服务百度助手官网
  • 生鲜电商网站建设微信推广联盟
  • 搜索引擎排行榜前十名做网站排名优化是怎么回事
  • 可以挣钱的设计网站深圳建网站需要多少钱
  • 城市建设和房屋管理部门网站网络推广运营是什么
  • 网站横幅怎么制作教程东莞互联网大公司
  • 网站建设营销排名方案打扑克软件直播app开发
  • 网站开发需要多少钱手机网页设计公司
  • 可以做图片视频的网站网页制作基础教程例子ppt
  • 搜索设置 网站网络营销应具备的技能
  • 网站如何生成静态页面网络营销案例ppt模板
  • 一站式做网站设计企业网站的建立之前必须首先确定
  • 做盗版音乐网站培训机构前端开发
  • 成都网站建设团队计算机网站设计
  • 云服务器怎么上传网站wordpress 分类小工具
  • 网站建设捌金手指专业1wordpress的网站国内网
  • 做网站微信群动漫制作专业学校排名
  • 理财网站模板免费下载小程序code
  • 从事网站开发需要什么网站建设进度计划