main.c

来自「博创2410的实验代码」· C语言 代码 · 共 447 行

C
447
字号
/***************************************************************************\
	Copyright (c) 2004-2007 threewater@up-tech.com, All rights reserved.
	by threewter	2004.5.12
\***************************************************************************/
/***************************************************************************\
    #说明: C  main 函数,ucos-ii初始化等定义
	----------------------------------  Bug  --------------------------------------

	----------------------------------  TODO list  --------------------------------------

	----------------------------------修正--------------------------------------
	2004-5-12	创建

\***************************************************************************/

#include"../ucos-ii/includes.h"               /* uC/OS interface */
#include "../ucos-ii/add/osaddition.h"
#include "../inc/drivers.h"

#include "../inc/sys/lib.h"
#include "../src/gui/gui.h"
#include <string.h>
#include <stdio.h>
#include"../inc/drv/AD.h"
#pragma import(__use_no_semihosting_swi)  // ensure no functions that use semihosting 

/**************已经定义的OS任务*************
#define SYS_Task_Prio				1
#define Touch_Screen_Task_Prio		9
#define Main_Task_Prio     12
#define Key_Scan_Task_Prio      58
#define Lcd_Fresh_prio           59
#define Led_Flash_Prio           60
***************************************/////////

#define ID_ChannelTextCtrl 101
#define ID_ValueTextCtrl 102
#define Draw_Wnd_ID 104
PTextCtrl pChannelTextCtrl,pValueTextCtrl;
//float r0,r1,r2; 
int WarnningData[3]={33,33,33};
int edit[2]={0,0};

///******************任务定义***************///
OS_STK Main_Stack[STACKSIZE*8]={0, };   //Main_Test_Task堆栈
void Main_Task(void *Id);             //Main_Test_Task
#define Main_Task_Prio     12

OS_STK Display_Task_Stack[STACKSIZE]={0, };   //Main_Test_Task堆栈
void Display_Task(void *Id);             //Main_Test_Task
#define Display_Task_Prio     20

OS_STK AD0_Task_Stack[STACKSIZE]={0, };   //Main_Test_Task堆栈
void AD0_Task(void *Id);             //Main_Test_Task
#define AD0_Task_Prio     21

OS_STK AD1_Task_Stack[STACKSIZE]={0, };   //Main_Test_Task堆栈
void AD1_Task(void *Id);             //Main_Test_Task
#define AD1_Task_Prio     22

OS_STK AD2_Task_Stack[STACKSIZE]={0, };   //Main_Test_Task堆栈
void AD2_Task(void *Id);             //Main_Test_Task
#define AD2_Task_Prio     23

OS_EVENT *Mbox0;
OS_EVENT *Mbox1;
OS_EVENT *Mbox2;
int sysnumber;

int main(void)
{
	
	ARMTargetInit();        // do target (uHAL based ARM system) initialisation //
	OSInit();               // needed by uC/OS-II //
	OSInitUart();
	initOSFile();
#if USE_MINIGUI==0
	initOSMessage();
	initOSList();
	initOSDC();
	initOSCtrl();
	LoadFont();
#endif
	loadsystemParam();
	// create the tasks in uC/OS and assign increasing //
	// priorities to them so that Task3 at the end of  //
	// the pipeline has the highest priority.          //
	LCD_printf("Create task on uCOS-II...\n");
	Mbox0 = OSMboxCreate((void *)0); 
	Mbox1 = OSMboxCreate((void *)0); 
	Mbox2 = OSMboxCreate((void *)0); 
	OSTaskCreate(Main_Task,  (void *)0,  (OS_STK *)&Main_Stack[STACKSIZE*8-1],  Main_Task_Prio);// 创建系统任务
	OSTaskCreate(Display_Task,(void *)0,  (OS_STK *)&Display_Task_Stack[STACKSIZE-1],  Display_Task_Prio);// 20
	OSTaskCreate(AD0_Task,(void *)0,  (OS_STK *)&AD0_Task_Stack[STACKSIZE-1],  AD0_Task_Prio);
	OSTaskCreate(AD1_Task,(void *)0,  (OS_STK *)&AD1_Task_Stack[STACKSIZE-1],  AD1_Task_Prio);
	OSTaskCreate(AD2_Task,(void *)0,  (OS_STK *)&AD2_Task_Stack[STACKSIZE-1],  AD2_Task_Prio);
	OSAddTask_Init(1);//创建系统附加任务
	LCD_printf("Starting uCOS-II...\n");
	LCD_printf("Entering graph mode...\n");
	LCD_ChangeMode(DspGraMode);
	OSStart();//操作系统任务调度开始
	//不会执行到这里
	return 0;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

U8 onKey(int nkey, int fnkey)
{
	U16 str[20];
	static BOOLEAN input=FALSE;
	static int EditNumber=1;
	if(EditNumber==1)
	{
		switch(nkey)
		{	
		case 13://OK('\r')
			if(!input)
			{
				SetWndCtrlFocus(NULL, ID_ChannelTextCtrl);
				pChannelTextCtrl->text[0]=0;  //清空文本框
				SetTextCtrlEdit(pChannelTextCtrl, TRUE);
				DrawTextCtrl(pChannelTextCtrl);
				input=TRUE;
				edit[0]=1;
			}
			else
			{	
				sysnumber=Unicode2Int(pChannelTextCtrl->text);//将文本框中的内容由Unicode 变为整形
				SetTextCtrlEdit(pChannelTextCtrl, FALSE);
				DrawTextCtrl(pChannelTextCtrl);
				input=FALSE;
				edit[0]=0;
				EditNumber=2;
			}
			return TRUE;
		case 46://Cancel('-')
			SetTextCtrlEdit(pChannelTextCtrl, FALSE);
			input=FALSE;
			edit[0]=0;
			EditNumber=2;
			return TRUE;
		}
		
	}
	else if(EditNumber==2)
	{
		switch(nkey)
		{	
		case 13://OK('\r')
			if(!input)
			{
				SetWndCtrlFocus(NULL, ID_ValueTextCtrl);
				pValueTextCtrl->text[0]=0;  //清空文本框
				SetTextCtrlEdit(pValueTextCtrl, TRUE);
				DrawTextCtrl(pValueTextCtrl);
				input=TRUE;
				edit[1]=1;
			}
			else
			{	
				SetTextCtrlEdit(pValueTextCtrl, FALSE);
				DrawTextCtrl(pValueTextCtrl);
				input=FALSE;
				edit[1]=0;
				EditNumber=1;
				WarnningData[sysnumber]=Unicode2Int(pValueTextCtrl->text);
			}
			return TRUE;
		case 46://Cancel('-')
			SetTextCtrlEdit(pValueTextCtrl, FALSE);
			DrawTextCtrl(pValueTextCtrl);
			input=FALSE;
			edit[1]=0;
			EditNumber=1;
			return TRUE;
		}
	}
	return FALSE;
}

void Main_Task(void *Id)             //Main_Test_Task
{
	POSMSG pMsg=0;
	init_ADdevice();
	for(;;)
	{
		POS_Ctrl pCtrl;
		pMsg=WaitMessage(0);
		if(pMsg->pOSCtrl)
		{
			if(pMsg->pOSCtrl->CtrlMsgCallBk)
				(*pMsg->pOSCtrl->CtrlMsgCallBk)(pMsg);
		}
		else
		{
			switch(pMsg->Message)
			{
			case OSM_KEY:
				pCtrl=GetCtrlfromID(NULL, GetWndCtrlFocus(NULL));
				if(pCtrl->CtrlType==CTRLTYPE_WINDOW)
				{
					if((((PWnd)pCtrl)->style&WND_STYLE_MODE)==WND_STYLE_MODE)
					{
						//焦点是有模式窗口,消息直接传递过去
						OSOnSysMessage(pMsg);
						break;
					}
				}
				if(onKey(pMsg->WParam,pMsg->LParam) )
					break;
			default:
				OSOnSysMessage(pMsg);
				break;
			}
		}
		DeleteMessage(pMsg);
		OSTimeDly(200);
	}
}

void Display_Task(void * Id)            //Main_Test_Task
{
	PDC pdc;
	structRECT ChannelTextCtrl_Rect,ValueTextCtrl_Rect,Draw_Wnd_Rect;
	char Channel_Caption_8[10]="Channel:";
	char Value_Caption_8[10]="Value:";
	char Draw_Wnd_Caption_8[]="Draw Window";
	char vol_8[]="Vol";
	char chn_8[]="Chn";
	char chn0_8[]="0";
	char chn1_8[]="1";
	char chn2_8[]="2";
	
	char vol_10_8[]="10";
	char vol_20_8[]="20";
	char  vol_30_8[]="30";
	U16 Channel_Caption_16[10];
	U16 Value_Caption_16[10];
	U16 Draw_Wnd_Caption_16[20];
	U16 vol_16[5];
	U16 chn_16[5];
	U16 chn0_16[2];
	U16 chn1_16[2];
	U16 chn2_16[2];

	U16 vol_10_16[3];
	U16 vol_20_16[3];
	U16 vol_30_16[3];
	float* r0data;
	float* r1data;
	float* r2data;
	Wnd Draw_Wnd;
	PWnd pDraw_Wnd;
	int warnning[3]={1,1,1};
	BOOLEAN IsEdit=0;
	INT8U err;
	float r0,r1,r2;
	pdc=CreateDC();
	pDraw_Wnd=&Draw_Wnd;
	strChar2Unicode(Draw_Wnd_Caption_16, Draw_Wnd_Caption_8);
	strChar2Unicode(Channel_Caption_16, Channel_Caption_8);
	strChar2Unicode(Value_Caption_16, Value_Caption_8);
	strChar2Unicode(chn_16, chn_8);
	strChar2Unicode(vol_16, vol_8);
	strChar2Unicode(chn0_16, chn0_8);
	strChar2Unicode(chn1_16, chn1_8);
	strChar2Unicode(chn2_16, chn2_8);
	strChar2Unicode(vol_10_16,vol_10_8);
	strChar2Unicode(vol_20_16,vol_20_8);
	strChar2Unicode(vol_30_16,vol_30_8);
	SetRect(&ChannelTextCtrl_Rect, 20,100,100,140);
	SetRect(&ValueTextCtrl_Rect, 20,260,100,300);
	SetRect(&Draw_Wnd_Rect, 139, 9, 593, 423);
	pChannelTextCtrl=CreateTextCtrl(ID_ChannelTextCtrl, &ChannelTextCtrl_Rect, FONTSIZE_MIDDLE, CTRL_STYLE_FRAME, NULL,NULL);
	pValueTextCtrl=CreateTextCtrl(ID_ValueTextCtrl, &ValueTextCtrl_Rect, FONTSIZE_MIDDLE, CTRL_STYLE_FRAME, NULL,NULL);
	pDraw_Wnd=CreateWindow(Draw_Wnd_ID, &Draw_Wnd_Rect, FONTSIZE_SMALL,WND_STYLE_MODELESS, Draw_Wnd_Caption_16, NULL);
	ClearScreen();
	TextOut(pdc, 110, 10, vol_16, TRUE, FONTSIZE_MIDDLE);
	TextOut(pdc, 560, 430, chn_16, TRUE,FONTSIZE_MIDDLE);
	TextOut(pdc, 200, 430, chn0_16, TRUE, FONTSIZE_MIDDLE);
	TextOut(pdc, 350, 430, chn1_16, TRUE, FONTSIZE_MIDDLE);
	TextOut(pdc, 500, 430, chn2_16, TRUE, FONTSIZE_MIDDLE);
	
	TextOut(pdc, 120, (int)(415-1*400/3.3), vol_10_16, TRUE, FONTSIZE_MIDDLE);
	TextOut(pdc, 120, (int)(415-2*400/3.3), vol_20_16, TRUE, FONTSIZE_MIDDLE);
	TextOut(pdc, 120, (int)(415-3*400/3.3), vol_30_16, TRUE, FONTSIZE_MIDDLE);
	DrawTextCtrl(pChannelTextCtrl);
	DrawTextCtrl(pValueTextCtrl);
	
	for(;;)
	{
		TextOut(pdc, 20, 75, Channel_Caption_16, TRUE, FONTSIZE_MIDDLE);
		TextOut(pdc, 20, 235, Value_Caption_16, TRUE, FONTSIZE_MIDDLE);
		if(edit[0]==1)
		{
			if(IsEdit==1)
			{
				FillRect(pdc, 20, 75, 110, 95, GRAPH_MODE_NORMAL, COLOR_WHITE);
				IsEdit=0;
			}
			else
			{
				IsEdit=1;
			}
		}
		if(edit[1]==1)
		{
			if(IsEdit==1)
			{
				FillRect(pdc, 20, 235, 110, 255, GRAPH_MODE_NORMAL, COLOR_WHITE);
				IsEdit=0;
			}
			else
			{
				IsEdit=1;
			}
		}
		DrawWindow(pDraw_Wnd);
		MoveTo(pdc, 140, 20);
		LineTo(pdc, 150,10);
		LineTo(pdc, 160, 20);
		MoveTo(pdc,150 , 10);
		LineTo(pdc, 150, 420);
		LineTo(pdc, 590, 420);
		MoveTo(pdc, 580, 410);
		LineTo(pdc, 590, 420);
		LineTo(pdc, 580, 430);
		MoveTo(pdc, 150, (int)(420-1*400/3.3));
		LineTo(pdc, 590, (int)(420-1*400/3.3));
		MoveTo(pdc, 150, (int)(420-2*400/3.3));
		LineTo(pdc, 590, (int)(420-2*400/3.3));
		MoveTo(pdc, 150, (int)(420-3*400/3.3));
		LineTo(pdc, 590, (int)(420-3*400/3.3));
        r0data = (float *)OSMboxAccept(Mbox0);
        if(r0data!=NULL)
        r0=*r0data;
        r1data = (float *)OSMboxAccept(Mbox1);
        if(r1data!=NULL)
        r1=*r1data;
        r2data = (float *)OSMboxAccept(Mbox2);
        if(r2data!=NULL)
        r2=*r2data;
		if(r0<=WarnningData[0])
		{
			FillRect(pdc, 190, (int)(420-r0*40/3.3), 220, 420,GRAPH_MODE_NORMAL, COLOR_BLACK);
		}
		else
		{
			if(warnning[0]==1)
			{
				FillRect(pdc, 190, (int)(420-r0*40/3.3), 220, 420, GRAPH_MODE_NORMAL,COLOR_BLACK);
				warnning[0]=0;
			}
			else
			{
				warnning[0]=1;
				FillRect(pdc, 190, (int)(420-WarnningData[0]*40/3.3), 220, 420, GRAPH_MODE_NORMAL,COLOR_BLACK);
			}
		}
		if(r1<=WarnningData[1])
		{
			FillRect(pdc, 340, (int)(420-r1*40/3.3), 370, 420, GRAPH_MODE_NORMAL,COLOR_BLACK);
		}
		else
		{
			if(warnning[1]==1)
			{
				FillRect(pdc, 340, (int)(420-r1*40/3.3), 370, 420, GRAPH_MODE_NORMAL,COLOR_BLACK);
				warnning[1]=0;
			}
			else
			{
				warnning[1]=1;
				FillRect(pdc, 340, (int)(420-WarnningData[1]*40/3.3), 370, 420, GRAPH_MODE_NORMAL,COLOR_BLACK);
			}
		}
		if(r2<=WarnningData[2])
		{
			FillRect(pdc, 490, (int)(420-r2*40/3.3), 520, 420,GRAPH_MODE_NORMAL, COLOR_BLACK);
		}
		else
		{
			if(warnning[2]==1)
			{
				FillRect(pdc, 490, (int)(420-r2*40/3.3), 520, 420, GRAPH_MODE_NORMAL,COLOR_BLACK);
				warnning[2]=0;
			}
			else
			{
				warnning[2]=1;
				FillRect(pdc, 490, (int)(420-WarnningData[2]*40/3.3), 520, 420, GRAPH_MODE_NORMAL,COLOR_BLACK);
			}
		}
		OSTimeDly(500);
	}
}

void AD0_Task(void * Id)            //Main_Test_Task
{
	int i;
	float r0;
	for(;;)
	{
		for(i=0;i<=1;i++)
		{
		r0=GetADresult(0)*33/1023;
		}
		OSMboxPost(Mbox0, &r0);
		//Uart_Printf(0,"a0=%f\t",r0);
		OSTimeDly(100);
	}
}

void AD1_Task(void * Id)            //Main_Test_Task
{	
	int i;
	float r1;
	for(;;)
	{	
		for(i=0;i<=1;i++) 
		{
		r1=GetADresult(1)*33/1023;
		}
		OSMboxPost(Mbox1, &r1);
		//Uart_Printf(0,"a1=%f\t",r1);
		OSTimeDly(100);
	}
}

void AD2_Task(void * Id)            //Main_Test_Task
{
	int i;
	float r2;
	for(;;)
	{
		for(i=0;i<=1;i++)
		{
		r2=GetADresult(2)*33/1023;
		}
		OSMboxPost(Mbox2, &r2);
		//Uart_Printf(0,"a2=%f\t",r2);
		OSTimeDly(100);
	}
}

⌨️ 快捷键说明

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