main.c
来自「博创2410的实验代码」· C语言 代码 · 共 263 行
C
263 行
/***************************************************************************\
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
unsigned char width;
///******************任务定义***************///
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
***************************************/////////
U8 onKey(int nkey, int fnkey);
///*****************事件定义*****************///
/////////////////////////////////////////////////////
// Main function. //
////////////////////////////////////////////////////
int main(void)
{
ARMTargetInit(); // do target (uHAL based ARM system) initialisation //
OSInit(); // needed by uC/OS-II //
OSInitUart();
initOSFile();
#if USE_MINIGUI==0
initOSMessage();
initOSList();
initOSDC();
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
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
PTextCtrl pTextCtrl;//文本框结构控件指针
#define ID_MainTextCtrl 101//文本框控件ID
int sysnumber;
char sysfilename [ ]="/sys/ucos/fj/sys1.dat";//打开的文件名
char sysfilename1 [ ]="/sys/ucos/fj/sys1.dat";//打开的文件名
void LoadSysNumber()
{
FILE *pfile;//定义文件结构指针
pfile=fopen(sysfilename,"r");//打开文件
if(pfile==NULL){//打开文件失败
printf("\nopen file failure\n");
sysnumber=0;
return;
}
printf("\nopen file success\n");
fread(&sysnumber,sizeof(int),1,pfile);//读文件
fclose(pfile);//关闭文件
}
int filef=0,filepos=13;
char filename[40]="/sys/ucos/fj/";
U16 ufilename[40];
void SaveSysNumber()
{
FILE *pfile;
PDC pdc;
U8 str[30]="please input file name";
U16 str1[30];
POSMSG pMsg=0;//定义消息结构
strChar2Unicode(str1, str);
ClearScreen();//清屏
pdc=CreateDC();//创建绘图设备上下文f
TextOut(pdc, 150, 150, str1,TRUE,FONTSIZE_MIDDLE );
filef=1;
while(filef!=2)
{pMsg=WaitMessage(0);//等待消息
if(pMsg->Message==OSM_KEY)//键盘消息
onKey(pMsg->WParam,pMsg->LParam);
ClearScreen();
strChar2Unicode(ufilename, filename);
TextOut(pdc, 150, 200, ufilename,TRUE,FONTSIZE_MIDDLE );
DeleteMessage(pMsg);//删除消息
}
DestoryDC(pdc);//删除绘图设备上下文
pfile=fopen(filename,"w");
if(pfile==NULL){
return;
}
fwrite(&sysnumber,sizeof(int),1, pfile);//写文件
fclose(pfile);
}
void CreateText()
{
structRECT rect;//定义矩形框结构
U16 str[20];
LoadSysNumber();
//SetRect(&rect, 100,30,160,50); //设置PID参数轴1P的文本框
SetRect(&rect, 150,100,300,300); //设置PID参数轴1P的文本框
width=10;
pTextCtrl=CreateTextCtrl(ID_MainTextCtrl, &rect, FONTSIZE_MIDDLE, CTRL_STYLE_FRAME, NULL, NULL);//创建文本框
// CopyRect(&pTextCtrl->Textpos,&pTextCtrl->TextCtrlRect);
Int2Unicode(sysnumber,str);//将整形数据转换为Unicode数据
SetWndCtrlFocus(NULL, ID_MainTextCtrl);//将焦点移到文本框中
SetTextCtrlText(pTextCtrl, str,TRUE);//设置文本框内容
}
void Main_Task(void *Id) //Main_Test_Task
{
POSMSG pMsg=0;//定义消息结构
PDC pdc;//创建绘图设备上下文结构
U16 printstr[10];
width=0;
ClearScreen();//清屏
CreateText(); //创建文本框
//消息循环
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;
}
}
DeleteMessage(pMsg);//删除消息
}
}
U8 onKey(int nkey, int fnkey)
{
U16 str[20],len,len1;
static U8 input=FALSE;//编辑状态标志
len=0;
while(pTextCtrl->text[len++]);
len1=sizeof(pTextCtrl->text);
if(len%(width)==0&&len>1)
AppendChar2TextCtrl(pTextCtrl,'\n',TRUE);
switch(nkey){
case '\r'://OK
if(filef==1)
{strcpy((filename+filepos-1),".dat");
filef=2;
return TRUE;
}
if(!input){//不处于编辑模式
pTextCtrl->text[0]=0; //清空文本框
SetTextCtrlEdit(pTextCtrl, TRUE);//使文本框处于编辑状态
DrawTextCtrl(pTextCtrl);//重绘文本框
input=TRUE;//置编辑状态标治
}
else{
sysnumber=Unicode2Int(pTextCtrl->text);//将文本框中的内容由Unicode 变为整形
SetTextCtrlEdit(pTextCtrl, FALSE);//使文本框退出编辑状态
DrawTextCtrl(pTextCtrl);//重绘文本框
SaveSysNumber();
input=FALSE;//置编辑标志为否
}
return TRUE;
case '-'://Cancel
SetTextCtrlEdit(pTextCtrl, FALSE);//使文本框退出编辑状态
Int2Unicode(sysnumber,str);//将整形变为unicode
SetTextCtrlText(pTextCtrl, str,TRUE);//设置文本框内容
input=FALSE;
return TRUE;
case '+'://OK
AppendChar2TextCtrl(pTextCtrl,'\n',TRUE);
return TRUE;
default:
if(filef==1)
{filename[filepos++]=nkey&0xff;
return TRUE;
}
}
return FALSE;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?