📄 test.c
字号:
#if OS_CRITICAL_METHOD==3
OS_CPU_SR cpu_sr;
#endif
pdata=pdata;
for ( ; ; )
{
PC_DispStr(5,Task3y,s3,DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
IntBlkPtr=OSMemGet(IntBufferB,&err); //请求内存块
OSQPost(MsgQueue,(void *)&msg[0]); //发送成功请求的消息
PC_DispStr(70,Task3y,sget3B,DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSMemQuery(IntBufferB,&MemInfo);//查询内存控制块信息
MemDataDisp(Task3y,MemInfo);//显示分区数据
OSTimeDly(20);
OSMemPut(IntBufferB,IntBlkPtr);//释放内存块
PC_DispStr(70,Task3y,sput3,DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSTimeDlyHMSM(0,0,1,0);//等待1秒
}
}
/*
*********************************************************************************************************
** TASKS --Task4
** 函数名称: Task4
** 功能描述: 任务Task4和Task5任务共享资源的访问,使用二值信号量(初值为1),
任务Task4运行请求一个32字节内存块(OSMemGet),随后就释放(OSMemPut)
** 参数: pdata:是一个指向非强制性数据区域的指针,当任务优先运行时传递参数给任务
** 返回: 无
*********************************************************************************************************
*/
void Task4(void *pdata)
{
char msg[20];
strcpy(&msg[0],sget4);
#if OS_CRITICAL_METHOD==3
OS_CPU_SR cpu_sr;
#endif
pdata=pdata;
for ( ; ; )
{
PC_DispStr(5,Task4y,s4,DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPend(Sem,0,&err);//请求信号量
IntBlkPtr=OSMemGet(IntBufferA,&err);//请求内存块
OSQPost(MsgQueue,(void *)&msg[0]); //发送成功请求的消息
PC_DispStr(70,Task4y,sget4,DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSMemQuery(IntBufferA,&MemInfo);//查询内存控制块信息
MemDataDisp(Task4y,MemInfo);//显示分区数据
OSTimeDly(20);
OSMemPut(IntBufferA,IntBlkPtr);//释放内存块
PC_DispStr(70,Task4y,sput4,DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPost(Sem);//发送信号量
OSTimeDlyHMSM(0,0,1,0);//等待1秒
}
}
/*
*********************************************************************************************************
** TASKS --Task5
** 函数名称: Task5
** 功能描述: 任务Task4和Task5任务共享资源的访问,使用二值信号量(初值为1),
任务Task5请求一个32字节内存块(OSMemGet),随后就释放(OSMemPut)
** 参数: pdata:是一个指向非强制性数据区域的指针,当任务优先运行时传递参数给任务
** 返回: 无
*********************************************************************************************************
*/
void Task5(void *pdata)
{
char msg[20];
strcpy(&msg[0],sget5);
#if OS_CRITICAL_METHOD==3
OS_CPU_SR cpu_sr;
#endif
pdata=pdata;
for ( ; ; )
{
OSSemPend(Sem,0,&err);//请求信号量
PC_DispStr(5,Task5y,s5,DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
IntBlkPtr=OSMemGet(IntBufferA,&err);//请求内存块
OSQPost(MsgQueue,(void *)&msg[0]); //发送成功请求的消息
PC_DispStr(70,Task5y,sget5,DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSMemQuery(IntBufferA,&MemInfo);//查询内存控制块信息
MemDataDisp(Task5y,MemInfo);//显示分区数据
OSTimeDly(20);
OSMemPut(IntBufferA,IntBlkPtr);//释放内存块
PC_DispStr(70,Task5y,sget6,DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPost(Sem);//发送信号量
OSTimeDlyHMSM(0,0,2,0);//等待1秒
}
}
/*
*********************************************************************************************************
** TASKS --Task6
** 函数名称: Task1
** 功能描述: 任务Task6运行请求一个32字节内存块(OSMemGetA),随后就释放(OSMemPut)
** 参数: pdata:是一个指向非强制性数据区域的指针,当任务优先运行时传递参数给任务
** 返回: 无
*********************************************************************************************************
*/
void Task6(void *pdata)
{
char msg[20];
#if OS_CRITICAL_METHOD==3
OS_CPU_SR cpu_sr;
#endif
pdata=pdata;
strcpy(&msg[0],sget6);
for ( ; ; )
{
PC_DispStr(5,Task6y,s6,DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
IntBlkPtr=OSMemGet(IntBufferA,&err);//请求内存块
OSQPost(MsgQueue,(void *)&msg[0]);//发送成功请求的消息
PC_DispStr(70,Task6y,sget6,DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSMemQuery(IntBufferA,&MemInfo);//查询内存控制块信息
MemDataDisp(Task6y,MemInfo);//显示分区数据
OSTimeDly(20);
OSMemPut(IntBufferA,IntBlkPtr);//释放内存块
PC_DispStr(70,Task6y,sput6,DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSTimeDlyHMSM(0,0,1,0);//等待1秒
}
}
/*
*********************************************************************************************************
** TASKS --Task7
** 函数名称: Task1
** 功能描述: 任务Task7接收任务1-6的消息
** 参数: pdata:是一个指向非强制性数据区域的指针,当任务优先运行时传递参数给任务
** 返回: 无
*********************************************************************************************************
*/
void Task7(void *pdata)
{
char *msg;
#if OS_CRITICAL_METHOD==3
OS_CPU_SR cpu_sr;
#endif
pdata=pdata;
for ( ; ; )
{
msg=(char *)OSQPend(MsgQueue,0,&err);
PC_DispStr(70,20,msg,DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSTimeDlyHMSM(0,0,1,0);//等待1秒
}
}
/*
*********************************************************************************************************
** TASKS --TaskClk
** 函数名称: TaskClk
** 功能描述: 任务ClkTask显示当前的日期
** 参数: pdata:是一个指向非强制性数据区域的指针,当任务优先运行时传递参数给任务
** 返回: 无
*********************************************************************************************************
*/
void TaskClk(void *pdata)
{
char s[30];
#if OS_CRITICAL_METHOD==3
OS_CPU_SR cpu_sr;
#endif
pdata=pdata;
for ( ; ; )
{
PC_GetDateTime(s);
PC_DispStr(60,23,s,DISP_FGND_YELLOW + DISP_BGND_BLUE);
OSTimeDly(OS_TICKS_PER_SEC);
}
}
/*
*********************************************************************************************************
** TASKSTARTCREATETASKS
** 函数名称: TaskStartCreateTasks
** 功能描述: 创建多个任务
** 参数: 无
** 返回: 无
*********************************************************************************************************
*/
static void TaskStartCreateTasks(void)
{
OSTaskCreate(Task1, //创建任务Task1
(void *)0, //给任务传递参数
&Task1Stk[TASK_STK_SIZE-1], //设置任务堆栈栈顶指针
Task1Prio); //Task1 优先级为3
OSTaskCreate(Task2, //创建任务Task2
(void *)0, //给任务传递参数
&Task2Stk[TASK_STK_SIZE-1], //设置任务堆栈栈顶指针
Task2Prio); //Task2 优先级为4
OSTaskCreate(Task3, //创建任务Task3
(void *)0, //给任务传递参数
&Task3Stk[TASK_STK_SIZE-1], //设置任务堆栈栈顶指针
Task3Prio); //Task3 优先级为5
OSTaskCreate(Task4, //创建任务Task4
(void *)0, //给任务传递参数
&Task4Stk[TASK_STK_SIZE-1], //设置任务堆栈栈顶指针
Task4Prio); //Task4优先级为6
OSTaskCreate(Task5, //创建任务Task5
(void *)0, //给任务传递参数
&Task5Stk[TASK_STK_SIZE-1], //设置任务堆栈栈顶指针
Task5Prio); //Task5 优先级为7
OSTaskCreate(Task6, //创建任务Task6
(void *)0, //给任务传递参数
&Task6Stk[TASK_STK_SIZE-1], //设置任务堆栈栈顶指针
Task6Prio); //Task6 优先级为8
OSTaskCreate(Task7, //创建任务Task6
(void *)0, //给任务传递参数
&Task7Stk[TASK_STK_SIZE-1], //设置任务堆栈栈顶指针
Task7Prio); //Task6 优先级为8
OSTaskCreate(TaskClk,
(void *)0,
&TaskClkStk[TASK_STK_SIZE-1],
TaskClkPrio);
}
/*
*********************************************************************************************************
** INITIALIZE THE DISPLAY
** TaskStartDispInit
** 函数名称: TaskStartDispInit
** 功能描述: 屏幕初始化,显示些基本数据
** 参数: 无
** 返回: 无
*********************************************************************************************************
*/
static void TaskStartDispInit (void)
{
PC_DispStr( 0, 0, " uC/OS-II, The Real-Time Kernel ", DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);
PC_DispStr( 0, 1, " Jean J. Labrosse ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 2, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 3, " OSMEMDATA ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 4, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 5, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 5, 5, "Task OSFreeList Total OSNBlks Used OSNUsed Free OSNFree ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 5, 6, "---------- ------------ -------------- -------------- -------------- ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 7, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 8, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 9, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 10, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 11, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 12, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 13, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 14, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 15, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 16, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 17, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 18, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 19, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 20, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 21, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 22, "#Tasks : CPU Usage: % ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 23, "#Task switch/sec: ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 24, " <-PRESS 'ESC' TO QUIT-> ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);
/* 1111111111222222222233333333334444444444555555555566666666667777777777 */
/* 01234567890123456789012345678901234567890123456789012345678901234567890123456789 */
}
/*
*********************************************************************************************************
** UPDATE THE DISPLAY
** TaskStartDisp
** 函数名称: TaskStartDisp
** 功能描述: 屏幕数据更新,如任务数,cpu占用率
** 参数: 无
** 返回: 无
*********************************************************************************************************
*/
static void TaskStartDisp (void)
{
char s[80];
sprintf(s, "%5d", OSTaskCtr); /* Display #tasks running */
PC_DispStr(18, 22, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);
#if OS_TASK_STAT_EN > 0
sprintf(s, "%3d", OSCPUUsage); /* Display CPU usage in % */
PC_DispStr(36, 22, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);
#endif
sprintf(s, "%5d", OSCtxSwCtr); /* Display #context switches per second */
PC_DispStr(18, 23, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);
sprintf(s, "V%1d.%02d", OSVersion() / 100, OSVersion() % 100); /* Display uC/OS-II's version number */
PC_DispStr(75, 24, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);
switch (_8087) { /* Display whether FPU present */
case 0:
PC_DispStr(71, 22, " NO FPU ", DISP_FGND_YELLOW + DISP_BGND_BLUE);
break;
case 1:
PC_DispStr(71, 22, " 8087 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE);
break;
case 2:
PC_DispStr(71, 22, "80287 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE);
break;
case 3:
PC_DispStr(71, 22, "80387 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE);
break;
}
}
/*
*********************************************************************************************************
** DISPLAY THE MEMDATA
** MemDataDisp
** 函数名称: MemDataDisp
** 功能描述: 屏幕数据更新,如任务数,cpu占用率
** 参数: y:数据在屏幕显示的纵坐标
MemInfo:内存分区的信息数据结构OS_MEM_DATA
** 返回: 无
*********************************************************************************************************
*/
static void MemDataDisp(INT8U y,OS_MEM_DATA MemInfo)
{
char s[20];
sprintf(s, "%0x",MemInfo.OSFreeList);//显示头指针
PC_DispStr(20,y,s,DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
sprintf(s,"%d",MemInfo.OSNBlks);//显示分区内存块数目
PC_DispStr(35,y,s,DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
sprintf(s,"%d",MemInfo.OSNUsed);//显示已用内存块数目
PC_DispStr(50,y,s,DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
sprintf(s,"%d",MemInfo.OSNFree);//显示空闲内存块数目
PC_DispStr(65,y,s,DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -