⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 该程序是本人在ucos_ii基础上调用基本函数了解内存分区变化
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -