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

📄 main.c

📁 Arm9/uCOS平台上的例子
💻 C
字号:
#include"..\ucos-ii\includes.h"               /* uC/OS interface */
#include "..\ucos-ii\add\osaddition.h"
#include "..\inc\drv.h"

#include <string.h>

#pragma import(__use_no_semihosting_swi)  // ensure no functions that use semihosting 
///******************任务定义***************///
OS_STK Main_Stack[STACKSIZE*8]={0, };   //Main_Test_Task堆栈
void Main_Task(void *Id);             //Main_Test_Task
#define Main_Task_Prio     12

/**************已经定义的OS任务*************
tcp监控任务		11
以太网物理层监控任务	8
触摸屏任务		9
键盘任务		10
lcd刷新任务		59
系统任务		1
*****************************************************/

///*****************事件定义*****************///
OS_EVENT *Nand_Rw_Sem;                   //Nand_Flash读写控制权旗语
//and you can use it as folloeing:
//    Nand_Rw_Sem=OSSemCreate(1);        //创建Nand-Flash读写控制权旗语,初值为1满足互斥条件//
//    OSSemPend(Nand_Rw_Sem,0,&err);
//    OSSemPost(Nand_Rw_Sem);

OS_EVENT *Uart_Rw_Sem;                   //Uart读写控制权旗语
//and you can use it as folloeing:
//    Uart_Rw_Sem=OSSemCreate(1);        //创建Uart读写控制权旗语,初值为1满足互斥条件//
//    OSSemPend(Uart_Rw_Sem,0,&err);
//    OSSemPost(Uart_Rw_Sem);
//////////////////////////////////////////////////////////

void initOSGUI()	//初始化操作系统的图形界面
{
	initOSMessage();
	initOSList();
	initOSDC();
	initOSCtrl();
	initOSFile();
}
/////////////////////////////////////////////////////
//                  Main function.                //
////////////////////////////////////////////////////

int main(void)
{
	ARMTargetInit(); //开发板初始化
	OSInit(); //操作系统初始化      
	uHALr_ResetMMU();//复位MMU
	LCD_Init();             //初始化LCD模块
	LCD_printf("LCD initialization is OK\n");//向液晶屏输出数据
	LCD_printf("320 x 240  Text Mode\n");
	initOSGUI();//初始化图形界面
	LoadFont();//调Unicode字库
	LoadConfigSys();//使用config.sys文件配置系统设置
	LCD_printf("Create task on uCOS-II...\n");
	OSTaskCreate(Main_Task,  (void *)0,  (OS_STK *)&Main_Stack[STACKSIZE*8-1],  Main_Task_Prio);// 创建系统任务
	OSAddTask_Init();//创建系统附加任务
	LCD_printf("Starting uCOS-II...\n");
	LCD_printf("Entering graph mode...\n");
	LCD_ChangeMode(DspGraMode);//变LCD显示模式为文本模式
	InitRtc();//初始化系统时钟
	Nand_Rw_Sem=OSSemCreate(1);   //创建Nand-Flash读写控制权旗语,初值为1满足互斥条件//
	OSStart();//操作系统任务调度开始
	//不会执行到这里
	return 0;
}


void onKey(PDC pdc2,int nkey, int fnkey)
{
	
	int oldx,oldy;//保存原来坐标系位置
	int newx=100,newy=100;
    SetDrawOrg(pdc2, newx,newy, &oldx, & oldy); 
	switch(nkey){
	case 5:
	  newx=oldx;newy=oldy-20;
	  SetDrawOrg(pdc2, newx,newy, &oldx, & oldy); 
	  ClearScreen();
	  Circle(pdc2,160,200,30);
	   ReDrawOSCtrl();
	  break;
	case 8:
      newx=oldx-20;newy=oldy;
      SetDrawOrg(pdc2, newx,newy, &oldx, & oldy);
      ClearScreen(); 
      Circle(pdc2,160,200,30);
       ReDrawOSCtrl();
	  break;
	case 10:
      newx=oldx+20;newy=oldy;
      SetDrawOrg(pdc2, newx,newy, &oldx, & oldy); 
      ClearScreen();
      Circle(pdc2,160,200,30);
       ReDrawOSCtrl();
	  break;
	case 12:
	  newx=oldx;newy=oldy+20;
	  SetDrawOrg(pdc2, newx,newy, &oldx, & oldy);
	  ClearScreen();
      Circle(pdc2,160,200,30);
       ReDrawOSCtrl();
	  break;
	}
	//DestoryDC(pdc);//删除绘图设备上下文	
}


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

void Main_Task(void *Id)             //Main_Test_Task
{
	PDC pdc;
        POSMSG pMsg;
        int oldx,oldy;

      

	structPOINT Touch_Position,*pTouch_Position;

        #define Button1_ID	100
        #define Button2_ID	101
     
	ButtonCtrl Button1,Button2;
	PButtonCtrl pButton1,pButton2;
	

	structRECT Button1_RECT,Button2_RECT;
	structRECT *pButton1_RECT,*pButton2_RECT;

	char Button1_Caption_8[]="BlueCircle";
	char Button2_Caption_8[]="GreenCircle";
	

	U16 Button1_Caption_16[20];
	U16 Button2_Caption_16[20];	
	
	
	
	pTouch_Position=&Touch_Position;
	
	pButton1=&Button1;
	pButton2=&Button2;	
	
	pButton1_RECT=&Button1_RECT;
	pButton2_RECT=&Button2_RECT;
	
	strChar2Unicode(Button1_Caption_16, Button1_Caption_8);
	strChar2Unicode(Button2_Caption_16, Button2_Caption_8);	
	
	Button1_RECT.bottom=70;
	Button1_RECT.left=10;
	Button1_RECT.right=60;
	Button1_RECT.top=30;

	Button2_RECT.bottom=120;
	Button2_RECT.left=10;
	Button2_RECT.right=60;
	Button2_RECT.top=80;

	pButton1=CreateButton(Button1_ID, pButton1_RECT, FONTSIZE_SMALL, CTRL_STYLE_3DDOWNFRAME, Button1_Caption_16, NULL);
	pButton2=CreateButton(Button2_ID, pButton2_RECT, FONTSIZE_SMALL, CTRL_STYLE_3DDOWNFRAME, Button2_Caption_16, NULL);
	

	ClearScreen();
	
	DrawButton(pButton1);
	DrawButton(pButton2);
	
	pdc=CreateDC();
	
	for(;;)
	{
		pMsg=WaitMessage(0);
	         switch(pMsg->Message)
		{
			case OSM_TOUCH_SCREEN:
				Touch_Position.x=pMsg->WParam&0xffff;
				Touch_Position.y=pMsg->WParam>>16;
				if(IsInRect2(pButton1_RECT, pTouch_Position))
				{
				                     ClearScreen();
                                     ReDrawOSCtrl(); //必须重画控件,否则按钮不再显示,但是可以起触摸感应作用
                                     SetDrawOrg(pdc, 0,0, &oldx, & oldy); 
                                     SetPenColor(pdc,RGB(255,0,0));
                                      Circle(pdc,160,200,30);
                                     //OSTimeDly(60);	
				}
				 else if(IsInRect2(pButton2_RECT, pTouch_Position))
				{
                                     ClearScreen();
                                     ReDrawOSCtrl();
                                     SetDrawOrg(pdc, 0,0, &oldx, & oldy); 
                                     SetPenColor(pdc,RGB(0,255,0));
				                     Circle(pdc,160,200,30);
                                     //OSTimeDly(60);
				}
			         break;

	                 case OSM_KEY://键盘消息
			         onKey(pdc,pMsg->WParam,pMsg->LParam);
			         break;   
           	}

		DeleteMessage(pMsg); //必须有,否则多次重复操作后内存不够用,运行速度明显变慢
	}
	DestoryDC(pdc);
}

⌨️ 快捷键说明

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