Contiki 3.0: 自定义添加Shell指令

    xiaoxiao2021-03-25  223

    Shell是contiki系统所提供的一个十分方便的指令处理系统,通过shell可以做到各方面的操作控制与信息汲取,并且contiki支持自定义添加shell指令。 这里以添加一个login指令来演示如何添加一条自定义指令,先从最简单的传单个参数开始,指令设计暂定为 login :输入密码,如果匹配则完成登录否则提示失败。 0.建立两个文件分别为login-ban.h和login-ban.c 1.头文件 先写login-ban.c,这里主要包含有contiki系统定义头文件,我们自己创建的头文件,c语言标准库头文件和字符串处理头文件,shell指令库头文件 #include "contiki.h" #include "login-ban.h" #include #include #include "shell.h" 2.进程和指令的声明 PROCESS(shell_login_process, "login process"); 这一条函数注册我们执行指令的线程,当执行shell指令时候会启动 SHELL_COMMAND(login_command,     "login",     "login : login current system",     &shell_login_process); SHELL_COMMAND是我们所设计指令的结构,参数分别为shell指令的存储名称,shell指令的呼叫名称,shell指令的解释,shell指令执行进程(起始地址)。shell指令解释会在help list中打印出来。 3.指令的注册 void shell_login_init(void) {     shell_register_command(&login_command); } 这一个函数会注册刚才设置的指令到contiki系统中,使其能在命令提示下被呼叫 4.login线程 PROCESS_THREAD(shell_login_process, ev, data) { char *name;       int fd;       char *default_password="user";       PROCESS_BEGIN();       name = data;       if(name ==NULL) //判断传入的数据是否为空,如果是就显示指令的说明       {             shell_output_str(&login_command,                   "login : login current system","");             PROCESS_EXIT();       }       if(strcmp(name,default_password)==0) //利用strcmp函数来比较自定义密码和传入的密码是否一致       {             shell_output_str(&login_command,                   "Login succeed", "");       }       else       {             shell_output_str(&login_command,                   "ERROR:Login failed", "");       }       PROCESS_END(); } 这里有一个函数 shell_output_str主要是调用shell指令进程进行输出,本身shell指令是一个进程,如果用printf则仅仅是串口输出,在远端登录shell时候是无法看到的。 5.头文件与调用 login-pan.h头文件中只有一个函数的声明 void shell_login_init(void); 完成这些后,在我们的主函数中执行shell_login_init就可以了。 编译要记得Makefile文件中加上 PROJECT_SOURCEFILES+=login-pan.c
    转载请注明原文地址: https://ju.6miu.com/read-443.html

    最新回复(0)