时钟中断是rt-thread的线程调度器的驱动力

本文详细介绍了rt-thread操作系统中时钟中断如何驱动线程调度。当系统时钟中断发生时,会检查当前线程时间片是否耗尽并重新调度。在软件定时器模式下,timer_thread线程也会参与调度。通过修改RT_TICK_PER_SECOND宏的值,可以改变系统时钟中断的间隔。
摘要由CSDN通过智能技术生成

1 系统时钟中断驱动引擎

rt-thread操作系统中当线程时间片耗尽,或是当线程sleep一段时间后唤醒再被调度,此过程又是如何进行的呢?到底是谁来驱动这一过程的呢?

答案是时钟中断源。且来看看时钟中断例程:

在bsp/stm32f20x/drivers/board.c源文件中存在这么一个时钟中断例程代码:(这里以stm32f20x的MCU为例)

/**
 * This is the timer interrupt service routine.
 *
 */
void SysTick_Handler(void)
{
	/* enter interrupt */
	rt_interrupt_enter();//进入中断

	rt_tick_increase();//增加tick

	/* leave interrupt */
	rt_interrupt_leave();//离开中断
}

其中rt_tick_increase的函数如下定义:

/**
 * This function will notify kernel there is one tick passed. Normally,
 * this function is invoked by clock ISR.
 */
void rt_tick_increase(void)
{
    struct rt_thread *thread;

    /* increase the global tick */
    ++ rt_tick;//全局变量rt_tick加1

    /* check time slice */
    thread = rt_thread_self();//获取当前调度的线程

    -- thread->remaining_tick;//当前调度的线程的剩余时间片减1
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值