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

📄 sample_udp.c

📁 一种操作系统源码核
💻 C
字号:

#include "ebos.h"

#define MAXBUF 256

void dispstr(INT8U x,INT8U y,INT8 *str);




void Signal_Handler(UNSIGNED signals) ;
void VIPTask( VOID )
{
  char buf[MAXBUF];
  IPADDR  server_addr;
   INT32U server_ip;
   INT16U  server_port;
    struct tcb *ptcb;
    server_addr.byte_addr[0] = 127;/* 127.0.0.1 */
    server_addr.byte_addr[1] = 0;
    server_addr.byte_addr[2] = 0;
    server_addr.byte_addr[3] = 1;
    server_ip=server_addr.laddr;
    server_port=4000;
    NetInit();
    ptcb=UdpOpen(server_ip,server_port,TCP_SERVER);
     if(ptcb!=NULL){
       memset(buf,0,MAXBUF);
        while(UdpRead(ptcb,0,0,buf,MAXBUF)>0){
         memset(buf,2,MAXBUF);
        UdpSendTo(ptcb,buf,MAXBUF);
        }
       UdpClose(ptcb);
    }
     TaskSleep(20);

}


void fun1(VOID);

void fun2(VOID);

//MEMORY_POOL System_Memory;

   UNSIGNED VIPTask_Stk[STK_DEFAULT];
UNSIGNED IdleTask_Stk[STK_DEFAULT];//空闲任务自己专用的堆栈
 UNSIGNED  Stk_fun1[STK_DEFAULT];//两个新任务栈
  UNSIGNED Stk_fun2[STK_DEFAULT];//两个新任务栈


  jmp_buf jmpb;

void main(void)
{
UNSIGNED *first_available_memory;
  setjmp(jmpb); //save envionment for quit
  clrscr();
 first_available_memory=malloc(35000);
 if(!first_available_memory) exit(-1);
 MemPoolInit();
 KernalMemInit(first_available_memory);
 TaskInit();
  SemInit();
  EventInit();
  QueueInit();

  Timer_Initialize();


 // CreateTask(&IdleTask_ptr,IdleTask,&IdleTask_Stk[STK_DEFAULT],STK_DEFAULT,LOWEST_PRIORITY,-1);

  //AllocMem(&System_Memory, &pointer1, 500, NO_SUSPEND);
  //CreateTask(IdleTask,STK_DEFAULT,LOWEST_PRIORITY);
  CreateTask(VIPTask,STK_DEFAULT,1);
  CreateTask(fun1,STK_DEFAULT,3);

  Schedule();
	}

//在本例中fun1在VIPTask运行后运行,等一秒,记下VIPTask更新后的CPUSpeed,显示
//等三秒,创建fun2,然后两个用户任务一起运行
long CPUSpeedMax;
void fun1(VOID)
{

  INT8 err;
  INT8U flag;
  struct tcb *ptcb;
    INT8U buf[MAXBUF];
    IPADDR  remote_addr;
   INT32U remote_ip;
   INT16U  remote_port;

    remote_addr.byte_addr[0] = 127;/* 127.0.0.1 */
    remote_addr.byte_addr[1] = 0;
    remote_addr.byte_addr[2] = 0;
    remote_addr.byte_addr[3] = 1;
    remote_ip=remote_addr.laddr;
    remote_port=4000;
   // NetInit();
   ptcb= UdpOpen(remote_ip,remote_port,TCP_CLIENT);
	if(ptcb!=NULL){
	   memset(buf,2,MAXBUF);
	    UdpSendTo(ptcb,buf,MAXBUF);
	    memset(buf,0,MAXBUF);
           UdpRead(ptcb,0,0,buf,MAXBUF);
           UdpClose(ptcb);
        }

}
void fun2( VOID)
{
  INT8 str1[50];
 static  INT8U a=0;

  dispstr(10,8,"Fun2 is Created... ");
  for(;;)
	 {
		sprintf(str1,"Fun2 is alive, Run every 0.1 Seconds %u",a++);
		dispstr(10,9,str1);

		TaskSleep(20);
	 }

}

void dispstr(INT8U x,INT8U y,INT8 *str)
{
    INT8 far *pscr;
    INT16U offset;
    offset=(INT16U)y*80*2+(INT16U)x*2;
    pscr=MK_FP(0xB800,offset); //pointer to video display buffer
    while(*str)
    {
    *pscr++=*str++;
    *pscr++=(0x00|0x0C); //back ground color "black",forground for "light red"
    }
}

⌨️ 快捷键说明

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