1、system_os_task
bool system_os_task(
os_task_t task,
uint8 prio,
os_event_t *queue,
uint8 qlen
)
#define SIG_RX 0
#define TEST_QUEUE_LEN 4
os_event_t *testQueue;
void test_task (os_event_t *e)
{
switch (e->sig)
{
case SIG_RX:
os_printf(sig_rx %c/n, (char)e->par);
break;
default:
break;
}
}
void task_init(void)
{
testQueue=(os_event_t *)os_malloc(sizeof(os_event_t)*TEST_QUEUE_LEN);
system_os_task(test_task,USER_TASK_PRIO_0,testQueue,TEST_QUEUE_LEN);
}
2、system_os_post
bool system_os_post (
uint8 prio,
os_signal_t sig,
os_param_t par
)
void task_post(void)
{
system_os_post(USER_TASK_PRIO_0, SIG_RX, ‘a’);
}
//打印输出 sig_rx a
1、在创建任务和给系统安排任务之前,我们需要设置消息队列深度。
#define MESSAGE QUEUE LEN 2//消息队列深度(对于同一个任务,系统最多接受的叠加任务数)
2、定义任务指针
os_ event_ t * Pointer_ Task_ 1 ; // 定义任务1 (串口打印任务)
3、为任务分配内存
给任务1分配空间(任务1空间= 1个队列空间*队列数)
Pointer_ Task_1=(os_ event_ t*) os_ ma | |oc((sizeof (os_ event_ t)) *MESSAGE_ QUEUE_ LEN) ;
4、创建任务函数
任务执行函数(形参:类型必须为[os_ event. _t *] )
void FuneTask 1(os event t * Task message) // Task message = Pointer. Task 1
5、执行创建任务API
创建任务(参数1=任务执行函数/参数2=任务等级/参数3=任务空间指针1参数4=消息队列深度)
system os task (Func_ Task_ 1, USER TASK PR1O 0, Pointer. Task 1. MESSAGE QUEUE LEN) ;
6、给系统安排任务
调用任务(参数1=任务等级1参数2=消息类型…参数3=消息参数)
注意:参数3必须为无符号整数,否则需要强制类型转换
system_ os_ post USER TASK PR1O C Message_ Type++, Message_ Para++):
7、执行任务函数(当系统空闲的时候)
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) ;
}
8、撰写user init
void ICACHE_ FLASH_ ATTR user init(void)
{
u8C_Task=0;//调用任务计数
u8 Message_ Type = 1; // 消息类型
u8 Message_ Para = 'A'; //消息参数
uart_ init (115200, 115200); // 初始化串口波特率.
os_ delay_ us (10000) ;//等待串口稳定
os_ printf("\t Project:\t%s\r\n", ProjectName) ;
os_ printf("\t SDK vers ion: \t%s",system_ get_ sdk_ version()) ;
}
/给任务分配空间
/创建任务
//调用4次任务
for (C_ Task=1; C_ _Task<=4; C_ _Task++)
{
system_ soft_ _wdt_ feed(); //喂狗,防止复位
delay_ ms (1000) ;// 延时1秒
os_ pr intf ("\r\n安排任务: Task == %d\r\n", C_ Task) ;
/每次循环给系统安排一个任务(安排任务)
}