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,就可以輸入命令,直接相應的函數(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變量以及相關數(shù)據(jù)結構。
然后它會創(chuàng)建一個線程,代碼如下:
可以看到,線程函數(shù)是finsh_thread_entry,在下一節(jié)中我們將分析它具體工作流程。
二、void finsh_set_device(const char* device_name)函數(shù)為finsh設置終端設備,在stm32中主要設置串口設備為終端。該函數(shù)一般放在組件初始化函數(shù)rt_component_init()后面,因為要先完成finsh組件初始化才能設置終端設備。
-
嵌入式系統(tǒng)
+關注
關注
41文章
3587瀏覽量
129435 -
組件
+關注
關注
1文章
512瀏覽量
17813
原文標題:RT-Thread finsh組件工作流程
文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論