📄 main.c
字号:
/***************************************************************************\
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>
#pragma import(__use_no_semihosting_swi) // ensure no functions that use semihosting
///******************任务定义***************///
OS_STK Main_Stack[STACKSIZE]={0, }; //Main_Test_Task堆栈
void Main_Task(void *Id); //Main_Test_Task
#define Main_Task_Prio 12
OS_STK test_Stack[STACKSIZE]={0, }; //test_Test_Task堆栈
void test_Task(void *Id); //test_Test_Task
#define test_Task_Prio 15
/**************已经定义的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
***************************************/////////
///*****************事件定义*****************///
/////////////////////////////////////////////////////
// Main function. //
////////////////////////////////////////////////////
int main(void)
{
ARMTargetInit(); // do target (uHAL based ARM system) initialisation //
OSInit(); // needed by uC/OS-II //
OSInitUart(); //串口初始化
initOSFile(); //OS文件系统初始化
#if USE_MINIGUI==0
initOSMessage(); //创建OS消息队列
initOSList(); //申请系统列表
initOSDC(); //申请DC
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");
OSTaskCreate(Main_Task, (void *)0, (OS_STK *)&Main_Stack[STACKSIZE-1], Main_Task_Prio);
// OSTaskCreate(test_Task, (void *)0, (OS_STK *)&test_Stack[STACKSIZE-1], test_Task_Prio);
OSAddTask_Init(1);
LCD_printf("Starting uCOS-II...\n");
LCD_printf("Entering graph mode...\n");
LCD_ChangeMode(DspGraMode); //改变显示模式
OSStart(); // start the OS //
// never reached //
return 0;
}//main
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
PListCtrl pMainListCtrl;//列表框控件指针
char FileExName[]={'B','M','P',0};//文件扩展名
char BmpFile[100][256];//文件名数组
#define ID_MainListBox 101//列表框控件ID
int ListNextFileName(U32 pos, char exname[], char filename[]) //列出文件
{
file_DIR *d=(file_DIR *)pos; //文件目录指针
file_dirent *de;
file_stat s;
char* str;
if(d==NULL){
d = opendir("/sys/ucos/fj"); //打开文件目录
if(!d)
{
printf("opendir failed\n"); //打开目录失败
return 0;
}
}
while(1){
de = readdir(d); //读取目录下信息
if(de==NULL){ //如果为空则关闭目录
closedir(d);
return 0;
}
str = de->d_name+strlen(de->d_name)-4;
if(strcmp(str, ".BMP")!=0 && strcmp(str, ".bmp")!=0) //拷贝.BMP或.bmp文件到字符串str
continue;
sprintf(filename,"/sys/ucos/fj/%s", de->d_name); //输出文件名到filename
lstat(filename,&s);
if((s.st_mode & S_IFMT)!=S_IFREG)
continue;
break;
}
printf("find file: %s\n", filename);
return (int)d;
}
void onSlideShow()
{
PDC pdc;
static int p=0;
ClearScreen();
pdc=CreateDC();//创建绘图设备上下文
ShowBmp(pdc, BmpFile[p++], 260, 20);//显示图片
ReDrawOSCtrl();//重画控件
DestoryDC(pdc);//删除绘图设备上下文
if(p>=pMainListCtrl->ListNum)
p=0;
}
void CreateFileList()
{
structRECT rect;//定义矩形结构
char filename[256];
U32 filepos=0;
U16 Ufilename[256];
int i=0;
SetRect(&rect, 0,18,240,200); //创建列表框控件
pMainListCtrl=CreateListCtrl(ID_MainListBox, &rect, 100,FONTSIZE_MIDDLE,CTRL_STYLE_DBFRAME,NULL);//创建列表框
SetWndCtrlFocus(NULL, ID_MainListBox);//焦点移到列表框控件
while(filepos=ListNextFileName(filepos, FileExName, filename)){
strChar2Unicode(Ufilename,filename);//将文件名转换为Unicode
AddStringListCtrl(pMainListCtrl, Ufilename);//向列表框中添加表项
strcpy(BmpFile[i++],filename);//将文件名存入文件名数组
}
onSlideShow();
ReDrawOSCtrl();//重画控件
}
U8 onKey(int nkey, int fnkey);
void Main_Task(void *Id) //Main_Test_Task
{
POSMSG pMsg=0;//定义消息结构
ClearScreen();//清屏
CreateFileList(); //创建文件列表框
//消息循环
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;
case OSM_TOUCH_SCREEN://键盘消息
if(TCHSCR_ACTION_UP == pMsg->LParam)
onSlideShow();
break;
}
}
DeleteMessage(pMsg);//删除消息
}
}
U8 onKey(int nkey, int fnkey)
{
PDC pdc;
switch(nkey){
case '\r'://enter
ClearScreen();
pdc=CreateDC();//创建绘图设备上下文
ShowBmp(pdc, BmpFile[pMainListCtrl->CurrentSel], 260, 20);//显示图片
ReDrawOSCtrl();//重画控件
DestoryDC(pdc);//删除绘图设备上下文
return TRUE;
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -