ESP8266 01S 任务

学习记录

ESP8266 01S 任务

任务与函数的区别

函数:立即执行
任务:系统空闲时执行

api说明

在这里插入图片描述

API

给系统安排任务。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

消息队列

#define		MESSAGE_QUEUE_LEN	2			// 消息队列深度(对于同一个任务,系统最多接受的叠加任务数)

若已经安排了第一个任务,在任务执行之前,又给系统安排了第二个任务,系统是否接受任务取决于消息队列深度。
若深度为2,那么若已经安排了第一个任务, 它会接受第二个任务。当系统空闲时,依次执行。
若深度为2,那么若已经安排了两个任务, 它会丢弃三个任务。只执行前两个任务。

定义任务

// 全局变量
//=========================================================
os_event_t * Pointer_Task_1 ;	// 定义任务1(串口打印任务)		// 第①步:定义任务指针
//=========================================================

结构体 os_event_t定义如下,有两个参数。

typedef struct ETSEventTag ETSEvent;

struct ETSEventTag {
    ETSSignal sig;
    ETSParam  par;
};

创建任务

// 给任务1分配空间(任务1空间 = 1个队列空间 * 队列数)	// 第②步:为任务分配内存
	//-------------------------------------------------------------------------------
	Pointer_Task_1=(os_event_t*)os_malloc((sizeof(os_event_t))*MESSAGE_QUEUE_LEN);
	//计算大小,乘以深度,申请空间,类型转换,赋值

	// 创建任务(参数1=任务执行函数 
	// 参数2=任务等级 
	// 参数3=任务空间指针 
	// 参数4=消息队列深度)	
	// 第④步:创建任务
	//-----------------------------------------------------------------------------------------
	system_os_task(Func_Task_1, USER_TASK_PRIO_0, Pointer_Task_1, MESSAGE_QUEUE_LEN);
	//创建任务API


	// 调用4次任务
	//--------------------------------
	for(C_Task=1; C_Task<=4; C_Task++)
	{
		system_soft_wdt_feed();	// 喂狗,防止复位

		delay_ms(1000);			// 延时1秒
		os_printf("\r\n安排任务:Task == %d\r\n",C_Task);

		// 调用任务(参数1=任务等级 / 参数2=消息类型 / 参数3=消息参数)
		// 注意:参数3必须为无符号整数,否则需要强制类型转换
		//---------------------------------------------------------------
		system_os_post(USER_TASK_PRIO_0, Message_Type++, Message_Para++);	// 第⑤步:给系统安排任务
	}

任务执行函数

// 任务执行函数(形参:类型必须为【os_event_t *】)		// 第③步:创建任务函数
//======================================================================================
void Func_Task_1(os_event_t * Task_message)	// Task_message = Pointer_Task_1
{
	// Task_message->sig=消息类型、Task_message->par=消息参数	// 第⑥步:编写任务函数(根据消息类型/消息参数实现相应功能)
	//--------------------------------------------------------------------------------

	os_printf("消息类型=%d,消息参数=%c\r\n",Task_message->sig, Task_message->par);

}
//======================================================================================

注意事项

  1. 创建系统任务,最多⽀支持创建 3 个任务,优先级分别为 0/1/2。0 为最低优先级。
  2. system_os_post()调用任务。• uint8 prio:任务优先级,与建⽴立时的任务优先级对应。• os_signal_t sig:消息类型。• os_param_t par:消息参数
  3. 超过消息队列深度的任务会被丢弃
  4. 使用os_malloc需加入头文件,#include “mem.h” // 内存申请等函数。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值