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

📄 main.c

📁 SmartARM2400系列开发板全套资料
💻 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"

#define TASK_STK_SIZE      512

#define CMD_SD_INIT		   0x00											/* 卡初始化卡命令  				 */
#define CMD_SD_READ    	   0x01											/* 卡读命令        				 */
#define CMD_SD_WRITE   	   0x02											/* 卡写命令       			 	 */
#define CMD_SD_ERASE	   0x03											/* 卡擦除命令      				 */

#define CMD_DATA_TRANS	   0x04											/* 将sd_buf中的数据发送到PC机    */
#define CMD_DATA_RECV	   0x05											/* 接收来自串口的数据,			 */
 																 		/* 并放入sd_buf中 				 */
#define SD_INT				24
#define UART0_INT			6

																		
uint8 sd_buf[520];

sd_struct sds;															/* SD/MMC卡信息结构体 			 */

OS_STK   TaskStk[TASK_STK_SIZE];										/* 任务堆栈 					 */
OS_STK   TaskCardStk[TASK_STK_SIZE];									/* 卡操作任务堆栈 				 */
OS_EVENT *Uart0ReviceMbox;												/* 串口接收数据邮箱 			 */


void  TaskCard(void *data);
void  TaskUart0Revice(void *pdata);

/**********************************************************************************************************
** 函数名称: main
** 功能描述: c语言的主函数,由它启动多任务环境
**********************************************************************************************************/
int main (void)
{
    OSInit();

    OSTaskCreate(TaskCard, (void *)0, &TaskCardStk[TASK_STK_SIZE - 1], 2);
    OSStart();
    return 0;
}

/**********************************************************************************************************
** 函数名称: TaskStart
** 功能描述: μCOS-II的第一个任务,通常由它初始化目标板和建立其它任务
**********************************************************************************************************/
        void  TaskCard(void *pdata)
{
    uint8 *pRec;
    uint8 err;
	uint32 bufaddr,blockaddr,blocknum;
	
    pdata = pdata;                                                     	/* 避免编译警告 				 */

    Uart0ReviceMbox = OSMboxCreate(NULL);                              	/* 建立邮箱 					 */
    if (Uart0ReviceMbox == NULL)
        while (1);

    OSTaskCreate(TaskUart0Revice, (void *)0, 
              &TaskStk[TASK_STK_SIZE - 1], 5);                     		/* 创建Uart0接收任务 			 */

    TargetInit();                                                      	/* 目标板初始化 				 */
    
    for (;;) {
        pRec = (uint8 *)OSMboxPend(Uart0ReviceMbox, 0, &err);          	/* 接收数据 					 */
        switch(pRec[0]) {
    	    case CMD_SD_INIT: pRec[1] = SD_Initialize(&sds);			/* 初始化卡 					 */
    		break; 
    		
    		case CMD_SD_READ:
    			 blockaddr = (pRec[1] << 24) + (pRec[2] << 16) +	   	/* 计算块地址 					 */
    						 (pRec[3] << 8) + pRec[4];
    			 pRec[1] = SD_ReadBlock(&sds,blockaddr, sd_buf);		/* 卡单块读 					 */ 			
    		break;
    		 	    		
    		case CMD_SD_WRITE:	 
    			 blockaddr = (pRec[1] << 24) + (pRec[2] << 16) + 
    						 (pRec[3] << 8) + pRec[4];
    			 pRec[1] = SD_WriteBlock(&sds,blockaddr, sd_buf);		/* 卡单块写 					 */
    		break;
    			
    		case CMD_SD_ERASE:	 
    			 blockaddr = (pRec[1] << 24) + (pRec[2] << 16) + 
    						 (pRec[3] << 8) + pRec[4];					/* 擦卡起始地址 				 */
    			 blocknum  = (pRec[5] << 16) + (pRec[6] << 8) +	
    				 		 (pRec[7]);									/* 块数 						 */
    			 pRec[1] = SD_EraseBlock(&sds,blockaddr, blocknum);		/* 擦除操作 					 */
			break;
   			
    		case CMD_DATA_RECV:	 
    			 bufaddr = (pRec[1] << 8) + pRec[2];					/* 计算缓冲区地址 				 */
    			 memcpy(sd_buf + bufaddr, &pRec[3], 5);					/* 收到数据放入pRec 			 */
    		break;
    			
    		case CMD_DATA_TRANS: 
    			 bufaddr = (pRec[1] << 8) + pRec[2];					/* 计算缓冲区地址 				 */ 
    			 memcpy(&pRec[1], sd_buf + bufaddr, 7);					/* sd_buf数据放入pRec 			 */
    		break;  							
    	
    		default: break;
    	}
    	
    	UART0Write(pRec, 8);											/* 发送响应帧 					 */
    }
}

/**********************************************************************************************************
** 函数名称: TaskUart0Revice
** 功能描述: μCOS-II的任务
**********************************************************************************************************/
        void  TaskUart0Revice(void *pdata)
{
    uint8 Buf[8];
    
    pdata = pdata;                                           			/* 避免编译警告 				 */
	
    for (;;) {
        UART0GetNByte(Buf,8);											/* 接收一帧数据,共8字节 		 */ 
        OSMboxPost(Uart0ReviceMbox, (void *)Buf);
    }
}

   
/**********************************************************************************************************
**                            End Of File
**********************************************************************************************************/

⌨️ 快捷键说明

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