1. 程式人生 > >stm32 usb lib v2.2.0 越界bug解決辦法

stm32 usb lib v2.2.0 越界bug解決辦法

使用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