#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;
}