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

📄 main.c

📁 博创2410的实验代码
💻 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 + -