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

📄 display.h

📁 ucos 实现任务创建
💻 H
字号:
#ifndef __DISPLAY_H__
#define __DISPLAY_H__

//#include "includes.h"


/*
*********************************************************************************************************
*                                               TYPE
*********************************************************************************************************
*/

typedef enum {
	STATE_WELCOME,
	STATE_WAITING,
	STATE_ENJOY,
	STATE_GOODBYE,
	STATE_SLEEPING,
	STATE_WORKING,
	STATE_GO_AWAY,
	STATE_INVALID,
}STATE_T;

typedef enum {
	TYPE_BARBER,
	TYPE_CUSTOMER,
}TYPE_T;
/*
*********************************************************************************************************
*                                               CONSTANTS
*********************************************************************************************************
*/

#define DISP_BACKGROUND 			DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY		// Background color
#define DISP_CUSTOMER				DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY		// Color of customer
#define DISP_BARBER					DISP_FGND_WHITE + DISP_BGND_BLACK				// Color of barber
#define DISP_ERROR					DISP_FGND_RED 	+ DISP_BGND_LIGHT_GRAY			// Color of error
#define ROW_BASE_CUSTOMER			3
#define ROW_BASE_BARBER			0
#define ROW_BASE_ERROR				15
#define ROW_START					4																					// Row start number	
#define ROW_ERROR					23																				// Row to display error
#define INCREASE_COLOUMN 			15



static  void  TaskStartDispInit(void);
static  void  TaskStartDisp(void);
static  void  Display_Info(INT8U num_ID, TYPE_T type, STATE_T state);
static  void  Display_Clear_Row(INT8U num_ID, TYPE_T type);


/*
*********************************************************************************************************
*                                        INITIALIZE THE DISPLAY
*********************************************************************************************************
*/
static  void  TaskStartDispInit (void)
{
/*                                1111111111222222222233333333334444444444555555555566666666667777777777 */
/*                      01234567890123456789012345678901234567890123456789012345678901234567890123456789 */
    PC_DispStr( 0,  0, "                         uC/OS-II, The Real-Time Kernel                         ", DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);
    PC_DispStr( 0,  1, "                             Barber---Customer(stone)                               ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
    PC_DispStr( 0,  2, "                                                                                ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
    PC_DispStr( 0,  3, "                                                                                          ", 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( 0,  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, "                                                                                              ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
    PC_DispStr( 0, 23, "                                                                                              ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
    PC_DispStr( 0, 24, "                            <-PRESS 'ESC' TO QUIT->                             ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);
    PC_DispStr( 0, 25, "                            <-PRESS 'ESC' TO QUIT->                             ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);

/*                                1111111111222222222233333333334444444444555555555566666666667777777777 */
/*                      01234567890123456789012345678901234567890123456789012345678901234567890123456789 */
}

/*
*********************************************************************************************************
*                                           UPDATE THE DISPLAY
*********************************************************************************************************
*/

static  void  TaskStartDisp (void)
{

	char	s[80];
    INT8U	i;

    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;

    }

    //for (i = 0; i < N_CHAIRS; i++){}


}

/*
*********************************************************************************************************
*                                       DISPLAY_INFORMATION
*********************************************************************************************************
*/
static  void  Display_Info(INT8U num_ID, TYPE_T type, STATE_T state)
{
	
	STATE_T	disp_state	= state;
	TYPE_T	work_type		= type;
	INT8U 	num_row 		= 0;
	INT8U	num_col			= 0;
	char		s[80];
	
	
	switch (work_type) {
		
		case TYPE_BARBER:
			num_row = ROW_START + ROW_BASE_BARBER + num_ID;
					
			switch (disp_state) {
				case STATE_SLEEPING:
					num_col += 1 * INCREASE_COLOUMN;
					sprintf(s, "Sleeping...");
					PC_DispStr(num_col, num_row, s, DISP_BARBER);
					break;
				case STATE_WORKING:
					num_col += 2 * INCREASE_COLOUMN;
					sprintf(s, "Working...");
					PC_DispStr(num_col, num_row, s, DISP_BARBER);
					break;
				default:
					sprintf(s, "Barber(%d): ", num_ID);
					PC_DispStr(num_col, num_row, s, DISP_BARBER);
			}
			break;
		
		
		case TYPE_CUSTOMER:
			num_row = ROW_START + ROW_BASE_CUSTOMER+ num_ID;
	
			switch (disp_state) {
				
				case STATE_GO_AWAY:
					num_col += 1 * INCREASE_COLOUMN;
					sprintf(s, "No chair, go away!!");
					PC_DispStr(num_col, num_row, s, DISP_ERROR);
					break;
				case STATE_INVALID:
					num_col = ROW_START + ROW_ERROR;
					sprintf(s, "Invalid chair number!!");
					PC_DispStr(num_col, num_row, s, DISP_ERROR);
					break;
				case STATE_WELCOME:
					num_col += 1 * INCREASE_COLOUMN; 
					sprintf(s, "Welcome!!");
					PC_DispStr(num_col, num_row, s, DISP_CUSTOMER);
					break;
				case STATE_WAITING:
					num_col += 2 * INCREASE_COLOUMN;
					sprintf(s, "Waiting...");
					PC_DispStr(num_col, num_row, s, DISP_CUSTOMER);
					break;
				case STATE_ENJOY:
					num_col += 3 * INCREASE_COLOUMN;
					sprintf(s, "Enjoy...");
					PC_DispStr(num_col, num_row, s, DISP_CUSTOMER);
					break;
				case STATE_GOODBYE:
					num_col += 4 * INCREASE_COLOUMN;
					sprintf(s, "Goodbye!!");
					PC_DispStr(num_col, num_row, s, DISP_CUSTOMER);
					break;
				default:
					sprintf(s, "Customer(%d): ", num_ID);
					PC_DispStr(num_col, num_row, s, DISP_CUSTOMER);
				}
				break;
	
			default:
				num_row = ROW_START + ROW_ERROR;
				sprintf(s, "Error: Invalid type!!");
				PC_DispStr(num_col, num_row, s, DISP_ERROR);
		}
}



static void Display_Clear_Row(INT8U num_ID, TYPE_T type)
{
	TYPE_T 	work_type	= type;
	INT8U 	num_row 	= 0;
	INT8U	num_col		= 0;
	
	switch (work_type) {
		case TYPE_BARBER:
			num_row = ROW_START + ROW_BASE_BARBER + num_ID;
			PC_DispStr(num_col, num_row, "                                                                                ", DISP_BACKGROUND);
			break;
		case TYPE_CUSTOMER:
			num_row = ROW_START + ROW_BASE_CUSTOMER+ num_ID;
			PC_DispStr(num_col, num_row, "                                                                                ", DISP_BACKGROUND);
			break;
		default:
			num_row = num_ID;
			PC_DispStr(num_col, num_row, "                                                                                ", DISP_BACKGROUND);
	}
	
}



#endif // __DISPLAY_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -