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

📄 main.c

📁 博创2410的实验代码
💻 C
字号:
/***************************************************************************\
	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 "../inc/TCPIP/internet.h"
#include "../inc/drv/tchscr.h"
#include"../ucos-ii/includes.h"               /* uC/OS interface */
#include "../ucos-ii/add/osaddition.h"
#include "../inc/drivers.h"
#include "../src/gui/gui.h"
#include"../inc/Netcfg.h"
#include <string.h>
#include <stdio.h>
#pragma import(__use_no_semihosting_swi)  // ensure no functions that use semihosting 

//#define NETPORT 1
///******************任务定义***************///               */

OS_STK Main_Stack[STACKSIZE*8]={0, };   //Main_Test_Task堆栈
void Main_Task(void *Id);             //Main_Test_Task
#define Main_Task_Prio     12

OS_STK Receive_Stack[STACKSIZE*8]={0, };   //Main_Test_Task堆栈
void Receive_Task(void *Id);             //Main_Test_Task
#define Receive_Task_Prio     40

struct sockaddr_in servaddr;//计算机端套接口

void InitNetWork()//初始化网络
{
	U32 Ipaddr,Ipmaskaddr,Ipgateaddr;
	U8 *Macaddr;
	
	Ipaddr=Get_ipaddr();		//获取IP地址	
	Ipmaskaddr=Get_maskaddr();//获取子网掩码
	Ipgateaddr=Get_gwaddr();	//获取网关
	Macaddr=Get_mac();				//获取网卡地址
	NetPortChoose(0);			//选择网口,必须在配置网络以前进行
	initOSNet(Ipaddr, Ipmaskaddr, Ipgateaddr,Macaddr);//配置网络
	
	OSTimeDly(1000);//任务挂起5秒
	printk("init Ethernet and UDP is ok!\n");
}

/////////////////////////////////////////////////////
//                  Main function.                //
////////////////////////////////////////////////////




int main(void)
{
	ARMTargetInit();        
   	SetNetWork();	  //设置开发板地址
   	OSInit();              
   	OSInitUart();
    //initOSFile();
#if USE_MINIGUI==0
	initOSMessage();
	initOSList();
	initOSDC();
	//initOSCtrl();
	LoadFont();
#endif
    loadsystemParam();
	LCD_printf("Create task on uCOS-II...\n");
	OSTaskCreate(Main_Task,  (void *)0,  (OS_STK *)&Main_Stack[STACKSIZE*8-1],  Main_Task_Prio);
	OSTaskCreate(Receive_Task,  (void *)0,  (OS_STK *)&Receive_Stack[STACKSIZE*8-1],  Receive_Task_Prio);
	OSAddTask_Init(1);
  	LCD_ChangeMode(DspGraMode);
    OSStart();             
    return 0;
}//main

void Main_Task(void *Id)             //Main_Test_Task
{
	POSMSG pMsg;//定义消息结构
	PDC pdc;//定义绘图设备上下文结构
	struct point{
		   int x;
		   int y;
		};//定义点坐标结构
	int ClientSock_out;		
	struct sockaddr_in cliaddr_out;//IPv4套接口地址定义
	struct point scrpoint;//触摸点
   
	InitNetWork();
	ClientSock_out=socket(PF_INET,SOCK_DGRAM, 0);//创建套接字
    memset(&servaddr, 0, sizeof(servaddr)); //地址结构清零
	memset(&cliaddr_out, 0, sizeof(cliaddr_out)); //地址结构清零
	//计算机终端套接字属性
	servaddr.sin_family = AF_INET; //IPv4协议
	//servaddr.sin_addr.s_addr = (118<<24)|(0<<16)|(168<<8)|192;
	servaddr.sin_port = htons(5000); //端口
	//发送端套接字属性?	cliaddr_out.sin_family = AF_INET; //IPv4协议
	cliaddr_out.sin_port=htons(4999);
	cliaddr_out.sin_addr.s_addr=INADDR_ANY;
    bind(ClientSock_out, (struct sockaddr*)&cliaddr_out, sizeof(cliaddr_out));//绑定套接字
    
	ClearScreen();//清屏
    pdc=CreateDC();//创建绘图设备上下文
	for(;;){
		pMsg=WaitMessage(0);//等待消息
	       switch(pMsg->Message){
			case OSM_TOUCH_SCREEN://OSM_TOUCH_SCREEN:
				switch(pMsg->LParam){
					case TCHSCR_ACTION_DOWN:
						scrpoint.x=-1;//表示触摸屏按下
						//发送两遍是为了确保计算机能够收到
						sendto(ClientSock_out, (struct point*)&scrpoint, sizeof(struct point), 0, (struct sockaddr*)&servaddr, sizeof(servaddr));
						sendto(ClientSock_out, (struct point*)&scrpoint, sizeof(struct point), 0, (struct sockaddr*)&servaddr, sizeof(servaddr));
						//获得触摸点坐标
						scrpoint.x=pMsg->WParam&0x0000ffff;
                        if(scrpoint.x<1) scrpoint.x=1;
                        if(scrpoint.x>639) scrpoint.x=639;
						scrpoint.y=pMsg->WParam>>16;
                        if(scrpoint.y<1) scrpoint.y=1;
                        if(scrpoint.y>479) scrpoint.y=479;

						sendto(ClientSock_out, (struct point*)&scrpoint, sizeof(struct point), 0, (struct sockaddr*)&servaddr, sizeof(servaddr));
						MoveTo(pdc, scrpoint.x, scrpoint.y);//移动
                            		break;
					case TCHSCR_ACTION_MOVE:
						scrpoint.x=pMsg->WParam&0x0000ffff;
                        if(scrpoint.x<1) scrpoint.x=1;
                        if(scrpoint.x>639) scrpoint.x=639;                        
						scrpoint.y=pMsg->WParam>>16;
                        if(scrpoint.y<1) scrpoint.y=1;
                        if(scrpoint.y>479) scrpoint.y=479;

	               		sendto(ClientSock_out, (struct point*)&scrpoint, sizeof(struct point), 0, (struct sockaddr*)&servaddr, sizeof(servaddr));
	               		LineTo(pdc, scrpoint.x, scrpoint.y);//画线
	               		break;
				}
				break;
	                     
           }
           
		DeleteMessage(pMsg);//删除消息
        OSTimeDly(30);
	}
	DestoryDC(pdc);//删除绘图设备上下文
	close(ClientSock_out);//关闭套接字
}

void Receive_Task(void *Id)             //Main_Test_Task
{
	int ClientSock_in;
	struct sockaddr_in cliaddr_in;
	int iRecv;
	BOOLEAN IsClearn;
	int fromlen;
	fromlen=sizeof(cliaddr_in);
	//接收端套接口属性
	cliaddr_in.sin_family= AF_INET; 
       	cliaddr_in.sin_port=htons(4998);
       	cliaddr_in.sin_addr.s_addr=INADDR_ANY;
	ClientSock_in=socket(PF_INET,SOCK_DGRAM, 0);
	bind(ClientSock_in, (struct sockaddr*)&cliaddr_in, sizeof(cliaddr_in));
	for(;;){
		//接收清屏命令
		iRecv=recvfrom(ClientSock_in, (BOOLEAN*)&IsClearn, sizeof(int), 0, (struct sockaddr*)&cliaddr_in, (int*)&fromlen);
		servaddr.sin_addr.s_addr=cliaddr_in.sin_addr.s_addr;//得到计算机端IP
		if(IsClearn){
			ClearScreen();
			}
		OSTimeDly(50);
		}
	close(ClientSock_in);
}

⌨️ 快捷键说明

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