www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 公眾號精選 > 嵌入式大雜燴
[導讀]關注「Linux大陸」,星標公眾號,一起進步!來源:CSDN1.前言玩過Linux的朋友,是不是對Linux無所不能的串口Shell命令控制臺羨慕不已,要是自己做的STM32F系列低檔次的MCU也有這種控制交互能力,會給調(diào)試/維護和配置省下多少麻煩事呀,比如啟動/關閉調(diào)試或自檢模...

關注「Linux大陸」,星標公眾號,一起進步!

來源:CSDN

1. 前言

玩過Linux的朋友, 是不是對Linux無所不能的串口Shell命令控制臺羨慕不已, 要是自己做的STM32F系列低檔次的MCU也有這種控制交互能力, 會給調(diào)試/維護和配置省下多少麻煩事呀, 比如啟動/關閉調(diào)試或自檢模式, 打印調(diào)試信息, 配置系統(tǒng)參數(shù), 傳輸文件等等, 也有相當多的朋友憑借自己出色的編程能力可以實現(xiàn)這些功能, 這里提出我的這個解決方案, 以作交流.

本平臺(xc_shell)具備以下性能特點:

  1. 大量主要代碼, 和具體硬件無關, 移植性強,代碼文件少.

  2. 只有在處理用戶的輸入命令時, 才占用CPU資源, 且代碼可裁剪到1KB SRAM和4KB Flash;

  3. 用戶可以非常靈活的添加按模板編寫的命令腳本文件, 自定義擴張能力強.

  4. 支持操作系統(tǒng)和非操作系統(tǒng)兩種場景應用.

  5. 支持Ymodem文件傳輸協(xié)議

  6. 支持將Flash的扇區(qū)開辟為參數(shù)區(qū), 可實現(xiàn)本地/遠程升級。

  7. 實用Led燈信號管理, 可將65535虛擬信號燈選擇輸出到1個實體LED燈上, 調(diào)試時序和狀態(tài)非常有用

  8. 擁有基礎的LED管理, 調(diào)試模式設置, 命令幫助指令, 復位指令等基礎功能

功能越多設計會越復雜, 為了解釋清楚代碼, 先向大家解釋一下以上功能的基礎實現(xiàn)原理, 并提供一個最小的的源碼工程。

2. xc_shell平臺介紹

2.1 如何實現(xiàn)硬件無關

類比Linux會發(fā)現(xiàn), 設備的硬件接口往往會被虛擬成一個文件(驅(qū)動), 而Linux內(nèi)核完全與硬件系統(tǒng)無任何字節(jié)關聯(lián), 不同平臺驅(qū)動不同而已, 故而本xc_shell的串口驅(qū)動也采用了相似的思路:

1) 串口驅(qū)動用一個結(jié)構(gòu)體描述, 這樣只需在xc_shell.c中用指針指向這個TTYx_HANDLE結(jié)構(gòu)體對象就可以將串口(tty)硬件與內(nèi)核聯(lián)系在一起, 聰明的朋友可能會想到, 假如我將帶網(wǎng)絡的開發(fā)板按此結(jié)構(gòu)體,虛擬一個TTY對象, 豈不是就可以實現(xiàn)一個網(wǎng)絡遠程控制臺了! ?這點確實是可以的!

2) 當然諸如多TTY串口實現(xiàn)接口互換等, 都是一個指針和step2中的注入回調(diào)處理交換的問題。

3)用戶在使用api_TxdFrame或api_TxdByte時”bsp_ttyX.c“,會驅(qū)動具體MCU的串口將數(shù)據(jù)發(fā)送出去, 收到一幀數(shù)據(jù)后,若用戶設置了inj_RcvFrame回調(diào)處理方法,則會在中斷中執(zhí)行用戶的回調(diào)處理。

/*---------------------*?
*?????指正函數(shù)定義
*----------------------*/

typedef?void????(*pvFunDummy)(void);
?
//輸入整行,輸出邏輯
typedef?void????(*pvFunVoid)?(void);
typedef?void????(*pvFunBool)?(bool?????bVal);
typedef?void????(*pvFunChar)?(uint8_t??cVal);
typedef?void????(*pvFunShort)(uint16_t?sVal);
typedef?void????(*pvFunWord)?(uint32_t?wVal);
?
//輸入整行,輸出邏輯
typedef?bool????(*pbFunVoid)?(void);
typedef?bool????(*pbFunBool)?(bool?????bVal);
typedef?bool????(*pbFunChar)?(uint8_t??cVal);
typedef?bool????(*pbFunShort)(uint16_t?sVal);
typedef?bool????(*pbFunWord)?(uint32_t?wVal);
?
//輸入整形指針,輸出邏輯
typedef?bool????(*pbFun_pVoid)?(void?*?pVoid);
typedef?bool????(*pbFun_pChar)?(uint8_t??*?pStr);
typedef?bool????(*pbFun_pShort)(uint16_t?*?pShor);
typedef?bool????(*pbFun_pWord)?(uint32_t?*?pWord);
?
//輸入數(shù)據(jù)幀,輸出邏輯
typedef?bool????(*pbFun_Buffx)(void?*?pcBuff,?uint16_t?len?);
typedef?bool????(*pbFun_Bytex)(uint8_t?*?pcByte,?uint16_t?len?);
/*---------------------*?
*????TTYx?句柄結(jié)構(gòu)
*----------------------*/

typedef?struct?TTYx_HANDLE_STRUCT?
{

????const?char??*?const?name;???????//驅(qū)動器名
????const?uint16_t??????rxSize;?????//接收大小
????const?uint16_t??????txSize;?????//發(fā)送大小
????
????//------------------------------------------------------
????//step1:?用戶可用API
????const?pvFunWord?????init;???????????//初始化.
????const?pbFun_Bytex???api_TxdFrame;???//發(fā)送數(shù)據(jù)幀.?(發(fā)送幀)
????const?pbFunChar?????api_TxdByte;????//發(fā)送數(shù)據(jù)字節(jié)
????
????//------------------------------------------------------
????//step2:?注入回調(diào)函數(shù)
????pbFun_Bytex?????????inj_RcvFrame;???//(ISR)接收數(shù)據(jù)幀.?(接收幀)
????pvFunDummy??????????inj_TxdReady;???//(ISR)發(fā)送完畢回調(diào)
????
????//------------------------------------------------------
????//step3:?接收回調(diào)函數(shù)
????struct?TTYx_HANDLE_STRUCT?*?pvNext;?//連接到下一個指令?
}TTYx_HANDLE;
  1. 可注入的命令腳本(CLI)實現(xiàn)
命令CLI也是一個結(jié)構(gòu)體對象:

/*---------------------*?
*???????CLI指令
*----------------------*/

typedef?struct
{

?const?char?*?const??pcCmdStr;?????//指令字符串(只能為小寫字母)
?const?char?*?const??pcHelpStr;?????//指令描述,必須以:"\r\n結(jié)束".?比如:"help:?Returns?a?list\r\n".
?const?pFunHook??????pxCmdHook;?????//指向回調(diào)函數(shù)的指針,處理成功返回真否者返回0;
?uint8_t?????????????ucExpParam;?????//指令期望的參數(shù)個數(shù)
?const?MEDIA_HANDLE?*phStorage;??????//指向存儲介質(zhì),沒有的話填充NULL??
}Cmd_Typedef_t;

各位朋友可能會使用到非常多的自定義CLI命令, 格式諸如這個網(wǎng)卡的命令:

const?Cmd_Typedef_t?CLI_WizMsg=
{
????//識別關鍵字
????.pcCmdStr???=?"wiz",
????//幫助內(nèi)容
????.pcHelpStr??=
????"[WIZ?contorls]\r\n"
?"?wiz?help\r\n"
?"?wiz?rd?info\r\n"
?"?wiz?reset\r\n"
?"?wiz?wr?ip?...\r\n"
?"?wiz?wr?mask?...\r\n"
?"?wiz?wr?way?...\r\n"
?"?wiz?wr?mac?-

-

-

-

-

\r\n"
?"?wiz?wr?port????\r\n"
?"?wiz?wr?sip?...?\r\n"
?"?wiz?wr?cip?...?\r\n"
?"?wiz?load?default\r\n"
?"[WIZ?Test?mode]\r\n"
?"?wiz?loop?open\r\n"
?"?wiz?loop?close\r\n"
?"\r\n",
?
?//處理函數(shù)
?.pxCmdHook??=?
本站聲明: 本文章由作者或相關機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術(shù)
關閉
關閉