当前位置:网站首页>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 ):
边栏推荐
- Alibaba cloud ECS uses cloudfs4oss to mount OSS
- Three level linkage demo of uniapp uview u-picker components
- Uni app common functions /api
- Open graph protocol
- Threejs rendering obj+mtl model source code, 3D factory model
- SPI read / write flash principle + complete code
- Technical tutorial: how to use easydss to push live streaming to qiniu cloud?
- Threejs realizes rain, snow, overcast, sunny, flame
- Convert Boolean to integer value PHP - Convert Boolean to integer value PHP
- The order of LDS links
猜你喜欢

Is "golden nine and silver ten" the best time to find a job? Not necessarily

陇原战“疫“2021网络安全大赛 Web EasyJaba

Looking back on 2021, looking forward to 2022 | a year between CSDN and me

网络安全-记录web漏洞修复
![[illusory engine UE] method to realize close-range rotation of operating objects under fuzzy background and pit recording](/img/11/b55f85ef9e1f22254218cb9083b823.png)
[illusory engine UE] method to realize close-range rotation of operating objects under fuzzy background and pit recording

How does the applet solve the rendering layer network layer error?

The scale of computing power in China ranks second in the world: computing is leaping forward in Intelligent Computing

How to realize real-time audio and video chat function

Laravel8 export excel file

MacBook安装postgreSQL+postgis
随机推荐
Technical tutorial: how to use easydss to push live streaming to qiniu cloud?
Uni app common functions /api
A solution to the problem that variables cannot change dynamically when debugging in keil5
FFmepg使用指南
【科普】热设计基础知识:5G光器件之散热分析
Network layer - forwarding (IP, ARP, DCHP, ICMP, network layer addressing, network address translation)
Burpsuite grabs app packets
BDF application - topology sequence
【虚幻引擎UE】运行和启动的区别,常见问题分析
长度为n的入栈顺序的可能出栈顺序种数
Number of possible stack order types of stack order with length n
在线文本行固定长度填充工具
如何实现实时音视频聊天功能
How to remove installed elpa package
Machine learning -- neural network
Pyqt5 displays file names and pictures
[Chongqing Guangdong education] 2408t Chinese contemporary literature reference test in autumn 2018 of the National Open University
mxnet导入报各种libcudart*.so、 libcuda*.so找不到
Is "golden nine and silver ten" the best time to find a job? Not necessarily
如何进行「小步重构」?