在线时间4781 小时
UID3441752
注册时间2017-11-21
NXP金币79898
TA的每日心情 | 开心 2025-7-11 08:53 |
---|
签到天数: 301 天 连续签到: 2 天 [LV.8]以坛为家I
管理员
  
- 积分
- 39756
- 最后登录
- 2025-8-8
|
之前我们从0开始新建了一个简单的Zephyr应用-从0开始打造属于自己的HelloWorld,本期就带着大家熟悉一下Zephyr的shell和log系统。
首先给大家介绍Zephyr log系统的使用,在使用log前需要:
1. 修改proj.conf打开log功能:
2. 编辑main.c使用log功能:
- #include <zephyr/kernel.h>
- #include <zephyr/logging/log.h>
- LOG_MODULE_REGISTER(main);
- int main(void)
- {
- int32_t count = 0;
- printk("Hello Zephyr!\r\n");
- while (1)
- {
- LOG_INF("Hello from main : %d", count++);
- k_sleep(K_MSEC(1000));
- }
- return 0;
- }
复制代码 这里通过LOG_MODULE_REGISTER注册了一个叫做main的log系统,并通过LOG_INF来进行打印,执行程序编译和下载后可以得到结果:
当然,还可以利用LOG_WRN和LOG_ERR来打印信息,大家可以自行体验。
接下来是shell的使用,同样的首先要打开shell功能:
1. 编辑proj.conf文件:
2. 重新构建下载程序查看效果:
3. 当然我们也可以尝试其他有用的shell选项:
- 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 :
- #include <zephyr/shell/shell.h>
- 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,"\r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██████████████████████████ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██▒▒▒▒░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░██ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██████▒▒░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░██ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██░░░░░░▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██████ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██░░░░░░▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░██\r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██░░░░░░▒▒░░░░░░░░░░██░░░░░░░░██░░░░░░░░██░░░░██\r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ████░░▒▒░░░░░░░░░░██░░░░░░░░██░░░░░░░░██████ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ████ ██▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██ ██ ██▒▒░░░░░░░░░░░░░░░░░░░░░░██ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██ ██ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██ ██▒▒▒▒▒▒▒▒░░░░░░░░░░░░▒▒▒▒▒▒▒▒██ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ████ ██▒▒▒▒▒▒▒▒░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒██ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██████▒▒▒▒▒▒▒▒░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒██ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██▒▒▒▒██▒▒░░░░░░░░░░░░░░░░▒▒██▒▒▒▒██ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██████▒▒▒▒░░░░░░░░░░░░▒▒▒▒██████ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██▒▒▒▒▒▒████████▒▒▒▒▒▒██ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██░░░░██ ██░░░░██ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW," ██████ ██████ \r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_YELLOW,"\r\n");
- shell_fprintf(shell,SHELL_VT100_COLOR_CYAN," I'm Super\r\n");
- 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 :
- #include <zephyr/kernel.h>
- #include <zephyr/logging/log.h>
- // Thread configuration
- #define CONFIG__T2_TH_STACK_SIZE 2048
- #define CONFIG__T2_TH_PRIORITY 5
- 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文件,我们也能游刃有余,处理得当!!
|
|