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

📄 main.c

📁 miniARM嵌入式web主程序,需要在运行miniarm
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************Copyright (c) *************************************
**                         Guangzhou ZHIYUAN electronics Co.,LTD.                                              
**                               http://www.embedtools.com
**
**------------ File Info -------------------------------------------------------------------
**  File name          :main.c
**  Last modified Date :
**  Last Version       :
**  Descriptions       :用户主程序
**
**------------------------------------------------------------------------------------------
** Created by:			
** Created date:		
** Version:				
** Descriptions:		简单WEB服务器测试程序。( CF卡保存有WEB服务器的网页信息既index.htm和echo.htm )
**
**------------------------------------------------------------------------------------------
** Modified by  :
** Modified date:
** Version      :
** Descriptions :
**
*********************************************************************************************/
#include "main.h"

#define TASK0_PRIO          17       		// 任务的优先级
#define TASK0_ID            TASK0_PRIO      // 任务的ID
#define TASK0_STACK_SIZE    1024    		// 定义用户堆栈长度   

#define TASK1_PRIO          18       		// 任务的优先级
#define TASK1_ID            TASK1_PRIO      // 任务的ID
#define TASK1_STACK_SIZE    512     		// 定义用户堆栈长度
   
#define TASK2_PRIO          19       		// 任务的优先级
#define TASK2_ID            TASK2_PRIO      // 任务的ID
#define TASK2_STACK_SIZE    512     		// 定义用户堆栈长度

#define TASK3_PRIO          20       		// 任务的优先级
#define TASK3_ID            TASK3_PRIO      // 任务的ID
#define TASK3_STACK_SIZE    512    		    // 定义用户堆栈长度

#define TASK4_PRIO          21       		// 任务的优先级
#define TASK4_ID            TASK4_PRIO   	// 任务的ID
#define TASK4_STACK_SIZE    512    	 		// 定义用户堆栈长度

#define TASK5_PRIO          22       		// 任务的优先级
#define TASK5_ID            TASK5_PRIO 		// 任务的ID
#define TASK5_STACK_SIZE    512     		// 定义用户堆栈长度

OS_STK  TASK0_STACK[TASK0_STACK_SIZE];
OS_STK  TASK1_STACK[TASK1_STACK_SIZE];
OS_STK  TASK2_STACK[TASK2_STACK_SIZE];
OS_STK  TASK3_STACK[TASK3_STACK_SIZE];
OS_STK  TASK4_STACK[TASK4_STACK_SIZE];
OS_STK  TASK5_STACK[TASK5_STACK_SIZE];

void TASK0(void *pdata);
void TASK1(void *pdata);
void TASK2(void *pdata);
void TASK3(void *pdata);
void TASK4(void *pdata);
void TASK5(void *pdata);

/******************************************************************************************/

uint8  	MCU_IP[4]      = {192, 168, 1,  240};	// 设置MCU的IP地址等信息
uint8  	MCU_Mark[4]    = {255, 255, 255, 0 };
uint8  	MCU_GateWay[4] = {192, 168, 1,  253};   
uint8  	MCU_MAC[6];  							// MAC地址
uint16 	MCU_Port       = 80;

uint8  	PC_IP[4]; 								// 设置PC机的IP地址等信息
uint16	PC_Port;

uint8	CFSel =0;								// CF卡主从机选择

uint8	index_htm[1024*18];				                                  // 主页缓冲区
uint8	echo_htm[1024*2];			                                      // 刷新页面缓冲区

uint8	httpweb[] = {                                                     // http响应头信息
						"HTTP/1.1 200 OK \r\n"
						"Data:Wed,09 Jul 2007 12:00:00:51 GMT\r\n"
						"Server: microHttp/1.0 Zlgmcu Corporation\r\n"
					    "Accept-Ranges: bytes\r\n"
						"Content-Type:text/html\r\n"
    					"\r\n"
    				};

uint8 	RcvBuff[1380];
void	*Command;		
HANDLE	fp;

/******************************************************************************************
** Function name: main
** Descriptions : 主函数
** Input        : 无
** Output       : 无 
*******************************************************************************************/
int main (void)
{
    #if OS_CRITICAL_METHOD == 3				      	//Allocate storage for CPU status register
    OS_CPU_SR  cpu_sr;
	#endif
	
/*---------------------- 系统初始化代码 ------------------------------------------------*/
	TargetInit ();      					     	// 系统初始化,版本号验证
											     	// 验证不通过函数不会返回!!!
    DevDriveIni();								 	// 驱动库初始化

#if 1
	//GetIpSet(MCU_IP);								// 读取出厂IP
	//GetMarkSet(MCU_Mark);
	//GetGateWaySet(MCU_GateWay);
	//MCU_Port = GetPortSet();
    ZlgipInitial(MCU_IP, MCU_GateWay, MCU_Mark);	// 设置系统IP参数
	GetMac(MCU_MAC);								// 读取MAC地址(该函数必须在ZlgipInitial后调用)
//	getlocalip(MCU_IP,0);							// 读取本地IP
#endif

#if 0
    File_init();									// 初始化文件系统
    USB_Host_init();
    MassDriverIni();
#endif

#if 0
//	OSAddFileDriver(GetFFSCommand(), Get16MDriverInfo());	// 安装16M  (512byte扇区)电子盘文件系统驱动
	OSAddFileDriver(GetLFFSCommand(), Get256MDriverInfo());	// 安装256M ( 2Kbyte扇区)电子盘文件系统驱动
#endif

/*----------------------------------------------------------------------------------------*/
	File_init();							                              // 初始化文件系统
    CFIDEInit();							                              // CF卡IDE接口初始化
    OSAddFileDriver(GetCFCommand(), &CFSel);		                      // 加载CF卡驱动,使用CF卡主模式    

	fp = OSFileOpen("index.htm","R");		                              // 读取主页信息
	if(fp == Not_Open_FILE)
	{
		while(1);
	}
	OSFileRead((void *)index_htm, OSGetFileSize("index.htm"), fp);	
	OSFileClose(fp);
	
	fp = OSFileOpen("echo.htm","R");		                              // 读取刷新页信息
	if(fp == Not_Open_FILE)
	{
		while(1);
	}
	OSFileRead((void *)echo_htm, OSGetFileSize("echo.htm"), fp);	
	OSFileClose(fp);
	
    gpio_set(BUZZER);                            	//鸣叫BEEP
    OSTimeDly(OS_TICKS_PER_SEC/10);             	//注意PWM输出引脚与蜂鸣器是同一引脚
    gpio_clr(BUZZER); 
    OSTimeDly(OS_TICKS_PER_SEC/10);
    gpio_set(BUZZER);
    OSTimeDly(OS_TICKS_PER_SEC/10);
    gpio_clr(BUZZER);  

/*----------------------------------------------------------------------------------------*/

    OSTaskCreateExt(TASK0,
                    (void *)0,
                    &TASK0_STACK[TASK0_STACK_SIZE-1],
                    TASK0_PRIO,
                    TASK0_ID,
                    &TASK0_STACK[0],
                    TASK0_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);      
                    
    OSTaskCreateExt(TASK1,
                    (void *)0,
                    &TASK1_STACK[TASK1_STACK_SIZE-1],
                    TASK1_PRIO,
                    TASK1_ID,
                    &TASK1_STACK[0],
                    TASK1_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  
                    
    OSTaskCreateExt(TASK2,
                    (void *)0,
                    &TASK2_STACK[TASK2_STACK_SIZE-1],
                    TASK2_PRIO,
                    TASK2_ID,
                    &TASK2_STACK[0],
                    TASK2_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  
                    
    OSTaskCreateExt(TASK3,
                    (void *)0,
                    &TASK3_STACK[TASK3_STACK_SIZE-1],
                    TASK3_PRIO,
                    TASK3_ID,
                    &TASK3_STACK[0],
                    TASK3_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  
                    
    OSTaskCreateExt(TASK4,
                    (void *)0,
                    &TASK4_STACK[TASK4_STACK_SIZE-1],
                    TASK4_PRIO,
                    TASK4_ID,
                    &TASK4_STACK[0],
                    TASK4_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); 
                    
    OSTaskCreateExt(TASK5,
                    (void *)0,
                    &TASK5_STACK[TASK5_STACK_SIZE-1],
                    TASK5_PRIO,
                    TASK5_ID,
                    &TASK5_STACK[0],
                    TASK5_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);        
	while (1)
    {
		OSTimeDly(OS_TICKS_PER_SEC); 
    }
}

/*******************************************************************************************
** Function name: TASK0
** Descriptions:  Web服务器
** Input:         无
** Output:        无 
*******************************************************************************************/
void TASK0(void *pdata)
{   
	uint8	ei;
	uint8	Order;			                                              // TCP连接序号
	int32 	Tmp;
	uint32 	RcvNum;			                                              // 接收数据字节个数
	uint32	Cnt = 1;
	uint32	length;			                                              // 保存CF卡中网页的大小
    uint32  Listen_Count;		                                          // 监听路数  
    SOCKET	s;
    struct	sockaddr	seraddr,cliaddr;
	
	pdata = pdata;
	
	seraddr.sin_family = 0;
	seraddr.sin_addr[0] = MCU_IP[0];
	seraddr.sin_addr[1] = MCU_IP[1];
	seraddr.sin_addr[2] = MCU_IP[2];
	seraddr.sin_addr[3] = MCU_IP[3];
	seraddr.sin_port	= MCU_Port;

	/* 建立socket */
	s = socket(0, SOCK_STREAM, TCP_PROTOCOL);
	
	/* 绑定端口号 */
	ei = bind(s,&seraddr,sizeof(seraddr));	
	do		
	{
		Listen_Count = listen(s, 1);					                  // 只监听1路
		if(Listen_Count == SOCKET_ERROR)
		{
			OSTimeDly(20);
		}
	}while(Listen_Count == SOCKET_ERROR);
	
	while (1)
    {	
		memset(RcvBuff, 0, sizeof(RcvBuff));
		Tmp = sizeof(cliaddr);
		Order = accept(s, &cliaddr, &Tmp);			                      // 接收客户端的连接
		if(Order != SOCKET_ERROR)                                         // 有用户请求连接
		{	
	   		while(1)
	   		{	
	   			RcvNum = recv(Order, RcvBuff, 1380, 0);
		   		if(RcvNum == SOCKET_RCV_ERROR)                            // 连接错误,关闭连接
		   		{
		   			close(Order); 
		   			OSTimeDly(10);	
			   		TCP_Abort(Order);
			   		OSTimeDly(10);	
		   			break;
		   		}
		   		else if(RcvNum > 0)
		   		{		   			

⌨️ 快捷键说明

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