📄 main.lst
字号:
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 + -