FOS时间管理

FOS时间管理包括软定时器、延时函数两者管理(目前是这两者对象,后面会补充各种对象的timeout)。通过一条链表连接对象,由style标识特定对象。

/*time manage*/

typedef structTICK_STR{

    LIST list;

    U8 style; //timer,delay,wait signer

    U32 timeout;

    TCB *tcb;

    FUNC_PTR func; //for software timer user task function

    void *func_arg;

    BOOL period;

    U32 timeout_copy;

}TICK;


成员解释:

list : 连接链表

style: 对象类型

timeout:计时间

tcb:记录使用对象的任务

func:用于软定时器的用户任务

arg :用于软定时器的用户任务的参数

period:软定时器是否周期性使用

timeout_copy:备份超时的初始值


FOS是通过硬定时器来轮询时间链表,查看是否超时,如果有对象超时,做相应的处理,比如软定时器timeout,那么就调用用户定时任务,根据是否周期性定时操作,而选择删除链表上的软定时器,还是赋值timeout_copy,继续等待下一次轮询。如果是延时超时,timeout只要把任务设置成可以运行的状态并且移动到该优先级队列的头部后面,因为一开始延时是把任务设置成不可以运行状态,然后把任务移动到该优先级队列的末尾。

任务延时os_delay,主要把任务设置成不可以运行状态,把延时任务移到相应优先级的末尾,记录timeout时间,插入tickqueue,标识DELAY功能。

void os_delay(U32timeslice)

{

    TICK *timer_delay = &timer_delay_entry;

    timer_delay->tcb = new_task;

    timer_delay->tcb->state = 0;

    timer_delay->timeout = timeslice;

    timer_delay->timeout_copy = timeslice;

    timer_delay->style = DELAY;

    prio_ready_queue_delete(timer_delay->tcb);

    prio_ready_queue_insert(timer_delay->tcb);


    U32 cpu =interrupt_disable();

    tick_queue_insert(timer_delay);

    schedule();

    interrupt_enable(cpu);

}

Source code download :     https://github.com/yangshanjin/YSJ_OS 

FOS now is based on OpenRISC.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值