0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

恩智浦MCU加油站 来源:恩智浦MCU加油站 2025-02-27 09:19 次阅读

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

ee7f79e6-f4a5-11ef-9310-92fbcf53809c.png

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

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

1. 编辑proj.conf文件:

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

ee9454ce-f4a5-11ef-9310-92fbcf53809c.png

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

eebd19ea-f4a5-11ef-9310-92fbcf53809c.png

这样,我们就介绍完了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编译下载代码:

eed7f5bc-f4a5-11ef-9310-92fbcf53809c.png

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

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


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

    关注

    0

    文章

    15

    浏览量

    11459
  • Shell
    +关注

    关注

    1

    文章

    371

    浏览量

    23803
  • Zephyr
    +关注

    关注

    0

    文章

    33

    浏览量

    6171

原文标题:Zephyr的shell和log功能介绍

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    MCXN947与Zephyr的跨界合作 嵌入式技术的新飞跃

    的架构,理解其如何工作。在此处仅对其简单介绍,便于理解后续内容。 构建系统 Zephyr 使用 CMake 作为其构建系统,使用 Kconfig 进行配置。首先 CMake 通过
    发表于 05-23 09:19 854次阅读
    MCXN947与<b class='flag-5'>Zephyr</b>的跨界合作 嵌入式技术的新飞跃

    分享Zephyr调试技巧

    前面几期中,我们着重给大家介绍了如何搭建Zephyr开发环境,以及如何添加自己的应用代码。今天让我们开始一个新的篇章:Zephyr调试技巧以及介绍Ozone进行
    的头像 发表于 03-13 09:05 833次阅读

    Zephyr的构建工具

    给大家介绍一下Zephyr的构建工具们:
    的头像 发表于 12-05 09:51 1238次阅读
    <b class='flag-5'>Zephyr</b>的构建工具

    Zephyr与FreeRTOS实时性测试比较

    时间是其它指标的基础,因此以任务切换时间为例,分析两个系统在实现上的差异。目前Zephyr任务切换时间为6.9微秒,FreeRTOS为2.2微秒。分析比较代码后得出,Zephyr设计时考虑到了时间片等因素,实现上比较复杂,暂时找
    发表于 08-19 16:12

    MIMXRT595-EVK是否可以在SRAM中运行hello_world zephyr示例?

    专家,我知道 MIMXRT1xxx 能够在 ITCM 中运行 hello_world 但是 MIMXRT595 中没有 ITCM 只有 SRAM。MIMXRT595-EVK是否可以在SRAM中运行hello_world zeph
    发表于 03-30 06:38

    LOG101/LOG104偏流调零电路

    LOG101/LOG104偏流调零电路 如图所示为LOG101/LOG104的偏流调零电路。 LOG101/
    发表于 05-13 16:10 1687次阅读
    <b class='flag-5'>LOG</b>101/<b class='flag-5'>LOG</b>104偏流调零电路

    Android中Log相关介绍

    本文档内容介绍了基于Android中Log相关介绍及源代码,供参考
    发表于 03-15 11:03 4次下载

    浅析Zephyr应用的代码结构中的自定义驱动

    本篇是《《Zephyr应用的代码结构》》系列的终篇和下面两篇文章一起可以构建出一个有app独立管理的zephyr项目 Zephyr应用的代码结构--West提货单: zephyr
    的头像 发表于 08-18 09:08 5102次阅读

    嵌入式系统log模块设计

    对于开发嵌入式系统的工程师来说,log功能无疑是非常重要的功能模块。这里讲讲嵌入式系统log模块
    发表于 11-03 17:51 13次下载
    嵌入式<b class='flag-5'>系统</b><b class='flag-5'>log</b>模块设计

    使用Keysight免费评估Log4j/Log4Shell零日漏洞

    在过去72小时左右的时间里,网络安全领域的大多数人已经意识到Log4j/Log4Shell零日漏洞及其对大多数web服务器、云应用程序、互联网设备和嵌入式设备的广泛影响。你可以阅读CVE-2021-44228中记录的所有血淋淋的细节,但底线是:这可能非常非常糟糕。
    的头像 发表于 12-21 10:50 1683次阅读

    Zephyr中断服务类型及实际应用

    说完中断类型,介绍一下Zephyr中的中断向量表的概念,除了硬件中断向量表,Zephyr中还有一个较为新的概念,我们在上文中也有所提及,叫做软件中断向量表,那么他们都各自负责什么呢?我们来一一
    的头像 发表于 03-10 11:53 2759次阅读

    泰凌微电子Zephyr编译环境搭建

    如上文所介绍,Telink Zephyr是由社区的Zephyr仓库fork而来的,用于维护我们在社区的内容,并开发新的功能。若要查看 Telink
    的头像 发表于 01-30 11:28 3585次阅读

    深入解析Zephyr RTOS的技术细节

    Zephyr是一个针对资源受限设备优化的小型、可缩放、多体系架构实时操作系统(RTOS)。Zephyr由Linux基金会维护[1],是一个以构建业界最佳的RTOS为目标的开源合作项目。近年来
    的头像 发表于 10-22 16:47 1405次阅读
    深入解析<b class='flag-5'>Zephyr</b> RTOS的技术细节

    使用MCUXPresso插件开发Zephyr

    应广大读者朋友的热情邀请,我们特别策划了“Zephyr领进门”系列介绍(共十篇),旨在为大家深度剖析Zephyr OS——这一备受瞩目的开源实时操作系统。从使用MCUXPresso插件
    的头像 发表于 11-28 09:41 666次阅读

    Zephyr赋能安全可靠的嵌入式开发

    日前,联手Zephyr实时操作系统成功举办了Zephyr Project Meetup上海站的活动,6场主题演讲以及深入的现场技术交流
    的头像 发表于 04-21 10:26 235次阅读