找回密码
 立即注册
查看: 152|回复: 0

观看冲哥视频静态任务COMPONENTS

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:105
  • 最近打卡:2026-03-18 11:52:41
已绑定手机

4

主题

7

回帖

298

积分

中级会员

积分
298
发表于 2025-11-7 17:15:22 | 显示全部楼层 |阅读模式
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;  // 设置任务就绪标志
            }
        }
    }
}


回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-3-19 06:18 , Processed in 0.104288 second(s), 43 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表