时间调度的架构
来源:互联网 发布:全志科技 知乎 编辑:程序博客网 时间:2024/05/17 02:32
1.设计一个结构体:
代码:
// 任务结构
typedef struct _TASK_COMPONENTS
{
uint8 Run; // 程序运行标记:0-不运行,1运行uint8 Timer; // 计时器uint8 ItvTime; // 任务运行间隔时间void (*TaskHook)(void); // 要运行的任务函数
} TASK_COMPONENTS; // 任务定义
这个结构体的设计非常重要,一个用4个参数,注释说的非常详细,这里不在描述。
- 任务运行标志出来,此函数就相当于中断服务函数,需要在定时器的中断服务函数中调用此函数,每隔TaskComps[i].Timer时间执行一次对应的函数。这里独立出来,并于移植和理解。
代码:
void TaskRemarks(void)
{
uint8 i;for (i=0; i逐个任务时间处理{ if (TaskComps[i].Timer) // 时间不为0 { TaskComps[i].Timer--; // 减去一个节拍 if (TaskComps[i].Timer == 0) // 时间减完了 { TaskComps[i].Timer = TaskComps[i].ItvTime; // 恢复计时器值,重新开始计时 TaskComps[i].Run = 1; // 任务可以运行 } }
}
}
大家认真对比一下次函数,和上面定时复用的函数是不是一样的呢?
- 任务处理
代码:
void TaskProcess(void)
{
uint8 i;for (i=0; i逐个任务时间处理{ if (TaskComps[i].Run) // 时间不为0 { TaskComps[i].TaskHook(); // 运行任务 TaskComps[i].Run = 0; // 标志清0 }}
}
此函数就是判断什么时候该执行那一个任务了,实现任务的管理操作,应用者只需要在main()函数中调用此函数就可以了,
并不需要去分别调用和处理任务函数。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
到此,一个时间片轮询应用程序的架构就建好了,
简单吧?此架构只需要两个函数,一个结构体
本文转载于他人,感谢作者
阅读全文
0 0
- 时间调度的架构
- 架构验证的时间
- 时间调度
- 802.16的Mesh模式调度架构特点
- 集群调度框架的架构演进过程
- Spark的架构和任务调度
- [译]集群调度架构的变革
- 动态改变Quartz的调度时间
- 动态改变Quartz的调度时间
- QTimer和Qthread的调度时间精度
- 时间系统、进程的调度与切换
- 时间系统、进程的调度与切换
- 基于时间片的程序调度分析
- 三种时间调度的方式
- 评架构验证的时间
- 架构验证的时间 (转)
- 一种高效的负载均衡调度的软件架构
- 一种高效的负载均衡调度的软件架构
- 图论之拓扑排序
- Python函数的高级特性
- POJ 3058 Decompression 笔记
- 如何解决Errors occurred during the build.
- Java_基础—TreeMap集合键是Student值是String的案例
- 时间调度的架构
- 掌握flash的as3图形学Stage3d的屏幕坐标和纹理UV采样坐标
- SPOJ Fast Maximum Matching(二分图最大匹配Hopcroft-Carp)
- 终端提交代码到码云
- 【刷题】从1到n整数中1出现的次数
- React学习(七)获取真实的DOM节点
- (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escap
- 选择器总结
- Linux设备驱动模型与kobject的关系