上一篇点这里
上一篇开了个头,简单解读了调度器和线程管理相关的源码
这一篇开始解读各个组件 😃
目录
-
- ThreadX定时器
-
- 系统内部定时器结构体TX_TIMER_INTERNAL
- 定时器结构体TX_TIMER
-
- 定时器相关的重要变量
-
- volatile ULONG _tx_timer_system_clock
- UINT _tx_timer_expired_time_slice
- TX_TIMER_INTERNAL *_tx_timer_list[TX_TIMER_ENTRIES]
- TX_TIMER_INTERNAL **_tx_timer_list_start
- TX_TIMER_INTERNAL **_tx_timer_list_end
- TX_TIMER_INTERNAL **_tx_timer_current_ptr
- UINT _tx_timer_expired
- TX_TIMER *_tx_timer_created_ptr
- ULONG _tx_timer_created_count
- TX_TIMER_INTERNAL *_tx_timer_expired_timer_ptr
- TX_THREAD _tx_timer_thread
- VOID *_tx_timer_stack_start
- ULONG _tx_timer_stack_size
- UINT _tx_timer_priority
- ULONG _tx_timer_thread_stack_area[(((UINT) TX_TIMER_THREAD_STACK_SIZE)+((sizeof(ULONG))- ((UINT) 1)))/(sizeof(ULONG))]
- ULONG _tx_timer_time_slice
- 系统定时器功能初始化
- tx_timer_interrupt.S文件分析
ThreadX定时器
定时器分为系统内部定时器TX_TIMER_INTERNAL和系统定时器TX_TIMER
真正起作用的结构体是TX_TIMER_INTERNAL
在Systick中断里面,ThreadX会处理定时器相关的操作,如果去看tx_timer_interrupt.S,里面写了很多个汇编函数,似乎是处理定时器相关的操作的,需要重点关注~~ 😃
系统内部定时器结构体TX_TIMER_INTERNAL

typedef struct TX_TIMER_INTERNAL_STRUCT
{
/* 定义剩下的Tick值和重新初始化的Tick值 */
ULONG tx_timer_internal_remaining_ticks;
ULONG tx_timer_internal_re_initialize_ticks;
/* 定义超时回调函数和超时回调函数指针 Define the timeout function and timeout function parameter. */
VOID (*tx_timer_internal_timeout_function)(ULONG id);
ULONG tx_timer_internal_timeout_param;
/* 定义下一个,上一个定时器指针*/
struct TX_TIMER_INTERNAL_STRUCT
*tx_timer_internal_active_next,
*tx_timer_internal_active_previous;
/* 定义链表头用于追踪
Keep track of the pointer to the head of this list as well. */
struct TX_TIMER_INTERNAL_STRUCT
**tx_timer_internal_list_head;
/* Define optional extension to internal timer control block. */
TX_TIMER_INTERNAL_EXTENSION
} TX_TIMER_INTERNAL;
定时器结构体TX_TIMER

typedef struct TX_TIMER_STRUCT
{
/* 定时器这个组件的ID */
ULONG tx_timer_id;
/*定时器的名字 */
CHAR *tx_timer_name;
/* 定时器实际的内核 */
TX_TIMER_INTERNAL tx_timer_internal;
/* 已创建定时器的链表指针 */
struct TX_TIMER_STRUCT
*tx_timer_created_next,
*tx_timer_created_previous;
/* Define optional extension to timer control block. */
TX_TIMER_EXTENSION
} TX_TIMER;
定时器相关的重要变量
volatile ULONG _tx_timer_system_clock
定时器中断周期性递增的系统时钟值
UINT _tx_timer_expired_time_slice
时间片失效标志,表明时间片曾经发生过
TX_TIMER_INTERNAL *_tx_timer_list[TX_TIMER_ENTRIES]
定义线程和定时器的入口
TX_TIMER_INTERNAL **_tx_timer_list_start
定时器链表的开头【二级指针】
TX_TIMER_INTERNAL **_tx_timer_list_end
定时器链表的结尾【二级指针】
TX_TIMER_INTERNAL **_tx_timer_current_ptr
定义当前运行的定时器在定时器链表中的位置,在定时器中断里面顺序移动
UINT _tx_timer_expired
定义定时器失效标志,标记定时器已经失效
TX_TIMER *_tx_timer_created_ptr
定义已创建的定时器的头指针
ULONG _tx_timer_created_count
定义已创建的定时器的个数
TX_TIMER_INTERNAL *_tx_timer_expired_timer_ptr
定义已经失效并正在处理的定时器指针
TX_THREAD _tx_timer_thread
定义定时器线程的控制块
VOID *_tx_timer_stack_start
定义定时器线程的栈顶
ULONG _tx_timer_stack_size
定义定时器线程的栈大小
UINT _tx_timer_priority
定义定时器线程的优先级
ULONG _tx_timer_thread_stack_area[(((UINT) TX_TIMER_THREAD_STACK_SIZE)+((sizeof(ULONG))- ((UINT) 1)))/(sizeof(ULONG))]
定义定时器的线程用的堆栈
ULONG _tx_timer_time_slice
定义当前时间片的值,如果非0,说明时间片是启动了,否则没有启动
系统定时器功能初始化
_tx_timer_initialize函数,里面主要的功能是初始化定时器功能相关的重要变量和创建系统定时器线程
ThreadX在初始化完毕以后会默认创建一个系统定时器线程System Timer Thread,优先级是0【最高】
VOID _tx_timer_initialize(VOID)
{
UINT status;
/* Initialize the system clock to 0. */
_tx_timer_system_clock = ((ULONG) 0);
/* Initialize the time-slice value to 0 to make sure it is disabled. */
_tx_timer_time_slice = ((ULONG) 0);
/* Clear the expired flags. */
_tx_timer_expired_time_slice = TX_FALSE;
_tx_timer_expired = TX_FALSE;
/* Set the currently expired timer

本文深入解析ThreadX定时器组件,包括TX_TIMER_INTERNAL结构、TX_TIMER及其变量,如系统时钟、定时器链表和线程控制。重点介绍系统初始化过程及Systick中断中的定时器处理。

1014

被折叠的 条评论
为什么被折叠?



