这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 【nRF7002DK】日志打印

共2条 1/1 1 跳转至

【nRF7002DK】日志打印

工程师
2025-03-22 13:07:40   被打赏 20 分(兑奖)     打赏

【前言】

nrf 的zephyr的一个非常优秀的日志记录模块【logger module

在他的学习手册中有如下记录:

image.png

默认情况下启用时间戳功能(LOG_BACKEND_FORMAT_TIMESTAMP)以及错误和警告日志着色功能(LOG_BACKEND_SHOW_COLOR)。同样,记录器通过内部调用内核函数k_cycle_get_32()来获取时间戳。此例程返回自启动以来的当前时间(正常运行时间),由系统的硬件时钟测量。如果系统上存在外部实时时钟,您可以将其更改为返回实际时间和日期。

这次一次将在前面一篇【nRF7002DK】按键中断点灯  的基础上添加日志记录。

1、首先我在prj.conf中添加一行

CONFIG_LOG=y

image.png

添加CONFIG_LOG=y将在构建中包含记录器模块源代码。

2、在main.c包含logger的模块的头文件:

#include <zephyr/logging/log.h>

3、首先要向系统注册logger,通过使用宏LOG_MODULE_REGISTER()来完成的,它有两个参数:

1、强制模块名称。模块名称将包含在每个日志条目中,这有助于区分不同模块和/或过滤生成的消息。模块名称必须Not作为字符串传递。换句话说,不要使用引号“”

2、模块的可选最大日志级别。最大日志级别将决定哪些消息将被发送到控制台。例如,如果您将模块X的日志级别设置为LOG_LEVEL_DBG,则意味着所有生成的消息(Debug、Info、Warning和Error)将被发送到控制台。另一方面,如果您将模块Y的最大日志级别设置为LOG_LEVEL_WRN,则意味着只有具有严重级别警告和错误的消息将被发送到控制台。如果未提供最低日志级别,则文件中使用默认全局日志级别(CONFIG_LOG_DEFAULT_LEVEL)。默认全局日志级别设置为LOG_LEVEL_INF。

在main.c中的头部我添加如下一行代码:

LOG_MODULE_REGISTER(main, LOG_LEVEL_DBG);

4、打印日志信息,添加如下代码进行打印:

	int exercise_num = 2;
	uint8_t data[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
					  'H', 'e', 'l', 'l', 'o', '!'};
	LOG_INF("nRF Connect SDK Fundamentals");
	LOG_INF("Exercise %d\n", exercise_num);
	LOG_DBG("A Log message in debug level");
	LOG_WRN("A Log message in warning level");
	LOG_ERR("A Log message in error level");

5、同时将按键回调函数修改如下:

void button_pressed(const struct device *dev, struct gpio_callback *cb, uint32_t pins)
{
    // gpio_pin_toggle_dt(&led);
    int i;
    long int factorial = 1;
    LOG_INF("Calculating factorial of numbers from 1 to %d", MAX_NUMBER_FACT);
    for(i=1;i<=MAX_NUMBER_FACT;i++){
        factorial = factorial * i;
        LOG_INF("%d! = %ld", i, factorial);
    }

}

【实现效果】

重新编译后,在串口打印出如下日志信息:

image.png

【总结】

在zephyr中提供了日志记录模块,使得日志打印非常容易,并且有色彩提示。





关键词: nRF7002DK     日志     打印     模块     zephyr    

院士
2025-03-23 16:52:10     打赏
2楼

人家这个日志系统真棒啊!

还有颜色识别,厉害


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]