📄 main.c
字号:
#include"..\ucos-ii\includes.h" /* uC/OS interface */#include "..\inc\drv.h"#include "..\ucos-ii\add\osaddition.h"#include "..\inc\OSFile.h"#include "..\inc\drv\Ustring.h"#include "..\inc\resource.h"#include "..\inc\SetTimeArea.h"#include <string.h>///******************任务定义***************///OS_STK Main_Stack[STACKSIZE*8]={0, }; //Main_Test_Task堆栈void Main_Task(void *Id); //Main_Test_Task#define Main_Task_Prio 12OS_STK Led_Flash_Stack[STACKSIZE]= {0, }; //LED闪烁任务堆栈void Led_Flash_Task(void *Id); //LED闪烁任务#define Led_Flash_Prio 60/**************已经定义的OS任务*************#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***************************************////////////*****************事件定义*****************///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 Led_Flash_Task(void *Id)//指示RTOS处于正常工作中{ unsigned char led_state; Uart_Printf(0,"\n10"); for (;;) { Led_Display(led_state); led_state=~led_state; OSTimeDly(250); }}//Led_Flash_Taskvoid initOSGUI() //初始化操作系统的图形界面{ initOSMessage(); initOSList(); initOSDC(); initOSCtrl(); initOSFile();}/////////////////////////////////////////////////////// Main function. //////////////////////////////////////////////////////int Main(int argc, char **argv){ ARMTargetInit(); // do target (uHAL based ARM system) initialisation // OSInit(); // needed by uC/OS-II // uHALr_ResetMMU(); LCD_Init(); //初始化LCD模块 LCD_printf("LCD initialization is OK\n"); LCD_printf("320 x 240 Text Mode\n"); LoadFont(); LoadConfigSys(); // 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"); OSTaskCreate(Main_Task, (void *)0, (OS_STK *)&Main_Stack[STACKSIZE*8-1], Main_Task_Prio);// 1 OSTaskCreate(Led_Flash_Task, (void *)0, (OS_STK *)&Led_Flash_Stack[STACKSIZE-1], Led_Flash_Prio );// 10 OSAddTask_Init(); LCD_printf("Starting uCOS-II...\n"); LCD_printf("Entering graph mode...\n"); LCD_ChangeMode(DspGraMode); initOSGUI(); InitRtc(); Nand_Rw_Sem=OSSemCreate(1); //创建Nand-Flash读写控制权旗语,初值为1满足互斥条件// ARMTargetStart(); //Start the (uHAL based ARM system) system running // OSStart(); // start the game // // never reached // return 0;}//main//////////////////////////////////////////////////////////////////////////////////////////////////////////////////U8 onKey(int nkey, int fnkey);OS_STK Rtc_Disp_Stack[STACKSIZE]={0, }; //Rtc_Disp_Task堆栈void Rtc_Disp_Task(void *Id); //Rtc_Disp_Task#define Rtc_Disp_Task_Prio 14OS_EVENT *Rtc_Updata_Sem;//时钟更新控制权U32 mainstatus;PListCtrl pMainListCtrl;PTextCtrl pStatusTextCtrl;PTextCtrl ptimeTextCtrl;extern U16* MainFn[];extern U16* MainTip[];void onListselChange(U32 ctrlID, int ListSel){ switch(ctrlID){ case ID_MainListBox: if(mainstatus!=MAIN_SHOWBMP) SetTextCtrlText(pStatusTextCtrl, MainTip[ListSel],TRUE); break; }}void Main_Task(void *Id) //Main_Test_Task{ POSMSG pMsg=0; structRECT rect; ClearScreen(); Rtc_Updata_Sem=OSSemCreate(1); OSTaskCreate(Rtc_Disp_Task, (void *)0, (OS_STK *)&Rtc_Disp_Stack[STACKSIZE-1], Rtc_Disp_Task_Prio); //5 mainstatus=MAIN_MENU; SetRect(&rect, 0,18,120,209); //创建控制菜单 pMainListCtrl=CreateListCtrl(ID_MainListBox, &rect, 10,FONTSIZE_MIDDLE,CTRL_STYLE_DBFRAME,NULL); ReLoadListCtrl(pMainListCtrl,&MainFn[0],MAIN_FUNCTION_NUM); SetWndCtrlFocus(NULL, ID_MainListBox); SetRect(&rect, 0,220,264,239); //创建状态文本框 pStatusTextCtrl=CreateTextCtrl(ID_MainStatus, &rect, FONTSIZE_SMALL, CTRL_STYLE_3DUPFRAME,NULL,NULL); SetTextCtrlText(pStatusTextCtrl, MainTip[0],FALSE); SetRect(&rect, 265,220,319,239); //创建时间显示文本框 ptimeTextCtrl=CreateTextCtrl(ID_MainTimeStatus, &rect, FONTSIZE_SMALL, CTRL_STYLE_3DUPFRAME,NULL,NULL); ReDrawOSCtrl(); //消息循环 for(;;){ POS_Ctrl pCtrl; pMsg=WaitMessage(0); if(pMsg->pOSCtrl){ if(pMsg->pOSCtrl->CtrlMsgCallBk) (*pMsg->pOSCtrl->CtrlMsgCallBk)(pMsg); } else{ switch(pMsg->Message){ case OSM_LISTCTRL_SELCHANGE: onListselChange(pMsg->WParam,pMsg->LParam); break; case OSM_KEY: if(onKey(pMsg->WParam,pMsg->LParam) ) break; default: OSOnSysMessage(pMsg); break; } } DeleteMessage(pMsg); }}U8 OnKeyUp(){ switch(mainstatus){ case MAIN_SETTIME: SetTimeUp(); return TRUE; } return FALSE;}U8 OnKeyDown(){ switch(mainstatus){ case MAIN_SETTIME: SetTimeDown(); return TRUE; } return FALSE;}void OnDrawBmp();//选中绘图菜单void OnUsb_Download();void OnSetTime();void *MainFunction[]={(void*)OnDrawBmp,(void*)OnSetTime,(void*)OnUsb_Download};char FileExName[]={'B','M','P',0};char BmpFile[100][12];void OnSetTime(){ SetTimeSetFocus(); CreateSetTimeArea(TRUE); mainstatus=MAIN_SETTIME;}void OnUsb_Download(){ U32 key; char bmpfile[]={'U','S','B','-','B',' ',' ',' ','B','M','P'}; PDC pdc; pdc=CreateDC(); ShowBmp(pdc,bmpfile, 150, 20); OSTimeDly(500); mainstatus=MAIN_USBDOWNLOAD; EnterUsbConnect(); for(;;){ key=GetNoTaskKey(); if(((key+1)&0xffff)==16){ DestoryDC(pdc); ExitUsbConnect(); ClearScreen(); ReDrawOSCtrl(); //绘制所有的操作系统的控件 mainstatus=MAIN_MENU; return; } } DestoryDC(pdc); } void OnDrawBmp()//选中绘图菜单{ structRECT rect; char filename[9]; U32 filepos=0; U16 Ufilename[9]; int i=0; ListCtrlReMoveAll(pMainListCtrl); mainstatus=MAIN_SHOWBMP; while(ListNextFileName(&filepos, FileExName, filename)){ strChar2Unicode(Ufilename,filename); AddStringListCtrl(pMainListCtrl, Ufilename); strcpy(BmpFile[i],filename); strncat(BmpFile[i++],FileExName,3); } ReDrawOSCtrl();}void ShowListBmp(){ PDC pdc; ClearScreen(); pdc=CreateDC(); ShowBmp(pdc, BmpFile[pMainListCtrl->CurrentSel], 150, 20); ReDrawOSCtrl(); DestoryDC(pdc);}U8 OnOk(){ switch(mainstatus){ case MAIN_MENU: //主菜单状态 if(pMainListCtrl->CurrentSel>=0 && pMainListCtrl->CurrentSel<4) ( (void (*)(void)) (MainFunction[pMainListCtrl->CurrentSel]) )(); return TRUE; case MAIN_SETTIME: SetTimeOK(); return TRUE; case MAIN_SHOWBMP: ShowListBmp(); return TRUE; } return FALSE;}U8 OnCancel(){ PDC pdc; pdc=CreateDC(); switch(mainstatus){ case MAIN_SHOWBMP: //绘制图形状态 FillRect(pdc,150, 0, 319, 150, GRAPH_MODE_NORMAL, COLOR_WHITE); ReLoadListCtrl(pMainListCtrl,MainFn,MAIN_FUNCTION_NUM); mainstatus=MAIN_MENU; SetTextCtrlText(pStatusTextCtrl, MainTip[0],TRUE); ReDrawOSCtrl(); break; case MAIN_SETTIME: SetTimeCancel(); break; } DestoryDC(pdc); return TRUE;}U8 onKey(int nkey, int fnkey){ switch(nkey){ case 3: //F1=move up return OnKeyUp(); case 7: //F2=move down return OnKeyDown(); case 11: //F3=OK return OnOk(); case 15: //F4=cancel return OnCancel(); } return FALSE;}////////////////////////////////////////////////////////////////void Rtc_Disp_Task(void *Id) //时钟显示更新任务{ U16 strtime[10]; INT8U err; for(;;){ if(Rtc_IsTimeChange(RTC_SECOND_CHANGE)){//不需要更新显示 Rtc_Format("%H:%I:%S",strtime); SetTextCtrlText(ptimeTextCtrl, strtime,TRUE); } OSTimeDly(250); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -