?? main.c
字號:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"
#include "stdlib.h"
#define TaskStkLengh 64 //Define the Task0 stack length 定義用戶任務0的堆棧長度
void Disp_RGB(void)
{ uint32 x,y;
TftSetWindow(0,0, 239,319);
TftSetWrite(0, 0);
// 填充紅色
for(y=0; y<80; y++)
{ for(x=0; x<240; x++)
{ TftSendDat(0xF800);
}
}
// 填充綠色
for(y=0; y<80; y++)
{ for(x=0; x<240; x++)
{ TftSendDat(0x07E0);
}
}
// 填充藍色
for(y=0; y<80; y++)
{ for(x=0; x<240; x++)
{ TftSendDat(0x001F);
}
}
// 填充白色
for(y=0; y<80; y++)
{ for(x=0; x<240; x++)
{ TftSendDat(0xFFFF);
}
}
}
OS_STK TaskStk [TaskStkLengh]; //Define the Task0 stack 定義用戶任務0的堆棧
void Task0(void *pdata); //Task0 任務0
int main (void)
{
OSInit ();
OSTaskCreate (Task0,(void *)0, &TaskStk[TaskStkLengh - 1], 2);
OSStart ();
return 0;
}
/*********************************************************************************************************
** Task0 任務0
********************************************************************************************************/
#define TaskUSBStkLengh 256
OS_STK TaskStk_Host [TaskUSBStkLengh];
void Task_USB_Host_Serve(void *pdata);
//OS_EVENT *Uart0ReviceMbox; /* 串口接收數據郵箱 */
//OS_STK TaskStk_Uart0 [TaskStkLengh];
//void TaskUart0Revice(void *pdata);
//#define TaskUDiskStkLengh 100
//OS_STK TaskStk_UDisk[TaskUDiskStkLengh];
//void Task_U_disk_DEMO(void *pdata);
#define TaskOSFileStkLengh 1024
OS_STK TaskOSFile[TaskOSFileStkLengh];
#define TaskUDiskFSStkLengh 100
OS_STK TaskStk_UDiskFS[TaskUDiskFSStkLengh];
void Task_UDiskFS_DEMO(void *pdata); // ZLG/FS操作U盤任務函數
void Task0 (void *pdata)
{
pdata = pdata;
OSTaskCreate (Task_USB_Host_Serve,(void *)0,
&TaskStk_Host[TaskUSBStkLengh-1],3); // 建立USB主機服務任務,USB主機服務任優先級就高于其它使用USB主機操作任務
//OSTaskCreate (TaskUart0Revice, (void *)0,
// &TaskStk_Uart0[TaskStkLengh - 1], 4);
//OSTaskCreate (Task_U_disk_DEMO,(void *)0,
// &TaskStk_UDisk[TaskUDiskStkLengh-1],5);
/*===================================================================*/
OSTaskCreate (OSFileTask, (void *)0,
&TaskOSFile[TaskOSFileStkLengh-1], 6); // 建立ZLG/FS文件管理系統任務
OSTaskCreate (Task_UDiskFS_DEMO,(void *)0,
&TaskStk_UDiskFS[TaskUDiskFSStkLengh-1],7);
PINSEL0 = 0x00000000;
PINSEL1 = 0x00000000;
GUI_Initialize();
Disp_RGB();
//TargetInit ();
/* 創建Uart0接收任務 */
while (1)
{
OSTimeDly(10);
}
}
/*********************************************************************************************************
** USB 主機任務
********************************************************************************************************/
void Task_USB_Host_Serve(void *pdata)
{
pdata = pdata;
while (1)
{
USB_Host_Serve();
}
}
/*********************************************************************************************************
** 函數名稱: TaskUart0Revice
** 功能描述: μCOS-II的任務
********************************************************************************************************/
/* void TaskUart0Revice(void *pdata)
{
uint8 Buf[8],i;
pdata = pdata; /* 避免編譯警告 */
/*Uart0ReviceMbox = OSMboxCreate(NULL); /* 建立郵箱 */
/* if (Uart0ReviceMbox == NULL)
while (1);
for (;;)
{
Buf[0] = UART0Getch(); /* 接收數據頭 */
/* for (i = 1; i < 8; i++)
Buf[i] = UART0Getch();
OSMboxPost(Uart0ReviceMbox, (void *)Buf);
}
}*/
/*********************************************************************************************************
** USB 大容量演示任務
********************************************************************************************************/
//#define CMD_INIT 0x00 /* 初始化U盤命令 */
//#define CMD_READ 0x01 /* 讀命令 */
//#define CMD_WRITE 0x02 /* 寫命令 */
//#define CMD_DATA_TRANS 0x04 /* 將data_buf中的數據發送到PC機 */
//#define CMD_DATA_RECV 0x05 /* 接收來自串口的數據,并放入data_buf中 */
/* U盤讀寫緩沖區,比U盤一個塊大8字節 */
/*uint8 data_buf[520];
void Task_U_disk_DEMO(void *pdata)
{
uint8 *pRec;
uint8 err;
uint32 bufaddr,blockaddr;
hMedLUN * MediumPtr;
device_instance * dviPtr;
pdata = pdata; /* 避免編譯警告 */
/* for (;;)
{
pRec = (uint8 *)OSMboxPend(Uart0ReviceMbox, 0, &err); /* 接收數據 */
/* switch(pRec[0])
{
case CMD_INIT:
dviPtr = find_mass_device(0);
if(dviPtr)
{
MediumPtr = Creat_Medium( dviPtr ,0);
pRec[1] = MediumPtr?0:1;
// U盤總扇區數
pRec[2] = (uint8)(MediumPtr->LastLogicalBlookAddress/0x1000000);
pRec[3] = (uint8)(MediumPtr->LastLogicalBlookAddress/0x10000);
pRec[4] = (uint8)(MediumPtr->LastLogicalBlookAddress/0x100);
pRec[5] = (uint8)MediumPtr->LastLogicalBlookAddress;
// 扇區大小
pRec[6] = (uint8)(MediumPtr->BlockLengthInBytes/0x100);
pRec[7] = (uint8)MediumPtr->BlockLengthInBytes;
}
else
pRec[1] = 1; /* 初始化卡 */
/*break;
case CMD_READ:
blockaddr = (pRec[1] << 24) + (pRec[2] << 16) + /* 計算塊地址 */
// (pRec[3] << 8) + pRec[4];
/* pRec[1] = ReadBlockData(MediumPtr, data_buf, blockaddr, 1)?0:1; /* 讀U盤一個扇區 */
/*break;
case CMD_WRITE:
blockaddr = (pRec[1] << 24) + (pRec[2] << 16) +
(pRec[3] << 8) + pRec[4];
pRec[1] = WriteBlockData(MediumPtr, data_buf, blockaddr, 1)?0:1; /* 寫U盤一個扇區 */
/*break;
case CMD_DATA_RECV:
bufaddr = (pRec[1] << 8) + pRec[2]; /* 計算緩沖區地址 */
/* memcpy(data_buf + bufaddr, &pRec[3], 5); /* 收到數據放入pRec */
/*break;
case CMD_DATA_TRANS:
bufaddr = (pRec[1] << 8) + pRec[2]; /* 計算緩沖區地址 */
// memcpy(&pRec[1], data_buf + bufaddr, 7); /* data_buf數據放入pRec */
/*break;
default: break;
}
UART0Write(pRec, 8); /* 發送響應幀 */
// }
//}
/*********************************************************************************************************
** ZLG/FS操作U盤演示任務
********************************************************************************************************/
char *strupr(char *Str) // ZLF/FS需使用的函數
{ char *cp;
cp = Str;
while (*cp != 0)
{ if (*cp >= 'a' && *cp <= 'z' )
*cp -= 'a' - 'A';
cp++;
}
return Str;
}
/*=======================================================================================================*/
#define IniLED_DiskBe() IO2DIR |=1<<28;IO2SET=1<<28
#define SetLED_DiskBe() IO2SET =1<<28
#define ClrLED_DiskBe() IO2CLR =1<<28
#define IniLED_DiskRW() IO2DIR |=1<<29;IO2SET=1<<29
#define SetLED_DiskRW() IO2SET =1<<29
#define ClrLED_DiskRW() IO2CLR =1<<29
#define IniBUZZ() IO0DIR|=1<<7;IO0SET=1<<7
#define SetBUZZ() IO0SET =1<<7
#define ClrBUZZ() IO0CLR =1<<7
char FNAME[] = "A:\\你好.TXT";
char BOOK[] = "A:\\DATA.TXT";
char DIR[]="A:\\USB_HOST";
char DOOK[]="A:\\BOOOK";
char const WritFileData[]=
"\r\n******************Copyright (c) 周立功單片機發展有限公司***********************\r\n\
\r\n\
ZLG/FS是廣州周立功單片機發展有限公司開發的面向嵌入式系統開發的小型文件系統,\r\n\
是ZLG系列中間件的重要成員之一。它是與FAT12、FAT16、FAT32高度兼容的文件系統,可以\r\n\
直接與個人電腦交換文件。它是可移植的、可固化的文件系統,可以用于前后臺系統,也可\r\n\
用于多任務環境。目前ZLG/FS的最新版本為1.0。\r\n\
HostMassLib是基于ZLG USB HOST STACK及ZLG Mass Storage Class驅動封裝的ISP116x\r\n\
讀寫U盤驅動庫。該庫針對LPC213x系統微處理器配置編譯生成,使用RAM資源少于4K,使用\r\n\
CODE資源少于12.4K,可同時支持兩個U盤。\r\n\
\r\n*********************************ARM開發部門************************************\r\n";
void Task_UDiskFS_DEMO(void *pdata) // ZLG/FS操作U盤任務函數
{
device_instance * dviPtr;
uint8 *read_buf;
uint8 *txt;
HANDLE FHandle;
HANDLE BHandle;
pdata = pdata;
read_buf = malloc(sizeof(WritFileData)); ///為read_buf緩存器分配空間
txt = malloc(sizeof(WritFileData)); ///為txt緩存器分配空間
IniLED_DiskBe();IniLED_DiskRW();IniBUZZ();
while (1)
{ dviPtr = find_mass_device(0); // 查找大容量類設備
if(dviPtr) // 等待U盤插入
{ /* 設備插入操作*/
ClrLED_DiskBe(); // 點亮LED_DiskBe指示設備連接設備有效
ClrLED_DiskRW();
// 點亮LED_DiskWR指示開始對U盤操作
OSAddFileDriver(USBCammand); // 安裝文件系統驅動
//FHandle = OSFileOpen(FNAME, "RW"); // 打開或創建文件
//if(Not_Open_FILE!=FHandle) // 打開文件成功
//{
/* 文件操作 */
/* OSFileSeek(FHandle,0, SEEK_END); // 將指針移到文件末尾
OSFileWrite((uint8 *)WritFileData,
sizeof(WritFileData),FHandle); // 寫數據入文件
OSFileClose(FHandle); //關閉文件
if(Not_Open_FILE!=FHandle)
{
FHandle = OSFileOpen(FNAME, "RW"); //打開文件
OSFileRead(read_buf,sizeof(WritFileData),FHandle);//從A:\\你好.TXT文件中讀出數據,并放在read_buf緩存里面
memcpy(&txt[0], read_buf, sizeof( WritFileData)); //把緩存read_buf中的內容,復制到&txt[0]為初始地址緩存中
OSFileSeek(FHandle,0, SEEK_END);
OSFileWrite((uint8 *)txt,
sizeof(WritFileData),FHandle); // 寫數據入文件A:\\你好.TXT
}
//free(read_buf);
//free(txt);
OSFileClose(FHandle); // 關閉文件
OSMakeDir(DIR); // 創建目錄
OSAllCacheWriteBack(); // 將緩沖區數據寫回設備
ClrBUZZ(); // 蜂鳴器蜂鳴提示文件操作完成
OSTimeDly(100);
SetBUZZ();
}
else
{ ClrBUZZ(); // 蜂鳴器長鳴(直到U盤拔出)指示打開文件失敗
}
*/
BHandle = OSFileOpen(BOOK, "RW");
if(Not_Open_FILE!=BHandle) // 打開文件成功
{
/* 文件操作 */
//OSFileSeek(BHandle,0, SEEK_END); // 將指針移到文件末尾
//OSFileWrite((uint8 *)WritFileData,
// sizeof(WritFileData),BHandle); // 寫數據入文件
if(Not_Open_FILE!=FHandle)
{
FHandle= OSFileOpen(FNAME,"RW");
OSFileRead(read_buf,sizeof(WritFileData),FHandle);////從A:\\你好.TXT文件中讀出數據,并放在read_buf緩存里面
memcpy(&txt[0],read_buf,sizeof(WritFileData)); //把緩存read_buf中的內容,復制到&txt[0]為初始地址緩存中
OSFileSeek(FHandle,0, SEEK_END); // 將指針移到文件末尾
OSFileWrite((uint8 *)txt,sizeof(WritFileData),BHandle);//把txt緩存中的數據,寫入文件data.txt
OSFileClose(FHandle);
OSFileClose(BHandle); // 關閉文件
OSMakeDir(DOOK); // 創建目錄
OSAllCacheWriteBack(); // 將緩沖區數據寫回設備
ClrBUZZ(); // 蜂鳴器蜂鳴提示文件操作完成
OSTimeDly(100);
SetBUZZ();
}
else
{
ClrBUZZ(); // 蜂鳴器長鳴(直到U盤拔出)指示打開文件失敗
}
}
else
{ ClrBUZZ(); // 蜂鳴器長鳴(直到U盤拔出)指示打開文件失敗
}
/* 操作完成 */
OSRemoveFileDriver(0); // 刪除驅動
SetLED_DiskRW();
OSRemoveFileDriver(0); // 刪除驅動
SetLED_DiskRW();
free(read_buf); //釋放釋放存儲空間
free(txt); //釋放存儲空間
// 熄滅LED_DiskWR指示開始對U盤操作完成,這里可以拔出U盤
while(dviPtr) // 等待U盤拔出
{ dviPtr=find_mass_device(0);
OSTimeDly(10);
}
/* 設備拔出處理 */
SetBUZZ(); // 關蜂鳴器
SetLED_DiskBe(); // 熄滅LED_DiskBe指示設備已拔出
}
OSTimeDly(10);
}
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -