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

📄 main.lst

📁 这是TCP/IP协议组播的实现代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.07   MAIN                                                                  04/07/2006 09:39:09 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MAIN.C LARGE OMF2 ROM(D16M) REGFILE(.\trm_B.ORC) BROWSE MODDP2 MODDA VARBAN
                    -KING DEBUG

stmt level    source

   1          
   2          /********************** 此程序为IP视频会议终端C400程序 ************************/
   3          
   4          /*************************** main.c 为系统主程序 ******************************/
   5          
   6          /**************************** designed by wangxq    ***************************/
   7          
   8          /****************************      2006-02-23       ***************************/
   9          
  10          #include <stdio.h>               
  11          #include <string.h>              
  12          #include "user.h"
  13          #include "rom400_init.h"
  14          #include "rom400_task.h"
  15          #include "rom400_sock.h"
  16          
  17          #ifdef USE_KMEM_LIB
  18          #include "rom400_kmem.h"
  19          #endif
  20          #ifdef USE_XNETSTACK_LIB
  21          #include "rom400_xnetstack.h"
  22          #endif
  23          
  24          void main()
  25          {
  26   1              unsigned int i;
  27   1              #ifdef USE_XNETSTACK_LIB
  28   1              xnetstack_install();
  29   1              #endif
  30   1      
  31   1              #ifdef USE_KMEM_LIB
  32   1                  kmem_install(ROM400_KMEM_MODEL_SMALLEST + 2);
  33   1              #endif
  34   1      
  35   1      
  36   1              init_rom(RAM_START, RAM_END);
  37   1              //系统存储器的初始化,为ROMINIT.LIB的函数,完成对外接的存储器定标和分配地址  
  38   1          
  39   1              clear_param_buffers();
  40   1      
  41   1              
  42   1              #ifdef USE_XNETSTACK_LIB
  43   1              printf("DS80C400 Enhanced Network Library Version %d\r\n", xnetstack_version());
  44   1              #endif
  45   1      
  46   1              #ifdef USE_KMEM_LIB
  47   1              printf("DS80C400 KMEM Library Version             %d\r\n", kmem_version());
  48   1              #endif
  49   1      
  50   1          puts("Timing test...please wait.\r\n");
  51   1          printf("Reload : %x\r\n", task_gettickreload());
  52   1      
  53   1              init();//自己定义的函数,初始化自己定义的变量
  54   1      
C51 COMPILER V7.07   MAIN                                                                  04/07/2006 09:39:09 PAGE 2   

  55   1              puts("Wait IpAddress And Other Information");
  56   1              
  57   1              task_settickreload(RELOAD_73_728);//装载任务调度定时器的初值
  58   1      
  59   1          puts("About to wait 20...");
  60   1      
  61   1          wait_millis(20000);//等待5秒钟左右
  62   1      
  63   1          printf("Reload : %x\r\n", task_gettickreload()); 
  64   1      
  65   1              do_static();//设置本地IP地址属性(包括IP、网关等)
  66   1      
  67   1          network_config();//读取并打印设置参数
  68   1      
  69   1      
  70   1              /********************** 创建发送连接 *************************/ 
  71   1              memset(&send_udp_video, 0, sizeof(struct sockaddr));
  72   1              send_udp_video.sin_addr[12] = 192;
  73   1          send_udp_video.sin_addr[13] = 168;
  74   1          send_udp_video.sin_addr[14] = 0;
  75   1          send_udp_video.sin_addr[15] = 200;
  76   1          send_udp_video.sin_port = SEND_VIDEO_PORT;
  77   1                      
  78   1              video_sendhandle = socket(0, SOCKET_TYPE_DATAGRAM, 0);//创建UDP视频发送连接
  79   1      
  80   1              syn_setDatagramAddress(video_sendhandle, 1, &send_udp_video);//设置UDP命令字发送连接地址
  81   1              
  82   1              memset(&send_udp_audio, 0, sizeof(struct sockaddr));
  83   1              send_udp_audio.sin_addr[12] = 192;
  84   1          send_udp_audio.sin_addr[13] = 168;
  85   1          send_udp_audio.sin_addr[14] = 0;
  86   1          send_udp_audio.sin_addr[15] = 200;
  87   1          send_udp_audio.sin_port = SEND_G711_PORT;
  88   1      
  89   1              g711_sendhandle = socket(0, SOCKET_TYPE_DATAGRAM, 0);//创建UDP音频发送连接
  90   1      
  91   1              syn_setDatagramAddress(g711_sendhandle, 1, &send_udp_audio);//设置UDP命令字发送连接地址
  92   1      
  93   1              /*****************创建UDP命令字发送连接***********************/
  94   1      
  95   1              memset(&send_udp_command, 0, sizeof(struct sockaddr));
  96   1          send_udp_command.sin_addr[12] = 192;
  97   1          send_udp_command.sin_addr[13] = 168;
  98   1          send_udp_command.sin_addr[14] = 0;
  99   1          send_udp_command.sin_addr[15] = 200;
 100   1      
 101   1          send_udp_command.sin_port = SEND_COMMAND_PORT;
 102   1      
 103   1              command_sendhandle = socket(0, SOCKET_TYPE_DATAGRAM, 0);//创建UDP命令字发送连接
 104   1      
 105   1              if(command_sendhandle ==  0x0FFFF)
 106   1              puts("\r\n Failed to create command send UDP socket \r\n");
 107   1          else
 108   1              {
 109   2              puts("\r\n Succeed to create command send UDP socket \r\n");
 110   2              }
 111   1      
 112   1              syn_setDatagramAddress(command_sendhandle, 1, &send_udp_command);//设置UDP命令字发送连接地址
 113   1      
 114   1              /*****************创建UDP命令字发送连接***********************/
 115   1      
 116   1              /******************** 创建发送连接 ***************************/ 
C51 COMPILER V7.07   MAIN                                                                  04/07/2006 09:39:09 PAGE 3   

 117   1      
 118   1              /******************** 创建接收连接 ***************************/ 
 119   1      
 120   1              /******************创建UDP视频接收连接************************/
 121   1      
 122   1              memset(&rev_udp_video, 0, sizeof(struct sockaddr));
 123   1          rev_udp_video.sin_addr[12] = 192;
 124   1          rev_udp_video.sin_addr[13] = 168;
 125   1          rev_udp_video.sin_addr[14] = 0;
 126   1          rev_udp_video.sin_addr[15] = 201;
 127   1      
 128   1          rev_udp_video.sin_port = REV_VIDEO_PORT;
 129   1      
 130   1              video_revhandle = socket(0, SOCKET_TYPE_DATAGRAM, 0);//创建UDP接收命令字连接
 131   1      
 132   1              if(video_revhandle ==  0x0FFFF)
 133   1              puts("\r\n Failed to create receive video UDP socket \r\n");
 134   1          else
 135   1              puts("\r\n Succeed to create receive video UDP socket \r\n");
 136   1      
 137   1              if(bind(video_revhandle,&rev_udp_video,sizeof(struct sockaddr)) == 0)//绑定命令字接收地址和端口
 138   1              printf(" successully bind receive video address and port - %u\r\n",REV_VIDEO_PORT);
 139   1          else
 140   1              printf(" failed to bind receive video address and port \r\n");
 141   1      
 142   1              syn_setDatagramAddress(video_revhandle, 0, &rev_udp_video);     
 143   1      
 144   1              /******************创建UDP视频接收连接************************/
 145   1      
 146   1      
 147   1              /******************创建UDP音频接收连接************************/
 148   1      
 149   1              memset(&rev_udp_audio, 0, sizeof(struct sockaddr));
 150   1          rev_udp_audio.sin_addr[12] = 192;
 151   1          rev_udp_audio.sin_addr[13] = 168;
 152   1          rev_udp_audio.sin_addr[14] = 0;
 153   1          rev_udp_audio.sin_addr[15] = 201;
 154   1      
 155   1          rev_udp_audio.sin_port = REV_G711_PORT;
 156   1      
 157   1              g711_revhandle = socket(0, SOCKET_TYPE_DATAGRAM, 0);//创建UDP接收命令字连接
 158   1      
 159   1              if(g711_revhandle ==  0x0FFFF)
 160   1              puts("\r\n Failed to create receive audio UDP socket \r\n");
 161   1          else
 162   1              puts("\r\n Succeed to create receive audio UDP socket \r\n");
 163   1              
 164   1      
 165   1              if(bind(g711_revhandle,&rev_udp_audio,sizeof(struct sockaddr)) == 0)//绑定命令字接收地址和端口
 166   1          {   
 167   2                      printf(" successully bind receive audio address and port - %u\r\n",REV_G711_PORT);
 168   2          }
 169   1              else
 170   1              {
 171   2              printf(" failed to bind receive audio address and port \r\n");
 172   2              }
 173   1      
 174   1              syn_setDatagramAddress(g711_revhandle, 0, &rev_udp_audio);      
 175   1      
 176   1              /******************创建UDP音频接收连接************************/
 177   1      
 178   1              
C51 COMPILER V7.07   MAIN                                                                  04/07/2006 09:39:09 PAGE 4   

 179   1              /******************创建UDP命令接收连接************************/
 180   1      
 181   1              memset(&rev_udp_command, 0, sizeof(struct sockaddr));
 182   1          rev_udp_command.sin_addr[12] = 192;
 183   1          rev_udp_command.sin_addr[13] = 168;
 184   1          rev_udp_command.sin_addr[14] = 0;
 185   1          rev_udp_command.sin_addr[15] = 201;
 186   1      
 187   1          rev_udp_command.sin_port = REV_COMMAND_PORT;
 188   1      
 189   1              command_revhandle = socket(0, SOCKET_TYPE_DATAGRAM, 0);//创建UDP接收命令字连接
 190   1      
 191   1              if(command_revhandle ==  0x0FFFF)
 192   1              puts("\r\n Failed to create receive command UDP socket \r\n");
 193   1          else
 194   1              puts("\r\n Succeed to create receive command UDP socket \r\n");
 195   1      
 196   1              if(bind(command_revhandle,&rev_udp_command,sizeof(struct sockaddr)) == 0)//绑定命令字接收地址和端口
 197   1              printf(" successully bind receive command address and port - %u\r\n",REV_COMMAND_PORT);
 198   1          else
 199   1              printf(" failed to bind receive command address and port \r\n");
 200   1              
 201   1              syn_setDatagramAddress(command_revhandle, 0, &rev_udp_command); 
 202   1      
 203   1              /******************创建UDP命令接收连接************************/
 204   1      
 205   1      
 206   1              /******************** 创建接收连接 ***************************/ 
 207   1              
 208   1              //start_leave();
 209   1      
 210   1              task_entercritsection();   
 211   1          
 212   1              result = task_fork(NORM_PRIORITY, ROM_SAVESIZE);//创建两个任务线程
 213   1          
 214   1              if (result==0x0FFFF)//创建任务失败
 215   1          {
 216   2              task_leavecritsection();
 217   2              puts("Attempt to fork failed\r\n");
 218   2              return;
 219   2          }
 220   1              else if (result==0)//发送线程
 221   1          {
 222   2              while (1)
 223   2                      {
 224   3                              temp = ((*rd_fifo_ef) & 0x01);
 225   3                              if(temp == 1)//检测视频FIFO是否为空
 226   3                              {
 227   4                                      dp_read_video();
 228   4                                      syn_sendto(video_sendhandle, 1472, send_addr_video);//UDP发送视频数据
 229   4                              }
 230   3      
 231   3                              temp = ((*rd_fifo_hf) & 0x01);
 232   3                              if(temp == 0)//检测音频FIFO是否半满
 233   3                              {
 234   4                                      dp_read_audio();//读取音频数据
 235   4                                      syn_sendto(g711_sendhandle, 1024, send_addr_audio);//UDP发送音频数据
 236   4                              }
 237   3      
 238   3                              temp = ((*dual_rev) & 0x01);
 239   3                              if(temp == 0x01)//判断是否有命令字需要发送
 240   3                              {                                       
C51 COMPILER V7.07   MAIN                                                                  04/07/2006 09:39:09 PAGE 5   

 241   4                                      command_length = *(dual_rev + 1);
 242   4                                      for(i = 0; i < command_length;i++)
 243   4                                      {
 244   5                                              *(send_addr_command + i + 5) = (*(dual_rev + 2 + i) & 0xff);
 245   5                                      }
 246   4                                      *dual_rev = 0;
 247   4                                      command_length = command_length + 5;
 248   4                                      *(send_addr_command) = command_length;//将从双口RAM中取出的命令字打包
 249   4                                      syn_sendto(command_sendhandle,command_length,send_addr_command);//UDP发送命令字
 250   4                              }
 251   3                              task_wait(0, 0, 16);//线程挂起,进入等待
 252   3                      }
 253   2          }
 254   1          else 
 255   1          {
 256   2                      command_result = task_fork(NORM_PRIORITY, ROM_SAVESIZE);//创建两个任务线程
 257   2                      if(command_result == 0xffff)
 258   2                      {
 259   3                              puts("Attempt to fork failed\r\n");
 260   3                      return;
 261   3                      }
 262   2                      else if(command_result == 0)//接收视频数据线程
 263   2                      {

⌨️ 快捷键说明

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