之前我們從0開始新建了一個簡單的Zephyr應用-從0開始打造屬于自己的HelloWorld,本期就帶著大家熟悉一下Zephyr的shell和log系統。
首先給大家介紹Zephyr log系統的使用,在使用log前需要:
1. 修改proj.conf打開log功能:
CONFIG_LOG=y
2. 編輯main.c使用log功能:
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來進行打印,執行程序編譯和下載后可以得到結果:
接下來是shell的使用,同樣的首先要打開shell功能:
1. 編輯proj.conf文件:
CONFIG_LOG=y
CONFIG_SHELL=y
2. 重新構建下載程序查看效果:
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:
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, 會打印一個黃色猴子:
這樣,我們就介紹完了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:
// Thread configuration
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文件,我們也能游刃有余,處理得當!!
恩智浦半導體NXP Semiconductors N.V.(納斯達克股票代碼:NXPI)是汽車、工業物聯網、移動設備和通信基礎設施市場值得信賴的合作伙伴,致力于提供創新解決方案。
-
Log
+關注
關注
0文章
16瀏覽量
11497 -
Shell
+關注
關注
1文章
372瀏覽量
23978 -
Zephyr
+關注
關注
0文章
35瀏覽量
6233
原文標題:Zephyr的shell和log功能介紹
文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
MCXN947與Zephyr的跨界合作 嵌入式技術的新飛躍

恩智浦分享Zephyr調試技巧
Zephyr與FreeRTOS實時性測試比較
淺析Zephyr應用的代碼結構中的自定義驅動
使用Keysight免費評估Log4j/Log4Shell零日漏洞
Zephyr中斷服務類型及實際應用
泰凌微電子Zephyr編譯環境搭建
深入解析Zephyr RTOS的技術細節

評論