<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ML307A_OPEN" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
#include "cm_sys.h"
#include "cm_os.h"
#include "cm_mem.h"
osThreadId_t osThreadIdFirst;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncFirst(void *param)
{
while (1)
{
cm_log_printf(0,"osThreadFuncFirst=%s\r\n","osThreadFuncFirst");//打印
//系统延时1S
osDelay(1000/5);
}
}
//相当于程序的main函数
int cm_opencpu_entry(char * param)
{
//配置任务
osThreadAttr_t app_task_attr = {0};
app_task_attr.name = "First";//任务名字-随意
app_task_attr.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr.priority = osPriorityNormal;//任务优先级-普通优先级
//返回任务句柄 任务函数 给任务函数的参数 任务配置
osThreadIdFirst = osThreadNew((osThreadFunc_t)osThreadFuncFirst, NULL, &app_task_attr);
return 0;
}
#include "cm_sys.h"
#include "cm_os.h"
#include "cm_mem.h"
osThreadId_t osThreadIdFirst;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncFirst(void *param)
{
while (1)
{
cm_log_printf(0,"osThreadFuncFirst=%s\r\n","osThreadFuncFirst");//打印
//系统延时1S
osDelay(1000/5);
}
}
//任务 2
osThreadId_t osThreadIdSecond;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncSecond(void *param)
{
char *argument = (char *) param;//获取参数的地址
while (1)
{
cm_log_printf(0,"osThreadFuncSecond=%s\r\n",argument);//打印
//系统延时1S
osDelay(1000/5);
}
}
char argument[20]="11111111";//传递给任务函数的参数一般都是个全局变量,因为全局变量地址一直有
//相当于程序的main函数
int cm_opencpu_entry(char * param)
{
//配置任务
osThreadAttr_t app_task_attr = {0};
app_task_attr.name = "First";//任务名字-随意
app_task_attr.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr.priority = osPriorityNormal;//任务优先级-普通优先级
//返回任务句柄 任务函数 给任务函数的参数 任务配置
osThreadIdFirst = osThreadNew((osThreadFunc_t)osThreadFuncFirst, NULL, &app_task_attr);
//配置任务 2
osThreadAttr_t app_task_attr1 = {0};
app_task_attr1.name = "Second";//任务名字-随意
app_task_attr1.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr1.priority = osPriorityNormal;//任务优先级-普通优先级
//返回任务句柄 任务函数 给任务函数的参数 任务配置
osThreadIdSecond = osThreadNew((osThreadFunc_t)osThreadFuncSecond, argument, &app_task_attr1);
return 0;
}
#include "cm_sys.h"
#include "cm_os.h"
#include "cm_mem.h"
#include "stdio.h"
#include "stdlib.h"
#include "stdarg.h"
#include <string.h>
osMessageQueueId_t osMessageQueueIdPrintf;//队列变量
//数据结构
typedef struct{
char *data;
uint32_t len;
}printfSendStruct;
//发送数据的时候调用这个函数,单独封装便于到处调用
void printfSendData(char *data,uint16_t len)
{
printfSendStruct* printfSend = (printfSendStruct*)cm_malloc(sizeof(printfSendStruct));//申请内存
if (printfSend!=NULL)
{
char *dat = (char*)cm_malloc(len+1);//申请内存
if (dat!=NULL)
{
memcpy(dat, data, len);
printfSend->data = dat;
printfSend->len = len;
if (osMessageQueuePut(osMessageQueueIdPrintf ,&printfSend, 0U, 0U) != osOK)//把数据地址发送给队列
{
cm_free(printfSend);
}
}
else
{
cm_free(printfSend);
}
}
}
osThreadId_t osThreadIdFirst;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncFirst(void *param)
{
char data[20];
int len=0;
while (1)
{
len = snprintf(data, sizeof(data), "%s", "11111111111");
printfSendData(data, len);//发送数据
osDelay(1000/5);//延时
}
}
//任务 2
osThreadId_t osThreadIdSecond;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncSecond(void *param)
{
osStatus_t status;
printfSendStruct* printfSend;
while (1)
{
status = osMessageQueueGet(osMessageQueueIdPrintf, &printfSend, NULL,osWaitForever);//一直等待队列里面有了数据
if (status == osOK)
{
cm_log_printf(0,"osMessageQueueIdPrintf=%s,%d\r\n",printfSend->data, printfSend->len);//打印数据
cm_free(printfSend->data);//释放内存
cm_free(printfSend);//释放内存
}
}
}
//相当于程序的main函数
int cm_opencpu_entry(char * param)
{
//创建一个可以最大存储50个数据的队列, 数据类型是结构体指针变量
osMessageQueueIdPrintf = osMessageQueueNew(50,sizeof(printfSendStruct *),NULL);
if (osMessageQueueIdPrintf == NULL)
{
return -1;
}
//配置任务
osThreadAttr_t app_task_attr = {0};
app_task_attr.name = "First";//任务名字-随意
app_task_attr.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdFirst = osThreadNew((osThreadFunc_t)osThreadFuncFirst, NULL, &app_task_attr);
//配置任务 2
osThreadAttr_t app_task_attr1 = {0};
app_task_attr1.name = "Second";//任务名字-随意
app_task_attr1.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr1.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdSecond = osThreadNew((osThreadFunc_t)osThreadFuncSecond, NULL, &app_task_attr1);
return 0;
}
#include "cm_sys.h"
#include "cm_os.h"
#include "cm_mem.h"
#include "stdio.h"
#include "stdlib.h"
#include "stdarg.h"
#include <string.h>
osSemaphoreId_t osSemaphoreIdTest;//信号量句柄
osThreadId_t osThreadIdFirst;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncFirst(void *param)
{
while (1)
{
osDelay(1000/5);//延时
}
}
//任务 2
osThreadId_t osThreadIdSecond;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncSecond(void *param)
{
osStatus_t status;
while (1)
{
status = osSemaphoreAcquire(osSemaphoreIdTest, osWaitForever);//申请信号量
if (status == osOK)
{
cm_log_printf(0,"osSemaphoreAcquire OK\r\n");//打印数据
}
}
}
//相当于程序的main函数
int cm_opencpu_entry(char * param)
{
// 最大20个信号量 初始化有20个信号量
osSemaphoreIdTest = osSemaphoreNew(20, 20, NULL);
if (osSemaphoreIdTest==NULL)
{
return -1;
}
//配置任务
osThreadAttr_t app_task_attr = {0};
app_task_attr.name = "First";//任务名字-随意
app_task_attr.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdFirst = osThreadNew((osThreadFunc_t)osThreadFuncFirst, NULL, &app_task_attr);
//配置任务 2
osThreadAttr_t app_task_attr1 = {0};
app_task_attr1.name = "Second";//任务名字-随意
app_task_attr1.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr1.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdSecond = osThreadNew((osThreadFunc_t)osThreadFuncSecond, NULL, &app_task_attr1);
return 0;
}
#include "cm_sys.h"
#include "cm_os.h"
#include "cm_mem.h"
#include "stdio.h"
#include "stdlib.h"
#include "stdarg.h"
#include <string.h>
osSemaphoreId_t osSemaphoreIdTest;//信号量句柄
osThreadId_t osThreadIdFirst;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncFirst(void *param)
{
osStatus_t status;
while (1)
{
status = osSemaphoreRelease(osSemaphoreIdTest);//返还一个信号量
osDelay(1000/5);//延时
}
}
//任务 2
osThreadId_t osThreadIdSecond;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncSecond(void *param)
{
osStatus_t status;
while (1)
{
status = osSemaphoreAcquire(osSemaphoreIdTest, osWaitForever);//申请一个信号量
if (status == osOK)
{
cm_log_printf(0,"osSemaphoreAcquire OK\r\n");//打印数据
}
}
}
//相当于程序的main函数
int cm_opencpu_entry(char * param)
{
(void)param;
// 最大65536个信号量 初始化有0个信号量
osSemaphoreIdTest = osSemaphoreNew(65536, 0, NULL);
if (osSemaphoreIdTest==NULL)
{
return -1;
}
//配置任务
osThreadAttr_t app_task_attr = {0};
app_task_attr.name = "First";//任务名字-随意
app_task_attr.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdFirst = osThreadNew((osThreadFunc_t)osThreadFuncFirst, NULL, &app_task_attr);
//配置任务 2
osThreadAttr_t app_task_attr1 = {0};
app_task_attr1.name = "Second";//任务名字-随意
app_task_attr1.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr1.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdSecond = osThreadNew((osThreadFunc_t)osThreadFuncSecond, NULL, &app_task_attr1);
return 0;
}
#include "cm_sys.h"
#include "cm_os.h"
#include "cm_mem.h"
#include "stdio.h"
#include "stdlib.h"
#include "stdarg.h"
#include <string.h>
osMutexId_t osMutexIdTest;//互斥信号量句柄
osThreadId_t osThreadIdFirst;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncFirst(void *param)
{
osStatus_t status;
while (1)
{
osDelay(1000/5);//延时
}
}
//任务 2
osThreadId_t osThreadIdSecond;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncSecond(void *param)
{
osStatus_t status;
while (1)
{
status = osMutexAcquire(osMutexIdTest, osWaitForever);//申请互斥信号量
if (status == osOK)
{
cm_log_printf(0,"osMutexAcquire OK\r\n");//打印数据
}
}
}
//相当于程序的main函数
int cm_opencpu_entry(char * param)
{
(void)param;
osMutexIdTest = osMutexNew(NULL);//创建互斥信号量(默认初始化会有一个信号量)
if (osMutexIdTest==NULL)
{
return -1;
}
//配置任务
osThreadAttr_t app_task_attr = {0};
app_task_attr.name = "First";//任务名字-随意
app_task_attr.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdFirst = osThreadNew((osThreadFunc_t)osThreadFuncFirst, NULL, &app_task_attr);
//配置任务 2
osThreadAttr_t app_task_attr1 = {0};
app_task_attr1.name = "Second";//任务名字-随意
app_task_attr1.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr1.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdSecond = osThreadNew((osThreadFunc_t)osThreadFuncSecond, NULL, &app_task_attr1);
return 0;
}
#include "cm_sys.h"
#include "cm_os.h"
#include "cm_mem.h"
#include "stdio.h"
#include "stdlib.h"
#include "stdarg.h"
#include <string.h>
osMutexId_t osMutexIdTest;//互斥信号量句柄
osThreadId_t osThreadIdFirst;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncFirst(void *param)
{
osStatus_t status;
while (1)
{
status = osMutexRelease(osMutexIdTest);//增加互斥信号量
osDelay(1000/5);//延时
}
}
//任务 2
osThreadId_t osThreadIdSecond;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncSecond(void *param)
{
osStatus_t status;
while (1)
{
status = osMutexAcquire(osMutexIdTest, osWaitForever);//申请互斥信号量
if (status == osOK)
{
cm_log_printf(0,"osMutexAcquire OK\r\n");//打印数据
}
}
}
//相当于程序的main函数
int cm_opencpu_entry(char * param)
{
(void)param;
osMutexIdTest = osMutexNew(NULL);//创建互斥信号量(默认初始化会有一个信号量)
if (osMutexIdTest==NULL)
{
return -1;
}
//配置任务
osThreadAttr_t app_task_attr = {0};
app_task_attr.name = "First";//任务名字-随意
app_task_attr.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdFirst = osThreadNew((osThreadFunc_t)osThreadFuncFirst, NULL, &app_task_attr);
//配置任务 2
osThreadAttr_t app_task_attr1 = {0};
app_task_attr1.name = "Second";//任务名字-随意
app_task_attr1.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr1.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdSecond = osThreadNew((osThreadFunc_t)osThreadFuncSecond, NULL, &app_task_attr1);
return 0;
}
#include "cm_sys.h"
#include "cm_os.h"
#include "cm_mem.h"
#include "stdio.h"
#include "stdlib.h"
#include "stdarg.h"
#include <string.h>
osMutexId_t osMutexIdTest;//互斥信号量句柄
osThreadId_t osThreadIdFirst;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncFirst(void *param)
{
osStatus_t status;
while (1)
{
status = osMutexAcquire(osMutexIdTest, osWaitForever);//申请互斥信号量
if (status == osOK)
{
//处理一些函数
cm_log_printf(0,"osThreadFuncFirst osMutexAcquire OK\r\n");//打印数据
}
status = osMutexRelease(osMutexIdTest);//增加互斥信号量
osDelay(1000/5);//延时
}
}
//任务 2
osThreadId_t osThreadIdSecond;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncSecond(void *param)
{
osStatus_t status;
while (1)
{
status = osMutexAcquire(osMutexIdTest, osWaitForever);//申请互斥信号量
if (status == osOK)
{
//处理一些函数
cm_log_printf(0,"osThreadFuncSecond osMutexAcquire OK\r\n");//打印数据
}
status = osMutexRelease(osMutexIdTest);//增加互斥信号量
osDelay(1000/5);//延时
}
}
//相当于程序的main函数
int cm_opencpu_entry(char * param)
{
(void)param;
osMutexIdTest = osMutexNew(NULL);//创建互斥信号量(默认初始化会有一个信号量)
if (osMutexIdTest==NULL)
{
return -1;
}
//配置任务
osThreadAttr_t app_task_attr = {0};
app_task_attr.name = "First";//任务名字-随意
app_task_attr.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdFirst = osThreadNew((osThreadFunc_t)osThreadFuncFirst, NULL, &app_task_attr);
//配置任务 2
osThreadAttr_t app_task_attr1 = {0};
app_task_attr1.name = "Second";//任务名字-随意
app_task_attr1.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr1.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdSecond = osThreadNew((osThreadFunc_t)osThreadFuncSecond, NULL, &app_task_attr1);
return 0;
}
#include "cm_sys.h"
#include "cm_os.h"
#include "cm_mem.h"
#include "stdio.h"
#include "stdlib.h"
#include "stdarg.h"
#include <string.h>
osEventFlagsId_t osEventFlagsIdTest;//事件句柄
osThreadId_t osThreadIdFirst;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncFirst(void *param)
{
osStatus_t status;
while (1)
{
osEventFlagsSet(osEventFlagsIdTest, 0x01);//发送事件,事件数据是0x01
osDelay(3000/5);//延时3S
}
}
//任务 2
osThreadId_t osThreadIdSecond;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncSecond(void *param)
{
osStatus_t status;
while (1)
{
//等待事件, 等待0x01 最长等待1S
uint32_t flag = osEventFlagsWait(osEventFlagsIdTest, 0x01, osFlagsWaitAny, 1000/5);
if (flag ==0x01)//等到了对应的事件
{
cm_log_printf(0,"osEventFlagsWait OK:%d\r\n", flag);//打印数据
}
else//没有等到对应的事件
{
cm_log_printf(0,"osEventFlagsWait err:%d\r\n", flag);//打印数据
}
osDelay(1000/5);//延时
}
}
//相当于程序的main函数
int cm_opencpu_entry(char * param)
{
(void)param;
osEventFlagsIdTest = osEventFlagsNew(NULL);//创建事件
if (osEventFlagsIdTest==NULL)
{
return -1;
}
//配置任务
osThreadAttr_t app_task_attr = {0};
app_task_attr.name = "First";//任务名字-随意
app_task_attr.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdFirst = osThreadNew((osThreadFunc_t)osThreadFuncFirst, NULL, &app_task_attr);
//配置任务 2
osThreadAttr_t app_task_attr1 = {0};
app_task_attr1.name = "Second";//任务名字-随意
app_task_attr1.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr1.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdSecond = osThreadNew((osThreadFunc_t)osThreadFuncSecond, NULL, &app_task_attr1);
return 0;
}
#include "cm_sys.h"
#include "cm_os.h"
#include "cm_mem.h"
#include "stdio.h"
#include "stdlib.h"
#include "stdarg.h"
#include <string.h>
osEventFlagsId_t osEventFlagsIdTest;//事件句柄
osThreadId_t osThreadIdFirst;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncFirst(void *param)
{
osStatus_t status;
while (1)
{
osEventFlagsSet(osEventFlagsIdTest, 0x01);//发送事件,事件数据是0x01
osDelay(100/5);//延时100ms
osEventFlagsSet(osEventFlagsIdTest, 0x02);//发送事件,事件数据是0x02
osDelay(3000/5);//延时3S
}
}
//任务 2
osThreadId_t osThreadIdSecond;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncSecond(void *param)
{
osStatus_t status;
while (1)
{
//等待事件, 等待0x01或0x02 其中一个来了就执行 最长等待1S
uint32_t flag = osEventFlagsWait(osEventFlagsIdTest, 0x01 | 0x02, osFlagsWaitAny, 1000/5);
if (flag >0 )//等到了对应的事件
{
cm_log_printf(0,"osEventFlagsWait OK:%d\r\n", flag);//打印数据
}
else//没有等到对应的事件
{
cm_log_printf(0,"osEventFlagsWait err:%d\r\n", flag);//打印数据
}
osDelay(1000/5);//延时
}
}
//相当于程序的main函数
int cm_opencpu_entry(char * param)
{
(void)param;
osEventFlagsIdTest = osEventFlagsNew(NULL);//创建事件
if (osEventFlagsIdTest==NULL)
{
return -1;
}
//配置任务
osThreadAttr_t app_task_attr = {0};
app_task_attr.name = "First";//任务名字-随意
app_task_attr.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdFirst = osThreadNew((osThreadFunc_t)osThreadFuncFirst, NULL, &app_task_attr);
//配置任务 2
osThreadAttr_t app_task_attr1 = {0};
app_task_attr1.name = "Second";//任务名字-随意
app_task_attr1.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr1.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdSecond = osThreadNew((osThreadFunc_t)osThreadFuncSecond, NULL, &app_task_attr1);
return 0;
}
osFlagsWaitAll
#include "cm_sys.h"
#include "cm_os.h"
#include "cm_mem.h"
#include "stdio.h"
#include "stdlib.h"
#include "stdarg.h"
#include <string.h>
osEventFlagsId_t osEventFlagsIdTest;//事件句柄
#define USART_RECV_EVENT 0x01 //假设串口接收到数据标志是 0x01
#define USART_RECV_FULL 0x02 //假设串口接收缓存区满标志是 0x02
osThreadId_t osThreadIdFirst;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncFirst(void *param)
{
osStatus_t status;
while (1)
{
osEventFlagsSet(osEventFlagsIdTest, USART_RECV_EVENT);//发送事件,事件数据是0x01
osDelay(100/5);//延时100ms
osEventFlagsSet(osEventFlagsIdTest, USART_RECV_FULL);//发送事件,事件数据是0x02
osDelay(3000/5);//延时3S
}
}
//任务 2
osThreadId_t osThreadIdSecond;//用于记录任务的句柄(ID码),可以用来停止任务
static void osThreadFuncSecond(void *param)
{
osStatus_t status;
while (1)
{
//等待事件, 等待0x01或0x02 都来了就执行 最长等待1S
uint32_t flag = osEventFlagsWait(osEventFlagsIdTest, USART_RECV_EVENT | USART_RECV_FULL, osFlagsWaitAll, 1000/5);
if (flag >0 )//等到了对应的事件
{
if (flag&USART_RECV_EVENT == USART_RECV_EVENT)
{
cm_log_printf(0,"osEventFlagsWait USART_RECV_EVENT\r\n");//打印数据
}
else if (flag&USART_RECV_FULL == USART_RECV_FULL)
{
cm_log_printf(0,"osEventFlagsWait USART_RECV_FULL\r\n");//打印数据
}
}
else//没有等到对应的事件
{
cm_log_printf(0,"osEventFlagsWait err:%d\r\n", flag);//打印数据
}
osDelay(1000/5);//延时
}
}
//相当于程序的main函数
int cm_opencpu_entry(char * param)
{
(void)param;
osEventFlagsIdTest = osEventFlagsNew(NULL);//创建事件
if (osEventFlagsIdTest==NULL)
{
return -1;
}
//配置任务
osThreadAttr_t app_task_attr = {0};
app_task_attr.name = "First";//任务名字-随意
app_task_attr.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdFirst = osThreadNew((osThreadFunc_t)osThreadFuncFirst, NULL, &app_task_attr);
//配置任务 2
osThreadAttr_t app_task_attr1 = {0};
app_task_attr1.name = "Second";//任务名字-随意
app_task_attr1.stack_size = 4096 * 2;//任务使用栈大小-写这个就可以
app_task_attr1.priority = osPriorityNormal;//任务优先级-普通优先级
osThreadIdSecond = osThreadNew((osThreadFunc_t)osThreadFuncSecond, NULL, &app_task_attr1);
return 0;
}
.