之前我们从0开始新建了一个简单的Zephyr应用-从0开始打造属于自己的HelloWorld,本期就带着大家熟悉一下Zephyr的shell和log系统。
首先给大家介绍Zephyr log系统的使用,在使用log前需要:
1. 修改proj.conf打开log功能:
CONFIG_LOG=y
2. 编辑main.c使用log功能:
LOG_MODULE_REGISTER(main);
int main(void)
{
int32_t count = 0;
printk("Hello Zephyr!
");
while (1)
{
LOG_INF("Hello from main : %d", count++);
k_sleep(K_MSEC(1000));
}
return 0;
}
这里通过LOG_MODULE_REGISTER注册了一个叫做main的log系统,并通过LOG_INF来进行打印,执行程序编译和下载后可以得到结果:
接下来是shell的使用,同样的首先要打开shell功能:
1. 编辑proj.conf文件:
CONFIG_LOG=y
CONFIG_SHELL=y
2. 重新构建下载程序查看效果:
CONFIG_LOG=y
CONFIG_LOG_CMDS=y
CONFIG_SHELL=y
CONFIG_SHELL_PROMPT_UART="shell>"
CONFIG_SHELL_VT100_COLORS=y
CONFIG_KERNEL_SHELL=y
CONFIG_THREAD_MONITOR=y
#add a reboot command
CONFIG_REBOOT=y
4. 添加一个自定义shell命令, 拷贝如下内容到main.c :
static int monkey_handler(const struct shell *shell,
size_t argc,
char **argv)
{
ARG_UNUSED(argc);
ARG_UNUSED(argv);
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW,"
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██████████████████████████
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██▒▒▒▒░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░██
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██████▒▒░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░██
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██░░░░░░▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██████
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██░░░░░░▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░██
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██░░░░░░▒▒░░░░░░░░░░██░░░░░░░░██░░░░░░░░██░░░░██
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ████░░▒▒░░░░░░░░░░██░░░░░░░░██░░░░░░░░██████
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ████ ██▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██ ██ ██▒▒░░░░░░░░░░░░░░░░░░░░░░██
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██ ██ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██ ██▒▒▒▒▒▒▒▒░░░░░░░░░░░░▒▒▒▒▒▒▒▒██
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ████ ██▒▒▒▒▒▒▒▒░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒██
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██████▒▒▒▒▒▒▒▒░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒██
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██▒▒▒▒██▒▒░░░░░░░░░░░░░░░░▒▒██▒▒▒▒██
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██████▒▒▒▒░░░░░░░░░░░░▒▒▒▒██████
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██▒▒▒▒▒▒████████▒▒▒▒▒▒██
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██░░░░██ ██░░░░██
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██████ ██████
");
shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW,"
");
shell_fprintf(shell,SHELL_VT100_COLOR_CYAN," I'm Super
");
return 0;
}
SHELL_CMD_REGISTER(monkey, NULL, "I'm super.", monkey_handler);
这里我们通过SHELL_CMD_REGISTER声明了一个叫做monkey的指令,其处理函数是monkey_handler, 会打印一个黄色猴子:
这样,我们就介绍完了shell和log系统的添加。在上一期中,我们只添加了一个main.c,在本期我们为大家补一个如果添加额外的一个.c文件,需要干两件事儿:
1. 编辑CMakeLists.txt 添加c文件:
cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(hello_world)
target_sources(app PRIVATE src/main.c)
target_sources(app PRIVATE src/t2.c)
2. 创建t2.c :
// Thread configuration
void t2_thread_task(void *, void *, void *);
K_THREAD_DEFINE(t2_thread, CONFIG__T2_TH_STACK_SIZE,
t2_thread_task, NULL, NULL, NULL,
CONFIG__T2_TH_PRIORITY, 0, 0);
LOG_MODULE_REGISTER(t2);
void t2_thread_task(void *, void *, void *)
{
while (1)
{
LOG_INF("Hello from T2!");
k_sleep(K_MSEC(500));
}
}
3. 使用west build + west flash编译下载代码:
这样,即便我们后面有更复杂的工程需要添加更多的.c文件,我们也能游刃有余,处理得当!!
恩智浦半导体NXP Semiconductors N.V.(纳斯达克股票代码:NXPI)是汽车、工业物联网、移动设备和通信基础设施市场值得信赖的合作伙伴,致力于提供创新解决方案。
全部0条评论
快来发表一下你的评论吧 !