自制OS系统

#include <stdio.h>
#include <stdlib.h>

/**
*声明几个全局变量测试
*/

// 定义任务结构体
typedef struct {
    void (*taskFunc)(void); // 任务函数指针
    int delay; // 任务延迟时间
    int period; // 任务周期
    int runMe; // 任务是否需要执行标志
    int suspended; // 任务是否被挂起标志
} task_t;

// 定义任务数组
task_t tasks[3];

// 定义信号量结构体
typedef struct {
    int count; // 信号量计数器
} semaphore_t;

// 定义信号量数组
semaphore_t semaphores[2];

// 定义中断处理函数指针类型
typedef void (*isr_t)(void);

// 定义中断结构体
typedef struct {
    isr_t isrFunc; // 中断处理函数指针
    int priority; // 中断优先级
} interrupt_t;

// 定义中断数组
interrupt_t interrupts[2];

//这里提供另一种任务创建函数将
/*
// 初始化任务数组
void initTasks(void) {
    tasks[0].taskFunc = task1;
    tasks[0].delay = 0;
    tasks[0].period = 1000;
    tasks[0].runMe = 0;
    tasks[0].suspended = 0;

    tasks[1].taskFunc = task2;
    tasks[1].delay = 0;
    tasks[1].period = 2000;
    tasks[1].runMe = 0;
    tasks[1].suspended = 0;

    tasks[2].taskFunc = task3;
    tasks[2].delay = 0;
    tasks[2].period = 500;
    tasks[2].runMe = 0;
    tasks[2].suspended = 0;
}
*/

// 创建任务
void createTask(void (*taskFunc)(void), int delay, int period) {
    int i;
    for (i = 0; i < sizeof(tasks) / sizeof(task_t); i++) {
        if (tasks[i].taskFunc == NULL) {
            tasks[i].taskFunc = taskFunc;
            tasks[i].delay = delay;
            tasks[i].period = period;
            tasks[i].runMe = 0;
            tasks[i].suspended = 0;
            break;
        }
    }
}

// 删除任务
void deleteTask(void (*taskFunc)(void)) {
    int i;
    for (i = 0; i < sizeof(tasks) / sizeof(task_t); i++) {
        if (tasks[i].taskFunc == taskFunc) {
            tasks[i].taskFunc = NULL;
            tasks[i].delay = 0;
            tasks[i].period = 0;
            tasks[i].runMe = 0;
            tasks[i].suspended = 0;
            break;
        }
    }
}

// 挂起任务
void suspendTask(void (*taskFunc)(void)) {
    int i;
    for (i = 0; i < sizeof(tasks) / sizeof(task_t); i++) {
        if (tasks[i].taskFunc == taskFunc) {
            tasks[i].suspended = 1;
            break;
        }
    }
}

// 恢复任务
void resumeTask(void (*taskFunc)(void)) {
    int i;
    for (i = 0; i < sizeof(tasks) / sizeof(task_t); i++) {
        if (tasks[i].taskFunc == taskFunc) {
            tasks[i].suspended = 0;
            break;
        }
    }
}

// 任务循环执行
void taskScheduler(void) {
    int i;
    while (1) {
        for (i = 0; i < sizeof(tasks) / sizeof(task_t); i++) {
            if (tasks[i].taskFunc != NULL && tasks[i].suspended == 0) {
                if (tasks[i].delay == 0) {
                    tasks[i].runMe = 1;
                    tasks[i].delay = tasks[i].period - 1;
                }
                else {
                    tasks[i].delay--;
                }
            }
        }

        for (i = 0; i < sizeof(tasks) / sizeof(task_t); i++) {
            if (tasks[i].runMe == 1) {
                tasks[i].taskFunc();
                tasks[i].runMe = 0;
                tasks[i].delay = tasks[i].period - 1;
            }
        }
    }
}

// 初始化信号量数组
void initSemaphores(void) {
    semaphores[0].count = 0;
    semaphores[1].count = 0;
}

// 创建信号量
void createSemaphore(int index, int count) {
    semaphores[index].count = count;
}

// 等待信号量
void waitSemaphore(int index) {
    while (semaphores[index].count == 0) {
        // 等待信号量
    }
    semaphores[index].count--;
}

// 发送信号量
void signalSemaphore(int index) {
    semaphores[index].count++;
}

// 初始化中断数组
void initInterrupts(void) {
    interrupts[0].isrFunc = NULL;
    interrupts[0].priority = 0;
    interrupts[1].isrFunc = NULL;
    interrupts[1].priority = 0;
}

// 注册中断处理函数
void registerInterrupt(isr_t isrFunc, int priority) {
    int i;
    for (i = 0; i < sizeof(interrupts) / sizeof(interrupt_t); i++) {
        if (interrupts[i].isrFunc == NULL) {
            interrupts[i].isrFunc = isrFunc;
            interrupts[i].priority = priority;
            break;
        }
    }
}

// 中断处理函数
void handleInterrupts(void) {
    int i, j;
    for (i = 0; i < sizeof(interrupts) / sizeof(interrupt_t); i++) {
        if (interrupts[i].isrFunc != NULL) {
            interrupts[i].isrFunc();
        }

#include <stdio.h>
#include <stdlib.h>

/**
*声明几个全局变量测试
*/





// 定义任务结构体
typedef struct {
    void (*taskFunc)(void); // 任务函数指针
    int delay; // 任务延迟时间
    int period; // 任务周期
    int runMe; // 任务是否需要执行标志
    int suspended; // 任务是否被挂起标志
} task_t;

// 定义任务数组
task_t tasks[3];

// 定义信号量结构体
typedef struct {
    int count; // 信号量计数器
} semaphore_t;

// 定义信号量数组
semaphore_t semaphores[2];

// 定义中断处理函数指针类型
typedef void (*isr_t)(void);

// 定义中断结构体
typedef struct {
    isr_t isrFunc; // 中断处理函数指针
    int priority; // 中断优先级
} interrupt_t;

// 定义中断数组
interrupt_t interrupts[2];



//这里提供另一种任务创建函数将
/*
// 初始化任务数组
void initTasks(void) {
    tasks[0].taskFunc = task1;
    tasks[0].delay = 0;
    tasks[0].period = 1000;
    tasks[0].runMe = 0;
    tasks[0].suspended = 0;

    tasks[1].taskFunc = task2;
    tasks[1].delay = 0;
    tasks[1].period = 2000;
    tasks[1].runMe = 0;
    tasks[1].suspended = 0;

    tasks[2].taskFunc = task3;
    tasks[2].delay = 0;
    tasks[2].period = 500;
    tasks[2].runMe = 0;
    tasks[2].suspended = 0;
}
*/



// 创建任务
void createTask(void (*taskFunc)(void), int delay, int period) {
    int i;
    for (i = 0; i < sizeof(tasks) / sizeof(task_t); i++) {
        if (tasks[i].taskFunc == NULL) {
            tasks[i].taskFunc = taskFunc;
            tasks[i].delay = delay;
            tasks[i].period = period;
            tasks[i].runMe = 0;
            tasks[i].suspended = 0;
            break;
        }
    }
}

// 删除任务
void deleteTask(void (*taskFunc)(void)) {
    int i;
    for (i = 0; i < sizeof(tasks) / sizeof(task_t); i++) {
        if (tasks[i].taskFunc == taskFunc) {
            tasks[i].taskFunc = NULL;
            tasks[i].delay = 0;
            tasks[i].period = 0;
            tasks[i].runMe = 0;
            tasks[i].suspended = 0;
            break;
        }
    }
}

// 挂起任务
void suspendTask(void (*taskFunc)(void)) {
    int i;
    for (i = 0; i < sizeof(tasks) / sizeof(task_t); i++) {
        if (tasks[i].taskFunc == taskFunc) {
            tasks[i].suspended = 1;
            break;
        }
    }
}

// 恢复任务
void resumeTask(void (*taskFunc)(void)) {
    int i;
    for (i = 0; i < sizeof(tasks) / sizeof(task_t); i++) {
        if (tasks[i].taskFunc == taskFunc) {
            tasks[i].suspended = 0;
            break;
        }
    }
}

// 任务循环执行
void taskScheduler(void) {
    int i;
    while (1) {
        for (i = 0; i < sizeof(tasks) / sizeof(task_t); i++) {
            if (tasks[i].taskFunc != NULL && tasks[i].suspended == 0) {
                if (tasks[i].delay == 0) {
                    tasks[i].runMe = 1;
                    tasks[i].delay = tasks[i].period - 1;
                }
                else {
                    tasks[i].delay--;
                }
            }
        }

        for (i = 0; i < sizeof(tasks) / sizeof(task_t); i++) {
            if (tasks[i].runMe == 1) {
                tasks[i].taskFunc();
                tasks[i].runMe = 0;
                tasks[i].delay = tasks[i].period - 1;
            }
        }
    }
}

// 初始化信号量数组
void initSemaphores(void) {
    semaphores[0].count = 0;
    semaphores[1].count = 0;
}

// 创建信号量
void createSemaphore(int index, int count) {
    semaphores[index].count = count;
}

// 等待信号量
void waitSemaphore(int index) {
    while (semaphores[index].count == 0) {
        // 等待信号量
    }
    semaphores[index].count--;
}

// 发送信号量
void signalSemaphore(int index) {
    semaphores[index].count++;
}

// 初始化中断数组
void initInterrupts(void) {
    interrupts[0].isrFunc = NULL;
    interrupts[0].priority = 0;
    interrupts[1].isrFunc = NULL;
    interrupts[1].priority = 0;
}

// 注册中断处理函数
void registerInterrupt(isr_t isrFunc, int priority) {
    int i;
    for (i = 0; i < sizeof(interrupts) / sizeof(interrupt_t); i++) {
        if (interrupts[i].isrFunc == NULL) {
            interrupts[i].isrFunc = isrFunc;
            interrupts[i].priority = priority;
            break;
        }
    }
}

// 中断处理函数
void handleInterrupts(void) {
    int i, j;
    for (i = 0; i < sizeof(interrupts) / sizeof(interrupt_t); i++) {
        if (interrupts[i].isrFunc != NULL) {
            interrupts[i].isrFunc();
        }
    }
}

// 定义任务函数
void task1(void) {

    
    printf("Task 1 is running.\n");
}

void task2(void) {
    printf("Task 2 is running.\n");
}

void task3(void) {
    printf("Task 3 is running.\n");
}

int main(void) {
    //initTasks(); // 初始化任务数组

    createTask(task1, 0, 100000); // 创建任务1,延迟0ms,周期1000ms
    createTask(task2, 0, 100000); // 创建任务2,延迟0ms,周期2000ms
    createTask(task3, 0, 100000); // 创建任务3,延迟0ms,周期500ms

    taskScheduler(); // 任务循环执行

    return 0;
}



    }
}

// 定义任务函数
void task1(void) {

    
    printf("Task 1 is running.\n");
}

void task2(void) {
    printf("Task 2 is running.\n");
}

void task3(void) {
    printf("Task 3 is running.\n");
}

int main(void) {
    //initTasks(); // 初始化任务数组

    createTask(task1, 0, 100000); // 创建任务1,延迟0ms,周期1000ms
    createTask(task2, 0, 100000); // 创建任务2,延迟0ms,周期2000ms
    createTask(task3, 0, 100000); // 创建任务3,延迟0ms,周期500ms

    taskScheduler(); // 任务循环执行

    return 0;
}


 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值