finsh是RT-Thread的命令行外殼(shell),提供一套供用戶在命令行的操作接口,主要用于調(diào)試、查看系統(tǒng)信息。在大部分嵌入式系統(tǒng)中,一般開發(fā)調(diào)試都使用硬件調(diào)試器和printf日志打印,在有些情況下,這兩種方式并不是那么好用。比如對于RT-Thread這個多線程系統(tǒng),我們想知道某個時刻系統(tǒng)中的線程運行狀態(tài)、手動控制系統(tǒng)狀態(tài)。如果有一個shell,就可以輸入命令,直接相應(yīng)的函數(shù)執(zhí)行獲得需要的信息,或者控制程序的行為。這無疑會十分方便。
finsh支持兩種模式:
1. C語言解釋器模式, 為行文方便稱之為c-style;
2. 傳統(tǒng)命令行模式,此模式又稱為msh(module shell)。C語言表達式解釋模式下, finsh能夠解析執(zhí)行大部分C語言的表達式,并使用類似C語言的函數(shù)調(diào)用方式訪問系統(tǒng)中的函數(shù)及全局變量,此外它也能夠通過命令行方式創(chuàng)建變量。在msh模式下,finsh運行方式類似于dos/bash等傳統(tǒng)shell。
大致工作流程
一、finsh組件初始化函數(shù)finsh_system_init(),并且添加了INIT_COMPONENT_EXPORT(finsh_system_init),支持組件初始化;
這個函數(shù)會初始化finsh組件,包括一些finsh變量以及相關(guān)數(shù)據(jù)結(jié)構(gòu)。
然后它會創(chuàng)建一個線程,代碼如下:
可以看到,線程函數(shù)是finsh_thread_entry,在下一節(jié)中我們將分析它具體工作流程。
二、void finsh_set_device(const char* device_name)函數(shù)為finsh設(shè)置終端設(shè)備,在stm32中主要設(shè)置串口設(shè)備為終端。該函數(shù)一般放在組件初始化函數(shù)rt_component_init()后面,因為要先完成finsh組件初始化才能設(shè)置終端設(shè)備。
-
嵌入式系統(tǒng)
+關(guān)注
關(guān)注
41文章
3702瀏覽量
132717 -
組件
+關(guān)注
關(guān)注
1文章
543瀏覽量
18819
原文標題:RT-Thread finsh組件工作流程
文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
RT-Thread學(xué)習(xí)筆記和finsh shell配置方法
在 RT-Thread Studio 上使用 RT-Thread Nano
【每日一練】RT-Thread Nano-Finsh組件支持(第四節(jié)學(xué)習(xí)視頻)
RT-Thread FinSH 控制臺
RT-Thread的FinSH命令行組件原理是什么
RT-Thread FinSH命令行組件導(dǎo)出自定義msh命令
RT-Thread 應(yīng)用筆記 - RTC Alarm 組件的使用

RT-Thread全球技術(shù)大會:Kconfig在RT-Thread中的工作機制

評論