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

鲜花网站建设策划方案书电脑软件推广

鲜花网站建设策划方案书,电脑软件推广,四川城乡和住房建设厅官方网站,做视觉影像网站用什么软件系统两个Delay函数有两个延时函数vTaskDelay#xff1a;至少等待指定个数的Tick Interrupt才能变为就绪态xTaskDelayUtil#xff1a;等待到指定的绝对时刻#xff0c;才能变为就绪态个人感觉这两个延时函数就是#xff0c;比如一个我等3个小时#xff0c;一个是我等到下午3点的…两个Delay函数有两个延时函数vTaskDelay至少等待指定个数的Tick Interrupt才能变为就绪态xTaskDelayUtil等待到指定的绝对时刻才能变为就绪态个人感觉这两个延时函数就是比如一个我等3个小时一个是我等到下午3点的区别。两个函数的原型如下vTaskDelay:void vTaskDelay( const TickType_t xTicksToDelay ){BaseType_t xAlreadyYielded pdFALSE;/* A delay time of zero just forces a reschedule. */if( xTicksToDelay ( TickType_t ) 0U ){configASSERT( uxSchedulerSuspended 0 );vTaskSuspendAll();{traceTASK_DELAY();/* A task that is removed from the event list while the* scheduler is suspended will not get placed in the ready* list or removed from the blocked list until the scheduler* is resumed.** This task cannot be in an event list as it is the currently* executing task. */prvAddCurrentTaskToDelayedList( xTicksToDelay, pdFALSE );}xAlreadyYielded xTaskResumeAll();}else{mtCOVERAGE_TEST_MARKER();}/* Force a reschedule if xTaskResumeAll has not already done so, we may* have put ourselves to sleep. */if( xAlreadyYielded pdFALSE ){portYIELD_WITHIN_API();}else{mtCOVERAGE_TEST_MARKER();}} xTaskDelayUtil BaseType_t xTaskDelayUntil( TickType_t * const pxPreviousWakeTime,const TickType_t xTimeIncrement ){TickType_t xTimeToWake;BaseType_t xAlreadyYielded, xShouldDelay pdFALSE;configASSERT( pxPreviousWakeTime );configASSERT( ( xTimeIncrement 0U ) );configASSERT( uxSchedulerSuspended 0 );vTaskSuspendAll();{/* Minor optimisation. The tick count cannot change in this* block. */const TickType_t xConstTickCount xTickCount;/* Generate the tick time at which the task wants to wake. */xTimeToWake *pxPreviousWakeTime xTimeIncrement;if( xConstTickCount *pxPreviousWakeTime ){/* The tick count has overflowed since this function was* lasted called. In this case the only time we should ever* actually delay is if the wake time has also overflowed,* and the wake time is greater than the tick time. When this* is the case it is as if neither time had overflowed. */if( ( xTimeToWake *pxPreviousWakeTime ) ( xTimeToWake xConstTickCount ) ){xShouldDelay pdTRUE;}else{mtCOVERAGE_TEST_MARKER();}}else{/* The tick time has not overflowed. In this case we will* delay if either the wake time has overflowed, and/or the* tick time is less than the wake time. */if( ( xTimeToWake *pxPreviousWakeTime ) || ( xTimeToWake xConstTickCount ) ){xShouldDelay pdTRUE;}else{mtCOVERAGE_TEST_MARKER();}}/* Update the wake time ready for the next call. */*pxPreviousWakeTime xTimeToWake;if( xShouldDelay ! pdFALSE ){traceTASK_DELAY_UNTIL( xTimeToWake );/* prvAddCurrentTaskToDelayedList() needs the block time, not* the time to wake, so subtract the current tick count. */prvAddCurrentTaskToDelayedList( xTimeToWake - xConstTickCount, pdFALSE );}else{mtCOVERAGE_TEST_MARKER();}}xAlreadyYielded xTaskResumeAll();/* Force a reschedule if xTaskResumeAll has not already done so, we may* have put ourselves to sleep. */if( xAlreadyYielded pdFALSE ){portYIELD_WITHIN_API();}else{mtCOVERAGE_TEST_MARKER();}return xShouldDelay;} 下面是图示使用vTaskDelay(n)时进入退出vTaskDelay的时间间隔至少是n个Tick中断使用xTaskDelayUtil(Pre,n)时前后两次退出xTaskDelayUntil的时间至少是n个Tick中断退出xTaskDelayUntil时任务就进入就绪态一般都能得到执行机会所以可以使用xTaskDelayUntil来让任务周期性的运行实验证明程序创建2个任务Task1高优先级设置变量flag为1然后调用vTaskDelay(xDelay50ms)或vTaskDelayUntil(xLastWakeTime,xDelay50ms)Task2:低优先级设置变量flag0main函数代码如下int main(void) {prvSetupHardware();/*Task1的优先级更高Task1先执行*/xTaskCreate(vTask1,Task1,1000,NULL,2,NULL);xTaskCreate(vTask2,Task2,1000,NULL,1,NULL);/*启动调度器*/vTaskStartScheduler();/*如果程序运行到这里就表示出错了一般是内存不足*/return 0;}Task1的代码中使用条件开关来选择Delay函数把#if 1 改为 #if 0 就可以使用vTaskDelayUntil代码如下void vTask1(void *pvParameters) {const TickType_t xDelay50ms pdMS_TO_TICKS(50UL);TickType_t xLastWakeTime;int i;/*获得当前的Tick Count*/xLastWakeTime xTaskGetTickCount();for(;;){flag 1;/*故意加入多个循环让程序运行时间长一点*/for(i0;i5;i)printf(Task1 is running\r\n); #if 1vTaskDelay(xDelay50ms); #else vTaskDelayUntil(PreWakeTime,xDelay50ms);} }使用MDK的逻辑分析仪可以观察flag变量的bit波形如下flag为1时表示Task1正在运行flag为0时表示Task2正在运行也就是Task1处于阻塞状态vTaskDelay指定的是阻塞时间vTaskDelayUntil指定的是任务执行的间隔周期
http://www.dnsts.com.cn/news/261791.html

相关文章:

  • 上海公司网站建设方案网站开发与制作论文开题
  • 浏览器打开网站设计衣服图制作软件
  • 如何做后端网站管理西安网站群建设
  • 网站优化比较好用的软件龙华做网站
  • 如何在自己电脑上建设网站电子商务网站建设需求表
  • 如何降低网站跳出率大丰做网站价格
  • 如何用腾讯云主机做网站网站建设 宁夏
  • 网站服务器安全部署如何更改网站内链
  • 湘潭网站设计外包服务筛选选功能形网站建设
  • 驻马店网站开发公司区总工会加强网站意识形态建设
  • 太白县住房和城乡建设局网站横沥网站仿做
  • 网站由哪三部分组成怎么做和美团一样的网站
  • 那些外贸网站个人可以做WordPress二级目录404
  • 开源免费建站程序用的最多的电子商务和网络营销哪个好
  • 郑州大型网站制作wordpress中文分类问题
  • 如何做好网站推广工作一键生成网站的软件
  • 多少钱用英语怎么说江苏网站关键词优化优化
  • 蜘蛛爬网站推广网站的方法有哪些
  • 建网站制作网站开发流程记住吧
  • 外贸建站效果做网站时的注册权起到什么作用
  • 深圳有哪些网站是做餐饮沙龙的网站建设多少钱裙
  • 电子政务门户网站建设代码cfensi.wordpress
  • 怎样更新网站文章上海网优化seo公司
  • 高新营销型网站建设公司怎么把网站源码上传到空间根目录视频
  • 福州网站建设策划网站首页建设图文教程
  • 好看的食品网站济宁创新网络运营有限公司
  • 利用小偷程序做网站大学 生免费商业网站设计
  • 福建福州罗源建设局网站网站空间租用和自己搭建服务器
  • 哪些网站做财金的好wordpress连续id
  • 用瀑布流做的美食网站wordpress主机cdn