- 打卡等级:常住居民III
- 打卡总天数:105
- 最近打卡:2026-03-18 11:52:41
已绑定手机
中级会员
- 积分
- 298
|
8051单片机中,静态任务COMPONENTS通常包含任务运行标志、定时器、间隔时间和任务函数指针等成员。
时间片轮询系统中,静态任务COMPONENTS用于管理任务的优先级、定时器和执行函数。
前后台程序中,静态任务COMPONENTS通过定时器中断更新任务状态,触发任务执行。
实现步骤详解
1. 定义任务结构体
首先需要创建一个结构体类型来封装任务的各个属性
typedef struct TASK_COMPONENTS {
unsigned char Run; // 任务运行标志(0-不运行,1-运行)
unsigned char Timer; // 任务定时器(递减计数)
unsigned char ItvTime; // 任务间隔时间(定时器重载值)
void (*TaskHook)(void); // 任务函数指针
} TASK_COMPONENTS;
2. 创建静态任务表
使用静态方式定义任务数组,确保内存分配在编译期完成
static TASK_COMPONENTS TaskComps[] = {
{0, 0, 2, RGB_MODE1}, // 任务1:每2个时间单位执行
{0, 0, 1000, Led}, // 任务2:每1000个时间单位执行
// 可继续添加更多任务...
};
3. 任务标志处理函数
在定时器中断服务程序中调用此函数,更新任务状态
void TaskRemarks(void) {
unsigned char i;
unsigned char TaskMax = sizeof(TaskComps) / sizeof(TASK_COMPONENTS);
for(i = 0; i < TaskMax; i++) {
if(TaskComps.Timer) {
TaskComps.Timer--;
if(TaskComps.Timer == 0) {
TaskComps.Timer = TaskComps.ItvTime;
TaskComps.Run = 1; // 设置任务就绪标志
}
}
}
}
|
|