📄 main.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 + -