当前位置:网站首页>Introduction to RT thread kernel (4) -- clock management
Introduction to RT thread kernel (4) -- clock management
2022-07-05 04:20:00 【Number and form】
Timer management
Hardware timer : The external crystal oscillator provides the chip input clock
Software timer : Provided by the operating system , The unit is the time length of the clock beat , The timing value must be an integral multiple of the clock beat . The clock beat of the system is 10ms, The time setting of the soft timer must be 20ms,30ms etc. .
Two timer mechanisms :
Single trigger timer : Execute timer event only once , Then the timer stops automatically
Cycle triggered timer : Periodically trigger timer events , The straightway user stops manually
HAED_TIMER Pattern ( The default mode )
The timer timeout function in this mode executes in the interrupt context , Can be initialized in / Use parameters when creating timers RT_TIMER_FLAG_HARD_TIMER To specify the .
SOFT_TIMER Pattern
Define by macro RT_USING_TIMER_SOFT To decide whether to enable the mode . When this mode is enabled , The system will create a timer Threads , then SOFT_TIMER The timer timeout function of mode will be in timer Execute in the context of thread . Can be initialized in / Use parameters when creating timers RT_TIMER_FLAG_SOFT_TIMER To specify the settings SOFT_TIMER Pattern .
Timer control block :
struct rt_timer
typedef struct rt_timer *rt_timer_t
Timer management mode :
Initialize the timer :
void rt_system_timer_init(void);
SOFT_TIMER initialization :
void rt_system_timer_thread_init(void);
Timer creation :
rt_timer_t rt_timer_create()
Timer deletion ( Free memory )
rt_err_t rt_timer_delete(rt_timer_t timer);
Timer initialization :
rt_timer_init()
Timer disengagement :( Don't free memory )
rt_err_t rt_timer_detach(rt_timer_t timer);
Start timer :
rt_err_t rt_timer_start(rt_timer_t timer);
Stop timer :
rt_err_t rt_timer_stop(rt_timer_t timer);
Control timer function interface :
You can view and modify the timer settings according to the parameters of the command type
rt_err_t rt_timer_control(rt_timer_t timer, rt_uint8_t cmd, void* arg);
Parameters :timer, Timer handle
cmd Commands for controlling timers , Currently, four commands are supported , Set the timing time , Check the timing , Set single trigger , Set cycle trigger
arg And cmd Corresponding control command parameters such as ,cmd When setting timeout for , You can pass the timeout parameter through arg To set
cmd command :
#define RT_TIMER_CTRL_SET_TIME 0x0 /* Set timer timeout /
#define RT_TIMER_CTRL_GET_TIME 0x1 / Get timer timeout /
#define RT_TIMER_CTRL_SET_ONESHOT 0x2 / Set the timer to a single timer /
#define RT_TIMER_CTRL_SET_PERIODIC 0x3 / Set the timer to periodic timer */
High precision delay
Use timer delay because each time the delay time is an integral multiple of the clock beat , If you need more accurate delay , You need to read the count of the hardware timer or directly use the hardware timer
stay Cortex-M In the series ,SysTick Has been RT-Thread Used as a OS Tick Use , It is configured to 1/RT_TICK_PER_SECOND The way to trigger an interrupt after seconds , The interrupt handler function uses Cortex-M3 default SysTick_Handler name . stay Cortex-M3 Of CMSIS(Cortex Microcontroller Software Interface Standard) It is stipulated in the specification that SystemCoreClock Represents the dominant frequency of the chip , So based on the SysTick as well as SystemCoreClock, We can use SysTick Obtain an accurate delay function , As shown in the following example ,Cortex-M3 Based on SysTick Precise delay ( The system is required to enable SysTick After use ):
边栏推荐
- Rome链分析
- Online sql to excel (xls/xlsx) tool
- Why can't all browsers on my computer open web pages
- A应用唤醒B应该快速方法
- C26451: arithmetic overflow: use the operator * on a 4-byte value, and then convert the result to an 8-byte value. To avoid overflow, cast the value to wide type before calling the operator * (io.2)
- 网络安全-记录web漏洞修复
- Convert Boolean to integer value PHP - Convert Boolean to integer value PHP
- 【thingsboard】替换首页logo的方法
- 机器学习 --- 神经网络
- Sequelize. JS and hasmany - belongsto vs hasmany in serialize js
猜你喜欢
Sword finger offer 04 Search in two-dimensional array
Longyuan war "epidemic" 2021 network security competition web easyjaba
Threejs realizes sky box, panoramic scene, ground grass
【虚幻引擎UE】实现UE5像素流部署仅需六步操作少走弯路!(4.26和4.27原理类似)
C language course setting: cinema ticket selling management system
【科普】热设计基础知识:5G光器件之散热分析
Uni app common functions /api
Differences among 10 addressing modes
【虚幻引擎UE】打包报错出现!FindPin错误的解决办法
陇原战“疫“2021网络安全大赛 Web EasyJaba
随机推荐
【FineBI】使用FineBI制作自定义地图过程
JVM garbage collection
【虛幻引擎UE】實現UE5像素流部署僅需六步操作少走彎路!(4.26和4.27原理類似)
Threejs realizes rain, snow, overcast, sunny, flame
BDF application - topology sequence
Behavior perception system
level17
【UNIAPP】系统热更新实现思路
SPI read / write flash principle + complete code
[phantom engine UE] only six steps are needed to realize the deployment of ue5 pixel stream and avoid detours! (the principles of 4.26 and 4.27 are similar)
根据入栈顺序判断出栈顺序是否合理
Scheduling system of kubernetes cluster
防护电路中的元器件
Use object composition in preference to class inheritance
MacBook installation postgresql+postgis
假设检验——《概率论与数理统计》第八章学习笔记
C26451: arithmetic overflow: use the operator * on a 4-byte value, and then convert the result to an 8-byte value. To avoid overflow, cast the value to wide type before calling the operator * (io.2)
Online text line fixed length fill tool
如何优雅的获取每个分组的前几条数据
What is test development? Why do so many companies hire test developers now?