前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语句模拟多任务实例

C语句模拟多任务实例

作者头像
用户4645519
发布2020-09-07 11:05:20
2940
发布2020-09-07 11:05:20
举报
文章被收录于专栏:嵌入式学习嵌入式学习
代码语言:javascript
复制
#include <stdlib.h>
#include <stdio.h>

// 任务类型定义
typedef struct _myTask
{
	struct _coefficient
	{
		unsigned char a;
		unsigned char b;
		unsigned char c;
	} co;

	struct _variable
	{
		unsigned int x;
		unsigned long y;
	} v;
} myTask;

// 线程常量定义
#define THREAD_OVER			-1		// 线程结束
#define THREAD_NOTOVER		0		// 线程未结束

// 功能:任务线程
// 参数:Task:	myTask *类型,任务
//		 Process:	unsigned char * 类型,线程指针
// 返回:char 类型
//		  0: 线程未结束
//		 -1: 线程结束
// 备注:
char myThread(myTask *Task, unsigned char *Process)
{
	unsigned int z;
	char ret = 0;

	switch(*Process)
	{
		case 0:
			Task->v.x = rand();		// 获取随机数
			Task->v.y = 3;
			break;
		case 1:
			Task->v.y *= Task->v.x;
			Task->v.y *= Task->v.x;
			break;
		case 2:
			z = 7 * Task->co.a * Task->co.b * Task->v.x;
			Task->v.y += z;
			break;
		case 3:
			z = Task->co.c;
			Task->v.y += z;
	}
    printf("(*Process) = %d,\n", (*Process));
	(*Process)++;
	if(*Process>4)
	{
        
		ret = -1;	// 线程结束
        printf("(*Process) = %d ret = %d,\n", (*Process),ret);
		*Process = 0;
	}

	return ret;
}

// 任务定义
myTask Task1, Task2;

// 功能:任务初始化
// 参数:Task: myTask *类型,任务
//		 a, b, c:unsigned char 类型,方程式系数
// 返回:无
// 备注:
void InitTask(myTask *Task, unsigned char a, unsigned char b, unsigned char c)
{
	Task->co.a = a;
	Task->co.b = b;
	Task->co.c = c;
}

int main(void)
{
	// OS变量定义区
    // 任务1 OS变量
	char isTask_1_Living	= 1;
	unsigned char Task1_Thread_Process = 0;
	// 任务2 OS变量
	char isTask_2_Living	= 1;
	unsigned char Task2_Thread_Process = 0;

    char i=0;
	// 初始化任务
	InitTask(&Task1, 9, 7, 18);
	InitTask(&Task2, 4, 13, 16);

	for(i=0; i<5; ++i)
	{
		if(isTask_1_Living)	// 如果任务1活着
		{
			isTask_1_Living = !myThread(&Task1, &Task1_Thread_Process);
		}

		if(isTask_2_Living)	// 如果任务2活着
		{
			isTask_2_Living = !myThread(&Task2, &Task2_Thread_Process);
		}
        printf("Task1_Thread_Process = %d,\n", Task1_Thread_Process);
        printf("Task2_Thread_Process = %d,\n", Task2_Thread_Process);
	}//while

    return 0;
    //system("pause");
    //exit(0);
}
代码语言:javascript
复制
(*Process) = 0,
(*Process) = 0,
Task1_Thread_Process = 1,
Task2_Thread_Process = 1,
(*Process) = 1,
(*Process) = 1,
Task1_Thread_Process = 2,
Task2_Thread_Process = 2,
(*Process) = 2,
(*Process) = 2,
Task1_Thread_Process = 3,
Task2_Thread_Process = 3,
(*Process) = 3,
(*Process) = 3,
Task1_Thread_Process = 4,
Task2_Thread_Process = 4,
(*Process) = 4,
(*Process) = 5 ret = -1,
(*Process) = 4,
(*Process) = 5 ret = -1,
Task1_Thread_Process = 0,
Task2_Thread_Process = 0,


Terminated with return code 0
Press any key to continue ...
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-08-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档