1.前言
玩過Linux的朋友, 是不是對Linux無所不能的串口Shell命令控制檯羨慕不已, 要是自己做的STM32F系列低檔次的MCU也有這種控制交互能力, 會給調試/維護和配置省下多少麻煩事呀, 比如啓動/關閉調試或自檢模式, 打印調試信息, 配置系統參數, 傳輸文件等等, 也有相當多的朋友憑藉自己出色的編程能力可以實現這些功能, 下面是我自寫的一個控制檯軟件, 以作交流.
本平臺(console)具備以下性能特點:
1) 移植性強,代碼文件少.
2) 只有在處理用戶的輸入命令時, 才佔用CPU資源;
3) 用戶可以非常靈活的添加按模板編寫的命令腳本文件, 自定義擴張能力強.
4) 支持操作系統和非操作系統兩種場景應用.
5) 調試模式設置, 命令幫助指令, 復位指令等基礎功能。
功能越多設計會越複雜, 爲了解釋清楚代碼, 先向大家解釋一下以上功能的基礎實現原理, 並提供一個最小的的源碼工程
2,軟件實現
###2.1 串口配置###
定義console需使用的串口,具體配置詳見我的另一篇博客《單片機串口環形緩衝隊列處理架構》,鏈接地址:https://blog.csdn.net/qq_26964063/article/details/96861560
###2.2 console控制檯軟件編寫###
1,定義一個指向vint類型的指針變量,用於指向回調功能函數:
typedef int (*consoleCallback)(char * buf, int len);//函數指針
consoleCallback console_cb = NULL;
2,定義一個信號量,用於串口中斷接收發送信號量來通知主函數有信號待處理,作用:減少cpu的佔用時間
SemHandle_t csSem = NULL;
sem_postIsr(csSem);//用於中斷post一個信號
sem_pend(csSem); //用於主函數pend一個信號
3,中斷部分與主函數的上下文切換
//中斷函數
void USARTx_