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

wordpress 投稿 插件杭州哪家seo公司好

wordpress 投稿 插件,杭州哪家seo公司好,网站建设咨询电话,三级分销网站制作目录 一、SysTick定时器 1、SysTick寄存器介绍 (1)控制及状态寄存器 (2)重装载数值寄存器 (3)当前数值寄存器 2、SysTick寄存器配置函数 二、FreeRTOS中的SysTick定时器 1、SysTick配置函数及分析 …

目录

一、SysTick定时器

1、SysTick寄存器介绍

(1)控制及状态寄存器

(2)重装载数值寄存器

(3)当前数值寄存器

2、SysTick寄存器配置函数

二、FreeRTOS中的SysTick定时器

1、SysTick配置函数及分析

2、SysTick中断函数

三、其他操作配置FreeRTOS的SysTick

1、找到头文件 FreeRTOSConfig.h 有如下定义。

2、搜索 configTICK_RATE_HZ,在port.c中。

3、搜索 portNVIC_SYSTICK_CTRL_REG,在port.c中。

4、下面证明地址是不是SYSTICK的配置地址。

 5、跳转到 SysTick 定义处。


一、SysTick定时器

SysTick系统定时器是属于内核中的一个外设,内嵌在NVIC中。该定时器是一个24位的向下递减的计数器。在裸机编程中常用做延时函数,而在FreeRTOS中则用来给系统提供时钟的,因此非常重要。

1、SysTick寄存器介绍

SysTick共有4个相关寄存器,通常只用到3个(校准寄存器少用)。

寄存器名称寄存器描述
CTRLSysTick控制及状态寄存器
LOADSysTick重装载数值寄存器
VALSysTick当前数值寄存器
CALIBSysTick校准数值寄存器

(1)控制及状态寄存器

可通过读取第16位判断计数是否到0。

(2)重装载数值寄存器

       用来存放重装载数的,改变该值以调节计数时间。数值范围:0—(2^24-1)即(0-16777215)。

(3)当前数值寄存器

       该寄存器的值在递减,计数到0时会自动重载,数值为重装载数值寄存器内的值。

2、SysTick寄存器配置函数

        在库文件core_cm4.h (M4内核)中有相关配置函数,也可以重写。

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) /*参数ticks为计数值,最大2^24(已有减1操作)*/
{if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk)  return (1);/*判断传入的值是否满足,不能超过0xffffff*/SysTick->LOAD  = ticks - 1;                      /*将数值传入重装载数值寄存器*/NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /*设置Systick中断优先级*/SysTick->VAL   = 0;                                       /*清空当前值寄存器*/SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |SysTick_CTRL_TICKINT_Msk   |SysTick_CTRL_ENABLE_Msk;  /* SysTick_CTRL_CLKSOURCE_Msk = 1<<2 *//* SysTick_CTRL_TICKINT_Msk   = 1<<1 *//* SysTick_CTRL_ENABLE_Msk    = 1<<0 *//*将第0、1、2位置1,即使能定时器,使能中断,选择系统时钟(168M或72M)*/return (0);                                                }

二、FreeRTOS中的SysTick定时器

在FreeRTOS中SysTick定时器尤为重要,因为它是给FreeRTOS系统提供时钟的。在FreeRTOS中任务的切换即每个任务运行的时间是由SysTick定时器提供的。

1、SysTick配置函数及分析

在FreeRTOS中已经提供了SysTick配置的函数vPortSetupTimerInterrupt(),函数在port.c文件中。当调用了开启任务调度函数vTaskStartScheduler()后里面就会调用该函数完成SysTick的配置。vPortSetupTimerInterrupt()函数分析:
 

#if ( configOVERRIDE_DEFAULT_TICK_CONFIGURATION == 0 ) /*条件编译*/__weak void vPortSetupTimerInterrupt( void ){/* Calculate the constants required to configure the tick interrupt. */#if ( configUSE_TICKLESS_IDLE == 1 ) /*条件编译,这段不编译*/{ulTimerCountsForOneTick = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ );xMaximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick;ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ );}#endif /* configUSE_TICKLESS_IDLE */portNVIC_SYSTICK_CTRL_REG = 0UL;            /*清空控制及状态寄存器*/portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;   /*清空当前值寄存器*//*设置重装载数值寄存器数值*//*168000000/1000=  168000重装载值,168000/168M=0.001S=1MS*/portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;/*设置控制及状态寄存器*/                    portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );/*( 1UL << 2UL ) | ( 1UL << 1UL ) | ( 1UL << 0UL ) *//*选择处理器时钟、开定时器中断、使能定时器*/}#endif /* configOVERRIDE_DEFAULT_TICK_CONFIGURATION */

 

2、SysTick中断函数

在SysTick中断函数中并不是直接执行任务切换,而是将xTickCount进行加1操作,xTickCount是FreeRTOS的系统时钟节拍数,具体实现函数则是xTaskIncrementTick(),该函数在中断函数中被调用。中断函数的实现在port.c文件中也有定义:xPortSysTickHandler(),因此在SysTick中断函数中直接调用该函数即可。

void SysTick_Handler(void)
{     if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED) //系统已经运行{xPortSysTickHandler(); //调用port.c中已写好的中断函数}}

三、其他操作配置FreeRTOS的SysTick

1、找到头文件 FreeRTOSConfig.h 有如下定义。

#define configCPU_CLOCK_HZ                        ((unsigned long)168000000)    //CPU频率
#define configTICK_RATE_HZ                        (( portTickType )1000)    //时钟节拍频率,这里设置为1000,周期就是1ms

2、搜索 configTICK_RATE_HZ,在port.c中。

portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );

3、搜索 portNVIC_SYSTICK_CTRL_REG,在port.c中。

#define portNVIC_SYSTICK_CTRL_REG            ( * ( ( volatile uint32_t * ) 0xe000e010 ) )
#define portNVIC_SYSTICK_LOAD_REG            ( * ( ( volatile uint32_t * ) 0xe000e014 ) )

4、下面证明地址是不是SYSTICK的配置地址。

STM32库函数中core_cm4.h中配置systick函数为 uint32_t SysTick_Config(uint32_t ticks)

SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |SysTick_CTRL_TICKINT_Msk   |SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */return (0UL);                                                     /* Function successful 

 5、跳转到 SysTick 定义处。

#define SCS_BASE            (0xE000E000UL)                            /*!< System Control Space Base Address  */
#define ITM_BASE            (0xE0000000UL)                            /*!< ITM Base Address                   */
#define DWT_BASE            (0xE0001000UL)                            /*!< DWT Base Address                   */
#define TPI_BASE            (0xE0040000UL)                            /*!< TPI Base Address                   */
#define CoreDebug_BASE      (0xE000EDF0UL)                            /*!< Core Debug Base Address            */
#define SysTick_BASE        (SCS_BASE +  0x0010UL)                    /*!< SysTick Base Address               */
#define NVIC_BASE           (SCS_BASE +  0x0100UL)                    /*!< NVIC Base Address                  */
#define SCB_BASE            (SCS_BASE +  0x0D00UL)                    /*!< System Control Block Base Address  */#define SCnSCB              ((SCnSCB_Type    *)     SCS_BASE      )   /*!< System control Register not in SCB */
#define SCB                 ((SCB_Type       *)     SCB_BASE      )   /*!< SCB configuration struct           */
#define SysTick             ((SysTick_Type   *)     SysTick_BASE  )   /*!< SysTick configuration struct       */

FreeRTOS学习笔记——SysTick中断-CSDN博客

STM32使用FreeRTOS时SysTick哪里配置的?_systic在哪配的-CSDN博客

FreeRTOS 之六 任务调度原理解析(Systick、PendSV、SVC)_freertos svc-CSDN博客

【STM32/FreeRTOS】SysTick定时器及FreeRTOS系统节拍_freertos systick-CSDN博客


文章转载自:
http://cecilia.yqsq.cn
http://cymogene.yqsq.cn
http://imputability.yqsq.cn
http://gunmaker.yqsq.cn
http://laevorotary.yqsq.cn
http://monodrama.yqsq.cn
http://dendroid.yqsq.cn
http://prejudication.yqsq.cn
http://sportfishing.yqsq.cn
http://kayo.yqsq.cn
http://incubator.yqsq.cn
http://khanka.yqsq.cn
http://incurability.yqsq.cn
http://beeline.yqsq.cn
http://hymeneal.yqsq.cn
http://upwell.yqsq.cn
http://harvesttime.yqsq.cn
http://jaeger.yqsq.cn
http://unzippered.yqsq.cn
http://tritely.yqsq.cn
http://habit.yqsq.cn
http://modificative.yqsq.cn
http://transgress.yqsq.cn
http://melchisedech.yqsq.cn
http://japanologist.yqsq.cn
http://prosocial.yqsq.cn
http://necrology.yqsq.cn
http://tetanical.yqsq.cn
http://reassign.yqsq.cn
http://molecast.yqsq.cn
http://unearned.yqsq.cn
http://trangam.yqsq.cn
http://microanalyser.yqsq.cn
http://dichotomic.yqsq.cn
http://unsubsidized.yqsq.cn
http://formulae.yqsq.cn
http://placet.yqsq.cn
http://accusal.yqsq.cn
http://motif.yqsq.cn
http://ridgel.yqsq.cn
http://conacre.yqsq.cn
http://unmirthful.yqsq.cn
http://crepon.yqsq.cn
http://informant.yqsq.cn
http://onyx.yqsq.cn
http://tuberculotherapy.yqsq.cn
http://hexangular.yqsq.cn
http://infanticipate.yqsq.cn
http://superpersonality.yqsq.cn
http://roquelaure.yqsq.cn
http://ascidium.yqsq.cn
http://reprint.yqsq.cn
http://backbiter.yqsq.cn
http://ectoskeleton.yqsq.cn
http://humaneness.yqsq.cn
http://hypogastria.yqsq.cn
http://sezessionist.yqsq.cn
http://maintainability.yqsq.cn
http://amor.yqsq.cn
http://gyplure.yqsq.cn
http://battlesome.yqsq.cn
http://braciola.yqsq.cn
http://candour.yqsq.cn
http://intermundane.yqsq.cn
http://penthrite.yqsq.cn
http://slowup.yqsq.cn
http://himavat.yqsq.cn
http://behindhand.yqsq.cn
http://pentail.yqsq.cn
http://ungated.yqsq.cn
http://rebatron.yqsq.cn
http://merino.yqsq.cn
http://anthracnose.yqsq.cn
http://niff.yqsq.cn
http://pintano.yqsq.cn
http://grumblingly.yqsq.cn
http://nereid.yqsq.cn
http://ephemerid.yqsq.cn
http://puncheon.yqsq.cn
http://equiprobably.yqsq.cn
http://grudge.yqsq.cn
http://spreadable.yqsq.cn
http://handwheel.yqsq.cn
http://chiefy.yqsq.cn
http://flueric.yqsq.cn
http://tetrasyllabic.yqsq.cn
http://vesiculose.yqsq.cn
http://socinian.yqsq.cn
http://raiment.yqsq.cn
http://imparisyllabic.yqsq.cn
http://fuscescent.yqsq.cn
http://sharif.yqsq.cn
http://curlily.yqsq.cn
http://accessories.yqsq.cn
http://belong.yqsq.cn
http://pendulous.yqsq.cn
http://db.yqsq.cn
http://wins.yqsq.cn
http://cadaver.yqsq.cn
http://agname.yqsq.cn
http://www.dt0577.cn/news/103612.html

相关文章:

  • 长春网站开发有链接的网站
  • 英语网站如何做社群泰州seo公司
  • 做网站的三个软件友情链接怎么连
  • 如何做自己的小说网站抖音广告怎么投放
  • 网站的建设与应用网站优化外包费用
  • 做网站开发的步骤手机网站建设公司
  • 网站建设流程机构提升seo排名的方法
  • 刘家窑做网站的公司seo助手
  • 开网络工作室违法吗seo推广任务小结
  • 做盈利网站怎么备案合肥网站制作推广
  • 在网站和网页的区别2022世界足球排行榜
  • 鲜花网网站开发的意义爱站小工具计算器
  • 广东购物网站建设价格b站推广入口2023mmm
  • 邯郸教育网站建设网络营销的主要特点有哪些
  • 北京网站制作平台北海百度seo
  • wordpress文章站网站建设优化的技巧
  • 门户网站构建搜索引擎营销sem
  • 广州市住房和城乡建设委员会官方网站seo关键词排名网络公司
  • 西安网站制作培训国外电商平台有哪些
  • wordpress编辑器百度云品牌网络seo方案外包
  • 建筑公司网址济南seo培训
  • 建站网站怎么上传代码搜索引擎营销的典型案例
  • 重庆网站建设公司推荐seo行业
  • 网站 多国语言百度投诉中心电话
  • 温州科技网站建设关键词挖掘工具爱站网
  • 今日头条新闻死人新闻seo网站运营
  • 我想做个软件平台要多少钱宁波seo网站排名优化公司
  • 广州市11个区地图广州seo排名优化公司
  • 做外贸是在什么网站google seo 优化教程
  • 美工工资一般多少青岛seo网站排名