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

自己做网站用php最快么宁波seo网络推广公司排名

自己做网站用php最快么,宁波seo网络推广公司排名,咸宁做网站哪家好,简书采集微信发布到wordpress目录 什么是定时器? 软件定时器优缺点 软件定时器原理 软件定时器相关配置 单次定时器和周期定时器 软件定时器相关 API 函数 1. 创建软件定时器 2. 开启软件定时器 3. 停止软件定时器 4. 复位软件定时器 5. 更改软件定时器定时时间 实操 cubeMX配置 …

目录

什么是定时器?

软件定时器优缺点

软件定时器原理

软件定时器相关配置

单次定时器和周期定时器

软件定时器相关 API 函数

1. 创建软件定时器

2. 开启软件定时器

3. 停止软件定时器

4. 复位软件定时器

5. 更改软件定时器定时时间

实操

cubeMX配置

代码实现 


什么是定时器?

简单可以理解为闹钟,到达指定一段时间后,就会响铃。
STM32 芯片自带硬件定时器,精度较高,达到定时时间后会触发中断,也可以生成 PWM 、输入
捕获、输出比较,等等,功能强大,但是由于硬件的限制,个数有限。
软件定时器也可以实现定时功能,达到定时时间后可调用回调函数,可以在回调函数里处理信
息。

软件定时器优缺点

优点:
1. 简单、成本低;
2. 只要内存足够,可创建多个;
缺点:
精度较低,容易受中断影响。在大多数情况下够用,但对于精度要求比较高的场合不建议使用。

软件定时器原理

定时器是一个可选的、不属于 FreeRTOS 内核的功能,它是由定时器服务任务来提供的。
在调用函数 vTaskStartScheduler() 开启任务调度器的时候,会创建一个用于管理软件定时器的任
务,这个任务就叫做软件定时器服务任务。
1. 负责软件定时器超时的逻辑判断
2. 调用超时软件定时器的超时回调函数
3. 处理软件定时器命令队列
FreeRTOS 提供了很多定时器有关的 API 函数,这些 API 函数大多都使用 FreeRTOS 的队列发送命令给
定时器服务任务。 这个队列叫做定时器命令队列 。定时器命令队列是提供给 FreeRTOS 的软件定时
器使用的, 用户不能直接访问

 

软件定时器相关配置

软件定时器有一个定时器服务任务和定时器命令队列,这两个东西肯定是要配置的,相关的配置
也是放到文件 FreeRTOSConfig.h 中的,涉及到的配置如下:
1 configUSE_TIMERS
如果要使用软件定时器的话宏 configUSE_TIMERS 一定要设置为 1 ,当设置为 1 的话定时器服务任务就会在启动FreeRTOS 调度器的时候自动创建。
2 configTIMER_TASK_PRIORITY
设置软件定时器服务任务的任务优先级,可以为 0~(configMAX_PRIORITIES-1) 。优先级一定要根
据实际的应用要求来设置。如果定时器服务任务的优先级设置的高的话,定时器命令队列中的命 令和定时器回调函数就会及时的得到处理。
3 configTIMER_QUEUE_LENGTH
此宏用来设置定时器命令队列的队列长度。
4 configTIMER_TASK_STACK_DEPTH
此宏用来设置定时器服务任务的任务堆栈大小。

单次定时器和周期定时器

单次定时器: 只超时一次,调用一次回调函数。可手动再开启定时器;
周期定时器: 多次超时,多次调用回调函数。

软件定时器相关 API 函数

函数
描述
xTimerCreate()
动态方式创建软件定时
xTimerCreateStatic()
静态方式创建软件定时器
xTimerStart()
开启软件定时器定时
xTimerStop()
停止软件定时器定时
xTimerReset()
复位软件定时器定时
xTimerChangePeriod()
更改软件定时器的定时超时时间
xTimerStartFromISR()
在中断中开启软件定时器定时
xTimerStopFromISR()
在中断中停止软件定时器定时
xTimerResetFromISR()
在中断中复位软件定时器定时
xTimerChangePeriodFromISR()
在中断中更改定时超时时间

1. 创建软件定时器

TimerHandle_t xTimerCreate
( const char * const pcTimerName ,
const TickType_t xTimerPeriod ,
const UBaseType_t uxAutoReload ,
void * const pvTimerID ,
TimerCallbackFunction_t pxCallbackFunction );
参数:
pcTimerName :软件定时器名称 xTimerPeriodInTicks :定时超时时间,单位:系统时钟节拍。宏
pdMS_TO_TICKS() 可用于将以毫秒为单位指定的时间转换为以 tick 为单位指定的时间。
uxAutoReload :定时器模式, pdTRUE :周期定时器, pdFALSE :单次定时器 pvTimerID :软件
定时器 ID ,用于多个软件定时器公用一个超时回调函数 pxCallbackFunction :软件定时器超时回
调函数
返回值:
成功:定时器句柄
失败: NULL

2. 开启软件定时器

BaseType_t xTimerStart ( TimerHandle_t xTimer ,
TickType_t xBlockTime );
参数:
xTimer :待开启的软件定时器的句柄 xTickToWait :发送命令到软件定时器命令队列的最大等待时
返回值:
pdPASS :开启成功 pdFAIL :开启失败

3. 停止软件定时器

BaseType_t xTimerStop ( TimerHandle_t xTimer ,
TickType_t xBlockTime );
参数与返回值同上。

4. 复位软件定时器

BaseType_t xTimerReset ( TimerHandle_t xTimer ,
TickType_t xBlockTime );
参数与返回值同上。
该功能将使软件定时器的重新开启定时,复位后的软件定时器以复位时的时刻作为开启时刻重新
定时。

5. 更改软件定时器定时时间

BaseType_t xTimerChangePeriod ( TimerHandle_t xTimer ,
TickType_t xNewPeriod ,
TickType_t xBlockTime );
xNewPeriod :新的定时超时时间,单位:系统时钟节拍。
其余参数与返回值同上。

实操

实验需求
创建两个定时器:
定时器 1 ,周期定时器,每 1 秒打印一次  CHL shuai
定时器 2 ,单次定时器,启动后 2 秒打印一次 laochen shuai

cubeMX配置

代码实现 

/* USER CODE BEGIN Header */
/********************************************************************************* File Name          : freertos.c* Description        : Code for freertos applications******************************************************************************* @attention** Copyright (c) 2023 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header *//* Includes ------------------------------------------------------------------*/
#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "cmsis_os.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN Variables *//* USER CODE END Variables */
osThreadId defaultTaskHandle;
osTimerId myTimer01Handle;
osTimerId myTimer02Handle;/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes *//* USER CODE END FunctionPrototypes */void StartDefaultTask(void const * argument);
void Callback01(void const * argument);
void Callback02(void const * argument);void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) *//* GetIdleTaskMemory prototype (linked to static allocation support) */
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize );/* GetTimerTaskMemory prototype (linked to static allocation support) */
void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize );/* USER CODE BEGIN GET_IDLE_TASK_MEMORY */
static StaticTask_t xIdleTaskTCBBuffer;
static StackType_t xIdleStack[configMINIMAL_STACK_SIZE];void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize )
{*ppxIdleTaskTCBBuffer = &xIdleTaskTCBBuffer;*ppxIdleTaskStackBuffer = &xIdleStack[0];*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;/* place for user code */
}
/* USER CODE END GET_IDLE_TASK_MEMORY *//* USER CODE BEGIN GET_TIMER_TASK_MEMORY */
static StaticTask_t xTimerTaskTCBBuffer;
static StackType_t xTimerStack[configTIMER_TASK_STACK_DEPTH];void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize )
{*ppxTimerTaskTCBBuffer = &xTimerTaskTCBBuffer;*ppxTimerTaskStackBuffer = &xTimerStack[0];*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;/* place for user code */
}
/* USER CODE END GET_TIMER_TASK_MEMORY *//*** @brief  FreeRTOS initialization* @param  None* @retval None*/
void MX_FREERTOS_Init(void) {/* USER CODE BEGIN Init *//* USER CODE END Init *//* USER CODE BEGIN RTOS_MUTEX *//* add mutexes, ... *//* USER CODE END RTOS_MUTEX *//* USER CODE BEGIN RTOS_SEMAPHORES *//* add semaphores, ... *//* USER CODE END RTOS_SEMAPHORES *//* Create the timer(s) *//* definition and creation of myTimer01 */osTimerDef(myTimer01, Callback01);myTimer01Handle = osTimerCreate(osTimer(myTimer01), osTimerPeriodic, NULL);/* definition and creation of myTimer02 */osTimerDef(myTimer02, Callback02);myTimer02Handle = osTimerCreate(osTimer(myTimer02), osTimerOnce, NULL);/* USER CODE BEGIN RTOS_TIMERS *//* start timers, add new ones, ... *//* USER CODE END RTOS_TIMERS *//* USER CODE BEGIN RTOS_QUEUES *//* add queues, ... *//* USER CODE END RTOS_QUEUES *//* Create the thread(s) *//* definition and creation of defaultTask */osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);/* USER CODE BEGIN RTOS_THREADS *//* add threads, ... *//* USER CODE END RTOS_THREADS */}/* USER CODE BEGIN Header_StartDefaultTask */
/*** @brief  Function implementing the defaultTask thread.* @param  argument: Not used* @retval None*/
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void const * argument)
{/* USER CODE BEGIN StartDefaultTask *///osTimerStart(myTimer01Handle, 1000);xTimerChangePeriod(myTimer01Handle, pdMS_TO_TICKS(1000), 0);osTimerStart(myTimer02Handle, 2000);/* Infinite loop */for(;;){osDelay(1);}/* USER CODE END StartDefaultTask */
}/* Callback01 function */
void Callback01(void const * argument)
{/* USER CODE BEGIN Callback01 */printf("liangxu shuai\r\n");/* USER CODE END Callback01 */
}/* Callback02 function */
void Callback02(void const * argument)
{/* USER CODE BEGIN Callback02 */printf("laochen shuai\r\n");/* USER CODE END Callback02 */
}/* Private application code --------------------------------------------------*/
/* USER CODE BEGIN Application *//* USER CODE END Application */

http://www.hotlads.com/news/1845.html

相关文章:

  • 怎样用dw做网站主页企业网站设计制作
  • 网络营销都具有哪些功能上海网站搜索排名优化哪家好
  • 外贸淘宝网站建设广告联盟点击赚钱平台
  • 网站维护 收录最吸引人的营销广告词
  • 自己做网站打不开是怎么回事抖音seo优化公司
  • 网站做下子压缩文件的链接深圳博惠seo
  • wordpress织梦帝国重庆百度seo排名
  • html做旅游网站电商网站建设
  • 做网站和小程序的区别网络营销教材电子版
  • 建设大型网站设计公司在线的crm系统软件
  • 网络服务器功能的概述seo 优化案例
  • 如何做个网站教程网站建设策划
  • 网站空间流量合肥品牌seo
  • 照片书哪个网站做的好西安发布最新通知
  • 做劫持和攻击网站的手机不能视频吗软件网站排行榜
  • 淘宝客网站 建设要钱不老鬼seo
  • 做游戏推广网站合肥网站维护公司
  • 电商网站商品页的优化目标是什么上海百度搜索优化
  • thinkphp网站模板广州seo顾问
  • 学生作业做网站需要什么潍坊网站定制模板建站
  • 正邦设计电话郑州百度网站快速优化
  • 免费推广引流平台有哪些武汉seo推广优化
  • 泸州网站建设唐网互联百度全网营销
  • 建网站的流程seo排名教程
  • 阜宁网站建设公司搜索引擎优化方案案例
  • 有没有个人做试卷网站的东莞网站设计排行榜
  • 网站建设更新搜索推广出价多少合适
  • wep购物网站开发模板搜索引擎营销的概念及特点
  • 空间 建网站深圳市网络品牌推广
  • 邹城网站建设zc273500搜狗收录查询