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

商品网站怎么做google优化排名

商品网站怎么做,google优化排名,欧美风的网站设计,网站头部图片如何做软件定时器 在FreeRTOS中可以设置无数个软件定时器#xff0c;都是基于系统滴答中断。 使用软件定时器需要指定时间#xff1a;启动定时器和运行回调函数。启动定时器和运行回调函数的间隔为定时器的周期。 使用软件定时器需要指定类型#xff1a;一次性#xff08;回调函数… 软件定时器 在FreeRTOS中可以设置无数个软件定时器都是基于系统滴答中断。 使用软件定时器需要指定时间启动定时器和运行回调函数。启动定时器和运行回调函数的间隔为定时器的周期。 使用软件定时器需要指定类型一次性回调函数只被调用一次可手动再次启动或自动加载回调函数间歇调用。 使用软件定时器需要指定事件指定回调函数。 守护任务 FreeRTOS中有一个Tick中断软件定时器基于Tick来运行。定时器函数一般在中断里执行如在中断中判断定时器是否超时如果超时就调用回调函数。 但FreeRTOS是RTOS不允许在内核、中断中执行不确定的代码如果定时器函数很耗时会影响整个系统。所以FreeRTOS中不在Tick中断中执行定时器函数。 而是在RTOS Damemon TaskRTOS守护任务里执行。当FreeRTOS配置项configUSE_TIMERS被设置为1在启动调度器时会自动创建RTOS守护任务。 我们编写的任务函数要使用定时器时是通过定时器命令队列timer command queue和守护任务交互。 守护任务的优先级为configTIMER_TASK_PRIORITY定时器命令队列长度为configTIMER_QUEUE_LENGTH。 当守护任务是当前优先级最高的就绪态任务时它就可以运行。它的工作有两类         处理命令从命令队列里取出命令、处理。         执行定时器的回调函数。 能否及时处理定时器的命令、能否及时执行定时器的回调函数严重依赖于守护任务的优先级。 /* 定时器的回调函数 */ void ATimerCallback( TimerHandle_t xTimer ); 定时器的回调函数是在守护任务中被调用的守护任务不是专为某个定时器服务的它还要处理其他定时器。所以定时器的回调函数不能影响其他任务         回调函数要尽快执行不能进入阻塞状态。         不用调用会导致阻塞的API函数如vTaskDelay()。         可以调用xQueueReceive()等函数但是超时时间要设为0不阻塞。 创建定时器 TimerHandle_t xTimerCreate( const char * const pcTimerName, // 定时器名字const TickType_t xTimerPeriodInTicks, // 定时器周期, 以Tick为单位const UBaseType_t uxAutoReload, // 定时器是否自动重装载, pdTRUE表示自动加载, pdFALSE表示一次性void * const pvTimerID, // 回调函数可以使用此参数, 比如分辨是哪个定时器TimerCallbackFunction_t pxCallbackFunction ); // 回调函数 /* 返回值: 成功则返回TimerHandle_t, 否则返回NULL */TimerHandle_t xTimerCreateStatic( const char * const pcTimerName, // 定时器名字TickType_t xTimerPeriodInTicks, // 定时器周期, 以Tick为单位UBaseType_t uxAutoReload, // 定时器是否自动重装载, pdTRUE表示自动加载, pdFALSE表示一次性void * pvTimerID, // 回调函数可以使用此参数, 比如分辨是哪个定时器TimerCallbackFunction_t pxCallbackFunction, // 回调函数StaticTimer_t *pxTimerBuffer ); // 传入一个StaticTimer_t结构体, 将在结构体构造定时器 /* 返回值: 成功则返回TimerHandle_t, 否则返回NULL */void ATimerCallback( TimerHandle_t xTimer ); typedef void (* TimerCallbackFunction_t)( TimerHandle_t xTimer ); 删除定时器 动态分配的定时器不再需要时可以删除以回收内存。 /* * xTimer: 要删除哪个定时器* xTicksToWait: 超时时间* 返回值: pdFAIL表示删除命令在指定超时时间内无法写入队列* pdPASS表示成功 */ BaseType_t xTimerDelete( TimerHandle_t xTimer, TickType_t xTicksToWait ); 定时器的很多API函数都是通过发送命令到命令队列由守护任务来实现。如果队列满了命令就无法立即写入队列需要指定一个超时时间。 启动定时器 启动定时器就是设置它的状态为运行态。 xTicksToWait不是定时器超时时间也不是定时器周期。 如果定时器已经被启动但它的回调函数还没有被执行时再次执行xTimerStart()函数相当于执行xTimerReset()函数重新设定它的启动时间。 /* * xTimer: 哪个定时器* xTicksToWait: 超时时间* 返回值: pdFAIL表示启动命令在指定超时时间内无法写入队列* pdPASS表示成功*/ BaseType_t xTimerStart( TimerHandle_t xTimer, TickType_t xTicksToWait );/* * xTimer: 哪个定时器* pxHigherPriorityTaskWoken: 向队列发出命令使得守护任务被唤醒如果守护任务的优先级比当前任务的高则*pxHigherPriorityTaskWoken pdTRUE表示需要进行任务调度* 返回值: pdFAIL表示启动命令无法写入队列* pdPASS表示成功*/ BaseType_t xTimerStartFromISR( TimerHandle_t xTimer, BaseType_t *pxHigherPriorityTaskWoken ); 停止定时器 启动定时器就是设置它的状态为睡眠态让它无法运行。 /* * xTimer: 哪个定时器* xTicksToWait: 超时时间* 返回值: pdFAIL表示停止命令在指定超时时间内无法写入队列* pdPASS表示成功*/ BaseType_t xTimerStop( TimerHandle_t xTimer, TickType_t xTicksToWait );/* * xTimer: 哪个定时器* pxHigherPriorityTaskWoken: 向队列发出命令使得守护任务被唤醒如果守护任务的优先级比当前任务的高,* 则*pxHigherPriorityTaskWoken pdTRUE表示需要进行任务调度* 返回值: pdFAIL表示停止命令无法写入队列* pdPASS表示成功*/ BaseType_t xTimerStopFromISR( TimerHandle_t xTimer, BaseType_t *pxHigherPriorityTaskWoken ); 复位定时器 使用xTimerReset()函数可以让定时器的状态从睡眠态转换为运行态相当于使用xTimerStart()函数。 如果定时器已经处于运行态使用xTimerReset()函数相当于重新确定超时时间。 /* * xTimer: 哪个定时器* xTicksToWait: 超时时间* 返回值: pdFAIL表示复位命令在指定超时时间内无法写入队列* pdPASS表示成功*/ BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait );/* * xTimer: 哪个定时器* pxHigherPriorityTaskWoken: 向队列发出命令使得守护任务被唤醒如果守护任务的优先级比当前任务的高* 则*pxHigherPriorityTaskWoken pdTRUE表示需要进行任务调度* 返回值: pdFAIL表示停止命令无法写入队列* pdPASS表示成功*/ BaseType_t xTimerResetFromISR( TimerHandle_t xTimer, BaseType_t *pxHigherPriorityTaskWoken ); 修改定时器周期 使用xTimerChangePeriod()函数除了能修改定时器周期外还可以让定时器的状态从睡眠态转换为运行态。 修改定时器周期时会使用新的周期重新计算它的超时时间。 /* 返回值: pdFAIL表示修改周期命令在指定超时时间内无法写入队列* pdPASS表示成功*/ BaseType_t xTimerChangePeriod( TimerHandle_t xTimer, /* xTimer: 哪个定时器 */TickType_t xNewPeriod, /* xNewPeriod: 新周期 */TickType_t xTicksToWait ); /* xTicksToWait: 超时时间, 命令写入队列的超时时间 *//* pxHigherPriorityTaskWoken: 向队列发出命令使得守护任务被唤醒如果守护任务的优先级比当前任务的高,* 则*pxHigherPriorityTaskWoken pdTRUE表示需要进行任务调度* 返回值: pdFAIL表示修改周期命令在指定超时时间内内无法写入队列* pdPASS表示成功*/ BaseType_t xTimerChangePeriodFromISR( TimerHandle_t xTimer, /* xTimer: 哪个定时器 */TickType_t xNewPeriod, /* xNewPeriod: 新周期 */BaseType_t *pxHigherPriorityTaskWoken ); 定时器ID typedef struct tmrTimerControl {const char *pcTimerName;ListItem_t xTimerListItem;TickType_t xTimerPeriodInTicks;void *pvTimerID; // 定时器IDTimerCallbackFunction_t pxCallbackFunction; #if ( configUSE_TRACE_FACILITY 1 )UBaseType_t uxTimerNumber; #endifuint8 t ucStatus; } xTIMER; 怎么使用定时器ID完全由程序来决定         可以用来标记定时器表示自己是什么定时器         可以用来保存参数供回调函数使用 它的初始值在创建定时器时由xTimerCreate()函数传入后续可以使用这些函数来操作         更新ID使用vTimerSetTimerID()函数         查询ID使用pvTimerGetTimerID()函数 这两个函数不涉及命令队列都是直接操作定时器结构体的。 /* * xTimer: 哪个定时器* 返回值: 定时器的ID*/ void *pvTimerGetTimerID( TimerHandle_t xTimer );/* * xTimer: 哪个定时器* pvNewID: 新ID*/ void vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ); 应用场景一般使用 应用场景消除抖动
http://www.sadfv.cn/news/11381/

相关文章:

  • 四川网站建设案例单招网传奇霸业官网下载
  • 网站建设情况调查表wordpress加授权
  • 在线设计平台源码宁波seo推广开发
  • 网站开发 软件开发济南网站建设-中国互联
  • 静态网站开发实验报告做招标投标网站如何
  • 公司网站手机版模板网站开发工具和平台
  • 跑胡子网站开发祥云县住房和城乡建设局网站
  • 百度收录的网站结构做什么样的网站
  • 网站没有服务器可以吗黄骅市官方网站
  • 无锡网站建设价格费用网站中的搜索框怎么做
  • 网站构建的一般流程是什么三网合一网站怎么做
  • 做静态网站的步骤做网站公司需要什么职位
  • 团购网站开发的可行性分析工业设计网站哪个最好
  • 网站建设公司怎么办做网站的公司简介
  • seo网站建设是什么意思php自适应网站开发
  • 文化建设设计网站为什么做的网站有的有弹窗有的没有
  • ftp网站备份自己做免费的网站吗
  • 工程建设网站策划方案云浮市哪有做网站的
  • 广州机械网站建设360如何做免费的网站
  • 北京做网站的大公司有哪些wordpress整站备份插件
  • 自助建设网站网站设计 手写
  • 自己做的网站如何上传山东省住房和城乡建设厅领导名单
  • 手机网站制作服务机构网站与网页的区别.
  • 网站用的服务器是什么互联网软件外包
  • 制作网站能赚钱吗建设银行网网站打不开
  • 网站建设企业谁家好个人中心页面设计html
  • 昆山快速建设网站方案如何快速建网站
  • 做的网站.如何在局域网内访问网站大全软件
  • 国外做家纺的网站山西省网站建设备案表
  • 天猫店铺申请条件及费用seo查询什么意思