基于ARM的嵌入式TCP/IP协议的实现
对时间。所以某个表项表示的超时事件距离当前的时间是它以前所有表项(包括自身)中的relative_time的和。relative_time的基本单位是granularity。
定时器任务使用一个信号量作同步。信号量有两个变量:count和waiting_task。count对事件计数,当count大于0时,表示有count个事件发生并等待处理;当count小于0时,表示有某个任务在等待事件的发生,此时waitint_task保存相应任务控制块的地址。信号量有两个操作:sem_up和sem_down。sem_up首先使count加1,然后看count是否为0,若为0表示有任务在等待,通过waiting_task中记录的任务控制块的地址把等待任务的状态设为就绪,否则返回。sem_down首先使count减1然后看count是否小于0,若小于0会使当前任务成为等待状态并引发任务管理器对任务的调度,否则返回。
每当时钟中断服务程序计数到granularity个时钟中断,给定时器任务使用的信号灯作sem_up操作。当定时器任务被调度执行时,它遍历每一个超时控制块,对每一个超时控制块作如图5所示的处理,最后对信号灯调用sem_down。
定时器任务使用一个信号量作同步。信号量有两个变量:count和waiting_task。count对事件计数,当count大于0时,表示有count个事件发生并等待处理;当count小于0时,表示有某个任务在等待事件的发生,此时waitint_task保存相应任务控制块的地址。信号量有两个操作:sem_up和sem_down。sem_up首先使count加1,然后看count是否为0,若为0表示有任务在等待,通过waiting_task中记录的任务控制块的地址把等待任务的状态设为就绪,否则返回。sem_down首先使count减1然后看count是否小于0,若小于0会使当前任务成为等待状态并引发任务管理器对任务的调度,否则返回。
每当时钟中断服务程序计数到granularity个时钟中断,给定时器任务使用的信号灯作sem_up操作。当定时器任务被调度执行时,它遍历每一个超时控制块,对每一个超时控制块作如图5所示的处理,最后对信号灯调用sem_down。
- 上一篇论文: 在Linux下驱动STN彩色LCD
- 下一篇论文: 用CPLD实现嵌入式平台上的实时图像增强