目錄
本學筆記基於zephyr 工程版本 2.2.99,主機環境爲ubuntu18.04,開發平臺 nrf52840dk_nrf52840
摘要
對於一個系統來說,調試信息非常重要。調試信息可以讓我們瞭解當前程序的運行狀態,可以將任何狀態打印出來。一個優秀的日誌系統非常重要。zephyr包含了一個非常強大的日誌系統。輸出日誌時的執行時間對程序的邏輯會產生影響,導致不可預期的後果。而zephyr強大的logging系統,輸出一行日誌,因爲緩衝區的存在,幾乎不佔用執行時間(只佔用數據拷貝的時間),日誌先緩存到緩衝區中,然後在系統空閒時,將緩衝區的數據輸出到後端設備(如串口,網絡,rtt等)。
1 使能logging
通過menuconfig使能logging系統
2 頭文件
#include <logging/log.h>
3 定義模塊名稱
3.1 定義時指定輸出等級
LOG_MODULE_REGISTER(foo, LOG_LEVEL_ERR);
輸出等級包括 0, LOG_LEVEL_ERR, LOG_LEVEL_WRN, LOG_LEVEL_INFO, LOG_LEVEL_DBG
3.2 使用默認等級輸出
LOG_MODULE_REGISTER(foo);
默認等級在menuconfig中設置。
4 輸出LOG
4.1 LOG_DBG
LOG_DBG("test");
當指定模塊等級爲LOG_LEVEL_DBG時有輸出
4.2 LOG_INFO
LOG_INFO("test");
當指定模塊等級爲LOG_LEVEL_INFO, LOG_LEVEL_DBG時有輸出
4.3 LOG_WRN
LOG_WRN("test");
當指定模塊等級爲LOG_LEVEL_WRN, LOG_LEVEL_INFO, LOG_LEVEL_DBG時有輸出
4.4 LOG_ERR
LOG_ERR("test");
當指定模塊等級爲LOG_LEVEL_ERR, LOG_LEVEL_WRN, LOG_LEVEL_INFO, LOG_LEVEL_DBG時有輸出
5 printk
熟悉Linux驅動開發的比較瞭解printk,zephyr中也可以使用printk。
printk函數定義在zephyr/lib/os/printk.c中
6 參考鏈接
https://docs.zephyrproject.org/latest/reference/logging/index.html#logging-in-a-module