FreeRTOS中时钟理解

 先看下stm32时钟树

 虽然SYSCLK有多种时钟源,但一般不用我们管,ST提供的标准库函数已经配置了,选择的时钟源是外部8MHZ晶振经过PLL锁相环9倍频,即SYSCLK默认是72MHZ,然后过AHB分频器,对应寄存器默认为0,即1分频(不分频),即AHB默认也是72MHZ。

其余分支不管,看Cortex系统时钟(SYSTICK)和FCLK自由运行时钟(内核时钟SystemCoreClock)

Cortex系统时钟就是SysTick,即系统嘀嗒定时器,时钟源有两个,外部时钟源STCLK和内核时钟源FCLK。FreeRTOS默认是内核时钟源,就不用除以8,而FCLK又和HCLK同步,所以一般为72MHZ。如果选择外部时钟源,就要除以8,所以一般为72/8=9MHZ。

Fclk为供给CPU内核的时钟信号,我们所说的cpu主频为XXXXMHz,就是指的这个时钟信号,相应的,1/Fclk即为cpu时钟周期;

 FCLK 为处理器的自由振荡的处理器时钟,用来采样中断和为调试模块计时。在处理器休眠时,通过FCLK 保证可以采样到中断和跟踪休眠事件。 Cortex-M3内核的“自由运行时钟(free running clock)”FCLK。“自由”表现在它不来自系统时钟HCLK,因此在系统时钟停止时FCLK 也继续运行。FCLK和HCLK 互相同步。FCLK 是一个自由振荡的HCLK。FCLK 和HCLK 应该互相平衡,保证进入Cortex-M3 时的延迟相同。

好了,看一下FreeRTOS里的配置

在FreeRTOSConfig.h里 ,configCPU_CLOCK_HZ是CPU主频,即FCLK,72MHZ。configTICK_RATE_HZ,是 抵达定时器的中断频率。

查看configCPU_CLOCK_HZ的引用,跳转到port.c如下,第一个是配置嘀嗒定时器的LOAD寄存器,第二个是配置CTRL寄存器。1UL 表示 无符号长整型 1。,在keil编译器里long是4字节,即32位。还有一个清除当前数字寄存器

 下面是对应宏定义,刚好对应嘀嗒定时器寄存器地址,一个重装寄存器,一个配置寄存器。还有一个当前数字寄存器。这些地址宏定义在port.c里定义的。

先看第一个LOAD寄存器,转到configSYSTICK_CLOCK_HZ定义,发现configSYSTICK_CLOCK_HZ是configCPU_CLOCK_HZ的宏定义,即72MHZ。(72M/1000)-1UL=72K-1UL

再看CTRL寄存器,跳转到对应参数的定义,CLK_BIT对应CTRL的第2位,即时钟源选择,1UL<<2UL就是选择内核时钟FCLK作为嘀嗒定时器的时钟源,

 INT_BIT和ENABLE_BIT分别对应寄存器第1位和第0位,这里都设为了0,分别表示SYSTICK计数器数到0产生异常请求、使能嘀嗒定时器。

再看当前数值寄存器,读取就会返回当前计数器的值,写它就清零,这个可能与获取当前嘀嗒数有关。

xTaskGetTickCount() :用于查询任务调度器从启动到现在时间计数器xTickCount的值。xTickCount是系统的时钟节拍值,并不是真实的时间值。每个滴答定时器中断xTickCount就会加一,中断周期取决于系统时钟节拍数

关于xTaskDelay和Delay,我还没研究,猜想xTaskDelay是当前任务进入阻塞状态,其他任务可以运行,Delay是延时,所有任务都无法执行。

xTaskDelay和xTaskDelayUtil

任务只能一次执行一个tick,说的是没有调用vTaskDelay或其他中断的时候,当下一个tick中断发生,就会发生一次调度,当然,调度后可以依旧是那个任务运行,调度其实就是对任务状态的链表进行操作。

下面是xTaskDelay函数,先将所有任务放入SusPend链表,然后将需要阻塞的任务放入Delay链表,再恢复任务。然后触发一次任务调度。

 portYIELD触发一次任务调度,这个函数在空闲任务里也调用了,用于礼让

 

 

 

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: FreeRTOS 参考手册是一款免费的、开源的嵌入式实时操作系统(RTOS),其全称为 “Real Time Operating System” 。在很多嵌入式设备,RTOS 是一种常见的操作系统形式,因为其能够处理实时的多任务处理和实现设备节能。FreeRTOS 参考手册提供了软件架构、代码 API,以及操作任务、内存管理、断、时钟、定时器、信号量、任务通信等方面的参考资料,有助于开发者深入理解、掌握 FreeRTOS 系统。该参考手册面向嵌入式系统开发人员,包含了详细的使用方法、示例代码和调试技巧等,完全文化的更是方便了极少数人英语表达不佳的开发者。 ### 回答2: FreeRTOS是一款实时操作系统(RTOS)的开源软件,它是为了使嵌入式系统更加可靠和高效而创建的。作为一款免费的RTOS,它拥有广泛的使用范围和适用性。同时,FreeRTOS也被全球各种不同领域的开发者所广泛使用,并且拥有大量的使用案例。 FreeRTOS参考手册文是FreeRTOS官方发布的一份文手册,它主要包括了FreeRTOS的核心知识和使用方法。这份手册详细介绍了FreeRTOS的特性,如任务(Task)、信号量(Semaphore)和队列(Queue)等,同时它还包含了一些实际应用案例和示例代码。 对于初次接触FreeRTOS的开发者而言,这份手册是一个非常好的参考和学习资料。手册详尽地介绍了FreeRTOS的基本概念和特性,让开发者能够很快了解和上手这款RTOS。对于有一些经验的开发者而言,这份手册也包含了一些高级和复杂的知识点,使得开发者可以更深入地了解FreeRTOS的使用方法和原理。 总的来说,FreeRTOS参考手册文是一份非常重要的资料,它是FreeRTOS开发者进行开发和调试的首要工具。无论是初学者还是经验丰富的开发者,都可以通过它来更好地了解和使用FreeRTOS。 ### 回答3: FreeRTOS参考手册是一本详尽的文档,介绍了FreeRTOS操作系统的各个方面。它提供了对FreeRTOS内部各个模块及其工作机制的深入了解。这个文档包括了有关多任务处理、内存管理、定时器、消息队列、信号量、任务通信和任务同步等内容。 FreeRTOS是一个由英国公司Real Time Engineers Ltd开发的高效实时操作系统(RTOS)。它可以在各种微控制器上运行,包括ARM,AVR,MSP430等等。FreeRTOS的特点是占用内存少,指令集小,可裁剪模块化和稳定性好。在很多领域,如工控、智能仪器、航空航天、汽车等,FreeRTOS都具有非常广泛的应用。 该参考手册的目录包括了关于任务、时间片轮转、延时、任务通信、事件标志、消息队列、深度睡眠、软件定时器、定时器服务例程、内存管理、任务及断上下文、调度器、配置和移植的详细信息。此外,参考手册还包含一些示例、概述和用于调试和诊断故障的工具。 需要注意的是,FreeRTOS文参考手册并非官方文档,提供者也并不是官方人员。因此如果需要更准确的操作,建议到官方网站下载参考手册。英文官方文档已经提供了非常详尽的操作指南,可以逐步阅读并实践。另外,由于FreeRTOS的灵活性很强,实现方式多种多样,因此在实际运用过程,需要针对具体的硬件、软件环境和应用场景进行深入研究和理解,结合自身的经验来应用和调优FreeRTOS

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值