• 多定时器处理2(30天自制操作系统 -- 读书笔记)


         今天的内容依然来自《30天自制操作系统》这本书。

         1、中断处理程序存在的问题,中断处理程序Timer_Interrupt如下:

    //定时器中断函数
    void Timer_Interrupt(void)
    {
        int i=0;
        timerctl.count ++;
        for(i=0;i<MAX_TIMER;i++)        //扫描所有的定时器
        {
            if(timerctl.timer[i].flag == TIMER_FLAG_USING)
            {
                timerctl.count--;
                if(timerctl.count == 0) //减得时间到了
                {
                    fifo8_put(timerctl.timer[i].fifo,timerctl.timer[i].data);  //向关联fifo中写入数据
                    timerctl.timer[i].flag = TIMER_FLAG_ALLOC;      //改变标志位
                }
            }
        }
        
        return ;
    }

         每次中断程序中,都要将正在使用中的定时器(TIMER_FLAG_USING)的定时时间count读出来,然后再减一,为了避免这一点。可以做如下修改:
    将count的含义由设定的倒计时时间,变为设定的准定时间。具体如下:

         修改timer_settime函数:

    //设定timer定时器的定时时间为timeout
    void timer_settime(struct TIMER* timer,unsigned int timeout)
    {
        timer.timeout = timeout+timectl.count;   //这里!!     
        timer.flag = TIMER_FLAG_USING;  //这条语句相当于启动了定时器
        
        return ;
    }

         定时器结构体中的count含义就是从现在开始,还有多久定时时间到。
         修改定时器中断程序Timer_Interrupt如下:

    //定时器中断函数
    void Timer_Interrupt(void)
    {
        int i=0;
        timerctl.count ++;
        for(i=0;i<MAX_TIMER;i++)        //扫描所有的定时器
        {
            if(timerctl.timer[i].flag == TIMER_FLAG_USING)
            {
                if(timerctl.count >= timer[i].timeout) //count由设定时的值变到了设定的值
                {
                    fifo8_put(timerctl.timer[i].fifo,timerctl.timer[i].data);  //向关联fifo中写入数据
                    timerctl.timer[i].flag = TIMER_FLAG_ALLOC;      //改变标志位
                }
            }
        }
        
        return ;
    }

         暂时OK。

  • 相关阅读:
    python3读取chrome浏览器cookies
    python通过Cookie跳过登录验证码
    Python 正则表达式模块 (re) 简介
    python抓取bing主页背景图片
    python的开发环境配置-Eclipse-PyDev插件安装
    Windows环境selenium+Python环境配置
    Java+Jmeter接口测试
    Jmeter接口测试参数化实例图文示例
    Jmeter接口测试实例图文示例
    单元测试-代码覆盖率 EclEmma
  • 原文地址:https://www.cnblogs.com/kanite/p/4485861.html
Copyright © 2020-2023  润新知