stm32 usb lib v2.2.0 越界bug解決辦法
阿新 • • 發佈:2019-02-02
使用STM32 usb host lib v2.2.0版本,實現 usb msc 功能,發現使用過程中某全域性變數總是被莫名修改,追蹤程式碼到USB 讀寫層,發現了庫中一個越界的bug,網上搜索,果然有人遇到相同的問題。問題如下:
在 usbh_msc_bot.c中,有如下幾代碼段。
1、413行~425行左右, pRxTxBuff 為變數CSWArray的地址,其長度為13byte,而下面請求函式中,請求長度為63位元組,造成越界。
附上CSWArry定義
2、我遇到的問題出現在這兩段程式碼,接收地址datapoint為 上述1中pRxTxBuff,即CSWArray。跟蹤到的請求長度為64byte,同樣造成越界,改變了我的全域性變數。
解決辦法有兩種,思路都是一樣,定義出更多的空間,以滿足接收長度
1、在 USBH_MSC_CSWData 之前,定義 (64-13)byte大小的空間,給越界的指標使用。有個疑問,全域性變數所在地址區域,地址生長方向也反向生長,所以要在變數前面定義空間?
2、修改USBH_MSC_CSWData ,使其長度為64byte。
編譯下載驗證,問題解決。
附上網上搜索到的bug連線,還有一些其他的bug說明,暫時還未遇到,連線中內容已不知道原出處在哪:
https://wenku.baidu.com/view/75f68d04c1c708a1294a4461.html