finsh是RT-Thread的命令行外殼(shell),提供一套供用戶在命令行的操作接口,主要用于調(diào)試、查看系統(tǒng)信息。在大部分嵌入式系統(tǒng)中,一般開發(fā)調(diào)試都使用硬件調(diào)試器和printf日志打印,在有些情況下,這兩種方式并不是那么好用。比如對于RT-Thread這個(gè)多線程系統(tǒng),我們想知道某個(gè)時(shí)刻系統(tǒng)中的線程運(yùn)行狀態(tài)、手動(dòng)控制系統(tǒng)狀態(tài)。如果有一個(gè)shell,就可以輸入命令,直接相應(yīng)的函數(shù)執(zhí)行獲得需要的信息,或者控制程序的行為。這無疑會(huì)十分方便。
finsh支持兩種模式:
1. C語言解釋器模式, 為行文方便稱之為c-style;
2. 傳統(tǒng)命令行模式,此模式又稱為msh(module shell)。C語言表達(dá)式解釋模式下, finsh能夠解析執(zhí)行大部分C語言的表達(dá)式,并使用類似C語言的函數(shù)調(diào)用方式訪問系統(tǒng)中的函數(shù)及全局變量,此外它也能夠通過命令行方式創(chuàng)建變量。在msh模式下,finsh運(yùn)行方式類似于dos/bash等傳統(tǒng)shell。
大致工作流程
一、finsh組件初始化函數(shù)finsh_system_init(),并且添加了INIT_COMPONENT_EXPORT(finsh_system_init),支持組件初始化;
這個(gè)函數(shù)會(huì)初始化finsh組件,包括一些finsh變量以及相關(guān)數(shù)據(jù)結(jié)構(gòu)。
然后它會(huì)創(chuàng)建一個(gè)線程,代碼如下:
可以看到,線程函數(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()后面,因?yàn)橐韧瓿蒮insh組件初始化才能設(shè)置終端設(shè)備。
-
嵌入式系統(tǒng)
+關(guān)注
關(guān)注
41文章
3624瀏覽量
129749 -
組件
+關(guān)注
關(guān)注
1文章
517瀏覽量
17922
原文標(biāo)題:RT-Thread finsh組件工作流程
文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論