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

📄 main.c

📁 ISP1160 for uCOS-II,使用于lpc2200系列芯片
💻 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的堆栈长度
 
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);


		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);	
	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_class_interface(MASSSTRAGE_CLASS_INTERFACE,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);														/* 发送响应帧 */
    }
}
   
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -