恩智浦解读Zephyr log系统的使用 Zephyr的shell和log功能介绍

描述

之前我们从0开始新建了一个简单的Zephyr应用-从0开始打造属于自己的HelloWorld,本期就带着大家熟悉一下Zephyrshelllog系统。

首先给大家介绍Zephyr log系统的使用,在使用log前需要:

 

 

1. 修改proj.conf打开log功能:
CONFIG_LOG=y
2. 编辑main.c使用log功能:
#include 
#include 


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来进行打印,执行程序编译和下载后可以得到结果:

 

Zephyr

当然,还可以利用LOG_WRN和LOG_ERR来打印信息,大家可以自行体验。

 

接下来是shell的使用,同样的首先要打开shell功能:

 

 

1. 编辑proj.conf文件:

 

CONFIG_LOG=y
CONFIG_SHELL=y
2. 重新构建下载程序查看效果:

Zephyr

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 
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, 会打印一个黄色猴子:

Zephyr

这样,我们就介绍完了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 
#include 


// 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编译下载代码:

Zephyr

 

 

这样,即便我们后面有更复杂的工程需要添加更多的.c文件,我们也能游刃有余,处理得当!!

恩智浦半导体NXP Semiconductors N.V.(纳斯达克股票代码:NXPI)是汽车、工业物联网、移动设备和通信基础设施市场值得信赖的合作伙伴,致力于提供创新解决方案。

 


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分