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

做旅游宣传哪个网站好赣州做网站设计找哪家

做旅游宣传哪个网站好,赣州做网站设计找哪家,wordpress去除谷歌字体,专业建站制作文章目录 基础知识创建信号量获取信号量释放信号量信号量 内部实现框图 基础知识 [FreeRTOS 基础知识] 信号量 概念 创建信号量 #define queueQUEUE_TYPE_BINARY_SEMAPHORE ( ( uint8_t ) 3U ) #define semSEMAPHORE_QUEUE_ITEM_LENGTH ( ( uint8_t ) 0U ) #define xSe… 文章目录 基础知识创建信号量获取信号量释放信号量信号量 内部实现框图 基础知识 [FreeRTOS 基础知识] 信号量 概念 创建信号量 #define queueQUEUE_TYPE_BINARY_SEMAPHORE ( ( uint8_t ) 3U ) #define semSEMAPHORE_QUEUE_ITEM_LENGTH ( ( uint8_t ) 0U ) #define xSemaphoreCreateBinary() xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE )根据上面的定义可知创建信号量本质就是创建队列。长度第一个参数为1大小第二个参数为0 QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType )- if( uxItemSize ( UBaseType_t ) 0 ) xQueueSizeInBytes ( size_t ) 0;- pxNewQueue ( Queue_t * ) pvPortMalloc( sizeof( Queue_t ) xQueueSizeInBytes ); // 动态分配大小只有一个Queue_t结构体大小获取信号量 通过队列获取信号量 #define xSemaphoreTake( xSemaphore, xBlockTime ) xQueueSemaphoreTake( ( xSemaphore ), ( xBlockTime ) )BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait )for( ;; ) {taskENTER_CRITICAL(); // 关中断{const UBaseType_t uxSemaphoreCount pxQueue-uxMessagesWaiting; // 获取当前信号量值if( uxSemaphoreCount ( UBaseType_t ) 0 ) // 信号量值大于0{traceQUEUE_RECEIVE( pxQueue );pxQueue-uxMessagesWaiting uxSemaphoreCount - ( UBaseType_t ) 1; // 信号量-1// 检查是否有其他任务阻塞等待信号量。if( listLIST_IS_EMPTY( ( pxQueue-xTasksWaitingToSend ) ) pdFALSE ){// 如果是解除阻塞最高优先级的任务。// 1、将最高阻塞任务从xTasksWaitingToSend链表中移除// 2、将最高阻塞任务从从DelayList移动到ReadyList链表if( xTaskRemoveFromEventList( ( pxQueue-xTasksWaitingToSend ) ) ! pdFALSE ){queueYIELD_IF_USING_PREEMPTION(); // 让出CPU使用权}else{mtCOVERAGE_TEST_MARKER();}}else{mtCOVERAGE_TEST_MARKER();}taskEXIT_CRITICAL(); //开中断return pdPASS; // 返回成功}else{if( xTicksToWait ( TickType_t ) 0 ) // 是否愿意等待{// 不愿意等待taskEXIT_CRITICAL(); // 打开中断traceQUEUE_RECEIVE_FAILED( pxQueue );return errQUEUE_EMPTY; // 返回队列空失败}else if( xEntryTimeSet pdFALSE ){// 信号量计数为0阻塞时间被指定所以配置超时结构准备阻塞。vTaskInternalSetTimeOutState( xTimeOut );xEntryTimeSet pdTRUE;}else{mtCOVERAGE_TEST_MARKER();}}}taskEXIT_CRITICAL();vTaskSuspendAll();prvLockQueue( pxQueue );if( xTaskCheckForTimeOut( xTimeOut, xTicksToWait ) pdFALSE ){if( prvIsQueueEmpty( pxQueue ) ! pdFALSE ){traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue );// 1、当前的任务加入到队列的xTasksWaitingToReceive链表中// 2、当前的任务从ReadyList移动到DelayListvTaskPlaceOnEventList( ( pxQueue-xTasksWaitingToReceive ), xTicksToWait );prvUnlockQueue( pxQueue );if( xTaskResumeAll() pdFALSE ){portYIELD_WITHIN_API();}else{mtCOVERAGE_TEST_MARKER();}} else{prvUnlockQueue( pxQueue );( void ) xTaskResumeAll();}}else{...}释放信号量 #define semGIVE_BLOCK_TIME ( ( TickType_t ) 0U ) #define xSemaphoreGive( xSemaphore ) xQueueGenericSend( ( QueueHandle_t ) ( xSemaphore ), NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK )BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition ) - for( ;; ){taskENTER_CRITICAL(); // 关中断 portDISABLE_INTERRUPTS();{if( ( pxQueue-uxMessagesWaiting pxQueue-uxLength ) || ( xCopyPosition queueOVERWRITE ) ) // 判断当前信号量是否超过队列信号量长度{ traceQUEUE_SEND( pxQueue );xYieldRequired prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );// 不会写数据但是会将 uxMessagesWaiting 1if( listLIST_IS_EMPTY( ( pxQueue-xTasksWaitingToReceive ) ) pdFALSE ) // 判断xTasksWaitingToReceive队列里是否有等待的任务{if( xTaskRemoveFromEventList( ( pxQueue-xTasksWaitingToReceive ) ) ! pdFALSE ) // 1、将要写的任务从xTasksWaitingToReceive移除2、将要写的任务从DelayList移动到ReadyList{queueYIELD_IF_USING_PREEMPTION(); //让出CPU使用权}else{mtCOVERAGE_TEST_MARKER();}} else if( xYieldRequired ! pdFALSE ){queueYIELD_IF_USING_PREEMPTION();}else{mtCOVERAGE_TEST_MARKER();}}taskEXIT_CRITICAL(); // 开中断return pdPASS; // 返回成功}else{if( xTicksToWait ( TickType_t ) 0 ){taskEXIT_CRITICAL();traceQUEUE_SEND_FAILED( pxQueue );return errQUEUE_FULL; // 返回队列已满}else if( xEntryTimeSet pdFALSE ){vTaskInternalSetTimeOutState( xTimeOut ); // 阻塞时间被指定所以配置超时结构。 xEntryTimeSet pdTRUE;}else{mtCOVERAGE_TEST_MARKER();}} } taskEXIT_CRITICAL(); // 开中断vTaskSuspendAll(); prvLockQueue( pxQueue );if( xTaskCheckForTimeOut( xTimeOut, xTicksToWait ) pdFALSE ) {if( prvIsQueueFull( pxQueue ) ! pdFALSE ){traceBLOCKING_ON_QUEUE_SEND( pxQueue );// 1、当前的任务加入到队列的xTasksWaitingToSend链表中// 2、当前的任务从ReadyList移动到DelayList vTaskPlaceOnEventList( ( pxQueue-xTasksWaitingToSend ), xTicksToWait );prvUnlockQueue( pxQueue );if( xTaskResumeAll() pdFALSE ){portYIELD_WITHIN_API();}}else{prvUnlockQueue( pxQueue );( void ) xTaskResumeAll();} } else {prvUnlockQueue( pxQueue );( void ) xTaskResumeAll();traceQUEUE_SEND_FAILED( pxQueue );return errQUEUE_FULL; } }信号量 内部实现框图
http://www.hkea.cn/news/14578896/

相关文章:

  • 营销型网站设计流程wordpress显示用户无效
  • 洛阳数码大厦做网站的在几楼wordpress tag列表页
  • 怎么做微商的微网站张店好的网站建设的公司
  • 高端营销型网站建设运河经济开发区建设局网站
  • 建站行业解决方案太原市网站建设网站
  • 免费建设淘客网站wordpress 4.0 谷歌
  • python编程网站东营确诊名单
  • 商店网站在线设计自媒体代运营
  • 网站查询平台阿玛尼手表官方网站查询正品
  • 淘宝网站怎么做的好网站开发经验教训
  • 如何压缩网站沈阳关键词网站排名
  • 重庆网站设计费用网站文字不能编辑器
  • 云指建站平台中阔浩潮建设工程有限公司网站
  • 哪个网站可以做鸟瞰图seo博客优化
  • 网站代码seo优化自己制作音乐的软件免费
  • 984网站建设项目网站展示模板免费下载
  • app网站维护株洲seo优化加盟
  • asp 网站建设教程模板下载网站织梦模板
  • 有什么网站可以做宣传图片旅游手机网站模板
  • 手机网站怎样做开发公司办出项目不动产证纪实
  • 微信网站怎么做下载附件建设门户网站需要多少钱
  • 维护网站费用浙江工信部网站备案查询
  • 江苏省建设协会网站首页网页设计图片链接跳转代码
  • dede网站地图手机版网站原理
  • 济南正规网站制作怎么选择网站里面的视频功能怎么做的
  • 网站seo需要用到哪些工具西安软件开发公司排行
  • 微商需要做网站吗微信公众平台 网站开发
  • 沭阳网站建设方案女生适合专业15个
  • ui设计在线网站做结婚视频储存网站
  • 券优惠网站如何做商业网站图片