多任务编程05
- 格式:ppt
- 大小:305.00 KB
- 文档页数:31


Multipog多任务程序实现1 多任务程序的实现Multiprog程序可以实现多个和多种任务调度,不同的任务可以设置循环周期、或者优先权,每个任务可以关联单一程序或多个程序,从而实现复杂的逻辑控制和运算。
用户可以建立的任务包括四种类型:缺省任务、循环任务、事件任务、系统任务。
1.1 缺省任务—Default Task每个资源可以包含一个默认任务。
默认任务是具有最低优先权的任务(低于循环任务),并且不是按照时间来调度的。
如果它被完全执行过之后,系统等待一个所定义的空闲时间。
如果接下来还是没有循环任务或任何其它更高优先级的任务要处理,则默认任务被自动再次执行。
这意味着,只要没有更高优先级的任务来执行,就总是执行默认任务(除了必要的预定义的两次调用之间的空闲时间之外)。
默认任务不是按时间来调度,并具有四种任务类型中的最低优先级。
每个资源中只能插入一个默认任务。
使用默认任务开发程序:(1)插入默认任务:—用鼠标右键点击“任务(Tasks)”,插入任务。
—输入默认任务名称,选择任务类型为“DEFAULT”。
—确定后,进行默认任务的设置。
选用默认设置,确定即可插入任务。
监视定时器时间:指定一段用于监视定时器检查循环扫描时间是否超出的时间间隔。
注意:取0毫秒的值会停用监视定时器。
—尝试再次插入默认任务,会发现系统只能插入一个默认任务。
(2)生成与默认任务相关联的程序— 在逻辑POU中插入程序— 在默认任务中插入关联任务-程序实例— 确定程序实例程序类型对应任务关联的POU程序名称;程序实例是关联POU程序的实例化名称,由用户定义,可与POU程序名称一致。
— 则程序实例和默认任务就关联了起来(3)编写与默认任务相关联的程序代码,编译工程并运行调试。
程序的编写可采用各种编程语言。
1.2 循环任务—Cyclic Task循环任务每隔一个确定的时间间隔就被激活一次,相关联的程序周期性地执行。
(1)插入循环任务—用鼠标右键点击“任务(Tasks)”,插入任务。
单片机多任务事件驱动c源码以下是一个简单的单片机多任务事件驱动的C语言源码示例: c.#include <stdio.h>。
#include <stdbool.h>。
// 定义任务优先级。
#define TASK1_PRIORITY 1。
#define TASK2_PRIORITY 2。
#define TASK3_PRIORITY 3。
// 定义任务状态。
#define TASK_READY 0。
#define TASK_RUNNING 1。
// 定义任务结构体。
typedef struct {。
void (task_func)(void); // 任务函数指针。
int priority; // 任务优先级。
int status; // 任务状态。
} Task;// 定义任务数组。
Task tasks[] = {。
{task1, TASK1_PRIORITY, TASK_READY},。
{task2, TASK2_PRIORITY, TASK_READY},。
{task3, TASK3_PRIORITY, TASK_READY}。
};// 定义任务数量。
int num_tasks = sizeof(tasks) / sizeof(tasks[0]); // 定义当前运行的任务索引。
int current_task = 0;// 任务1。
void task1(void) {。
// 任务1的具体代码。
}。
// 任务2。
void task2(void) {。
// 任务2的具体代码。
}。
// 任务3。
void task3(void) {。
// 任务3的具体代码。
}。
// 事件驱动调度器。
void event_scheduler(void) {。
while (true) {。
// 遍历任务数组,找到优先级最高的就绪任务。
int highest_priority = 0;int highest_priority_task = -1;for (int i = 0; i < num_tasks; i++) {。