【ThreadX】ThreadX源码阅读计划(二)

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

上一篇点这里

【ThreadX】ThreadX源码阅读计划(一)

上一篇开了个头,简单解读了调度器和线程管理相关的源码

这一篇开始解读各个组件 😃

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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值