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