当前位置:网站首页>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 ):
边栏推荐
- Technical tutorial: how to use easydss to push live streaming to qiniu cloud?
- 美国5G Open RAN再遭重大挫败,抗衡中国5G技术的图谋已告失败
- MacBook安装postgreSQL+postgis
- Interview byte, pass the exam and directly work on three sides. As a result, I found an architect to hang me?
- Threejs clicks the scene object to obtain object information, and threejs uses raycaster to pick up object information
- 蛇形矩阵
- mxnet导入报各种libcudart*.so、 libcuda*.so找不到
- Containerd series - what is containerd?
- Threejs implements labels and displays labels with custom styles
- Hexadecimal to decimal
猜你喜欢
[uniapp] system hot update implementation ideas
Interview related high-frequency algorithm test site 3
Alibaba cloud ECS uses cloudfs4oss to mount OSS
指针函数(基础)
level17
3. Package the bottom navigation tabbar
Technical tutorial: how to use easydss to push live streaming to qiniu cloud?
[understand series after reading] 6000 words teach you to realize interface automation from 0 to 1
What is the reason why the webrtc protocol video cannot be played on the easycvr platform?
陇原战“疫“2021网络安全大赛 Web EasyJaba
随机推荐
laravel8 导出Excle文件
函数(易错)
All in one 1413: determine base
Open graph protocol
Serpentine matrix
Threejs implements labels and displays labels with custom styles
SPI read / write flash principle + complete code
[finebi] the process of making custom maps using finebi
A application wakes up B should be a fast method
Sequence diagram of single sign on Certification Center
[brush questions] BFS topic selection
Why can't all browsers on my computer open web pages
如何实现实时音视频聊天功能
Threejs realizes rain, snow, overcast, sunny, flame
机器学习 --- 决策树
行为感知系统
Seven join join queries of MySQL
Get to know MySQL connection query for the first time
Threejs realizes sky box, panoramic scene, ground grass
Clickpaas low code platform