📄 shell.lst
字号:
189 1 and save the index of matched command*/
190 1
191 1 if( search_index== 0 )
192 1 return notfind; /* all the cmd'S length in TABLE is not match*/
193 1
194 1 for(cnt=0; cnt<search_index; cnt++ )
195 1 {
196 2 temp = search_buf[cnt];
197 2 while( ( TABLE[temp].cmd_line[i] == cmd_buf.cmd_line[i] )&& (i<temp_length) )
198 2 i++;
199 2 if(i==temp_length)
200 2 return temp ; /* the index of cmd in TABLE[]*/
201 2
202 2 } /* search for the cmd_line contant matched cmd in TABLE ,and save the index */
203 1 return notfind;
204 1
205 1 }
206 /*********************************************************************************************************
207 ** 函数名称: Normal_Normal();
208 ** 功能描述: normal_normal state process function
209 ** 输 入:
210 ** 输 出:
211 ** 全局变量: rec ,cmd_buf
212 ** 调用模块: Uart0_Put_Char()
213 **
214 ** 作 者: wangzheng
215 ** 日 期: 2006.11.02
216 **-------------------------------------------------------------------------------------------------------
217 ** 修改人: wangzheng
218 ** 日 期:
219 **-------------------------------------------------------------------------------------------------------
220 ** 修改人: wangzheng
221 ** 日 期:
222 **------------------------------------------------------------------------------------------------------
223 ********************************************************************************************************/
224 void Normal_Normal(void)
225 {
226 1 if( (rec!=32) && (cmd_buf.length <= MAX_CMD_LENGTH) ) /* ignore the 'space' */
227 1 {
228 2 if( (rec>=65) && (rec<=90) )
229 2 rec = (rec + 32);
230 2 cmd_buf.cmd_line[ cmd_buf.length]= rec ; /* save the revieved char */
231 2 cmd_buf.length++;
232 2 Uart_Put_Char(rec); /* echo to the terminal */
233 2 }
234 1 else ;
235 1 }
236
237 /*********************************************************************************************************
238 ** 函数名称: Control_Control_bs()
239 ** 功能描述: control_control state process function
240 ** 输 入:
C51 COMPILER V8.06 SHELL 12/24/2007 11:34:17 PAGE 5
241 ** 输 出:
242 ** 全局变量: cmd_buf
243 ** 调用模块: Uart0_Put_Char( )
244 **
245 ** 作 者: wangzheng
246 ** 日 期:
247 **-------------------------------------------------------------------------------------------------------
248 ** 修改人: wangzheng
249 ** 日 期:
250 **-------------------------------------------------------------------------------------------------------
251 ** 修改人: wangzheng
252 ** 日 期:
253 **------------------------------------------------------------------------------------------------------
254 ********************************************************************************************************/
255
256 void Control_Control_bs(void )
257 {
258 1
259 1 if(cmd_buf.length >0)
260 1 {
261 2 cmd_buf.cmd_line[cmd_buf.length] = 0;
262 2 cmd_buf.length--;
263 2 Uart_Put_Char(8); // print backspace
264 2 Uart_Put_Char(32); // print space
265 2 Uart_Put_Char(8); //print backspace
266 2 }
267 1 }
268
269 /*********************************************************************************************************
270 ** 函数名称: Func_execute ()
271 ** 功能描述: execute the user function
272 ** 输 入:
273 ** 输 出:
274 ** 全局变量:
275 ** 调用模块: Init_cmd_buf( )
276 **
277 ** 作 者: wangzheng
278 ** 日 期: 2006.11.02
279 **-------------------------------------------------------------------------------------------------------
280 ** 修改人: wangzheng
281 ** 日 期:
282 **-------------------------------------------------------------------------------------------------------
283 ** 修改人: wangzheng
284 ** 日 期:
285 **------------------------------------------------------------------------------------------------------
286 ********************************************************************************************************/
287 void Func_Execute(void)
288 {
289 1 int8 index;
290 1
291 1 index = Search_Cmd( ); // search for the matched command in TABLE
292 1 if( index!= -1 )
293 1 TABLE[index].pfun();
294 1 else
295 1 Uart_Write(bad_command);
296 1 Init_Cmd_Buf( ); // prepare for next command
297 1
298 1 }
299 /*********************************************************************************************************
300 ** 函数名称: Cmd_Shell_FSM( )
301 ** 功能描述: core of command shell, a finite state machine
302 ** 输 入:
C51 COMPILER V8.06 SHELL 12/24/2007 11:34:17 PAGE 6
303 ** 输 出:
304 ** 全局变量: ..........
305 ** 调用模块:
306 **
307 ** 作 者: wangzheng
308 ** 日 期: 2006.11.02
309 **-------------------------------------------------------------------------------------------------------
310 ** 修改人: wangzheng
311 ** 日 期:
312 **-------------------------------------------------------------------------------------------------------
313 ** 修改人: wangzheng
314 ** 日 期:
315 **------------------------------------------------------------------------------------------------------
316 ********************************************************************************************************/
317
318 void Cmd_Shell_FSM(void)
319 {
320 1 while(sig_renew)
321 1 {
322 2 sig_renew = 0; // waitting for next uart interrupt change sig_new state
323 2 switch ( curr_stat ) // in normal char state
324 2 {
325 3 case normal_char :
326 3 switch(curr_sig)
327 3 {
328 4 case normal_char :
329 4 Normal_Normal( ); break;
330 4 case backspace :
331 4 State_Tran(control_char); break;
332 4 case cr :
333 4 State_Tran(func_exe); break;
334 4 default: break;
335 4 }break;
336 3
337 3 case control_char : // in control char state
338 3 switch ( curr_sig )
339 3 {
340 4 case normal_char :
341 4 State_Tran( normal_char ); break;
342 4 case backspace :
343 4 Control_Control_bs( ); break;
344 4 case cr :
345 4 State_Tran( func_exe ); break;
346 4 default: break;
347 4 }break;
348 3 case func_exe : // in function execute state
349 3 switch (curr_sig )
350 3 {
351 4 case cr :
352 4 Uart_Put_Char('\r');
353 4 Uart_Put_Char('\n');
354 4 Func_Execute( ); //execute the user defined function
355 4 Uart_Put_Char('>'); break;
356 4 case backspace :
357 4 Control_Control_bs( ); break;
358 4 case normal_char :
359 4 State_Tran (normal_char); break;
360 4 default: break;
361 4 }
362 3 default : break;
363 3 }
364 2 }
C51 COMPILER V8.06 SHELL 12/24/2007 11:34:17 PAGE 7
365 1
366 1 }
367
368 /************************************************************************************************
369 * end of file
370 ************************************************************************************************/
371
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 423 ----
CONSTANT SIZE = 426 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 25 10
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -