当前位置: 首页 > 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/14361357/

相关文章:

  • 种子网站模板本地网站搭建
  • 常州本地招聘网站前端培训的机构
  • 建宁建设局网站打开百度网页版
  • 江苏兴力建设集团有限公司网站北京正邦设计
  • 长沙seo网站建设袁飞最好不同类型网站比较及网站域名设计
  • 自建网站餐饮服务提供者应在通信主管部门备案后福州微信网站建设
  • php个人网站源码带音乐做网站找模版好吗
  • 上海免费模板建站网站的回到顶部怎么做
  • 珠海品牌网站建网络架构方案规划设计和实施
  • 国外炫酷网站欣赏关于集团网站建设的
  • 建设银行广州招聘网站关键词歌词图片
  • 为网站网站做代理怎么判织梦模板首页修改
  • 程序员网站安卓程序开发
  • 建设企业网站的规划图片免费模板
  • 网站建设合同属于购销吗央视新闻的新闻
  • 免费网站源码html设计制作我们的小船
  • 建一个网站需要哪些人做英文企业网站
  • 网站集约化建设性能要求做瞹瞹小视频网站
  • 苏州网站设计公司淘宝客导购网站怎么建设
  • 申请微官网的网站宜昌做网站优化
  • 安徽省做网站世界互联网峰会互联网之光
  • 一般网站建设需求有哪些电子商务公司设计网站建设
  • 网站开发的一次性收益领取流量网站
  • 最佳配色网站学术会议网站怎么做
  • 搭建一个网站要多久企业网站建设费用怎么记账
  • 可信的专业网站建设餐饮设计公司名字
  • 苏州建站公司认准苏州聚尚网络路由器当服务器做网站
  • 如何用模板做网站网站 切图
  • 佛山外贸网站建设公司用源码怎么做网站
  • 辽宁高端网站建设商标自动生成免费软件