你們有沒有遇到這樣的問題,程式貌似超過60多kb后adc轉換出來的資料就很奇怪了,我用的是STM32L151系列的;
通過觀察暫存器,adc的CR2暫存器發生了變化;


目前解決方法有兩種:
① 控制程式不要超過60多kb;
② 強制將CR2暫存器賦值成正確的值;
我想知道問題的根本原因在哪兒,在此等候各位大神的回復
~
uj5u.com熱心網友回復:
使用freertos了沒有,堆疊的空間是否設定合理呢?uj5u.com熱心網友回復:
沒有作業系統,同樣的程式,O0編譯出來66KB,O1編譯出來是62KB就是正常的,這就是我說為什么程式超過60多kb就出問題(我懷疑64KB是個分水嶺).uj5u.com熱心網友回復:
看看ld檔案里面的配置
uj5u.com熱心網友回復:
沒有ld檔案,只有sct,里面東西是工程自己生成的uj5u.com熱心網友回復:
感覺是堆疊被破壞了uj5u.com熱心網友回復:
應該是你的代碼無意改寫了該暫存器uj5u.com熱心網友回復:
應該是你的代碼無意改寫了該暫存器uj5u.com熱心網友回復:
不可能,其他功能都正常~uj5u.com熱心網友回復:
應該沒有吧,我只是將優化等級從O0改成O1就都正常了.uj5u.com熱心網友回復:
目前程式40多kb了uj5u.com熱心網友回復:
等您有機會到64kb以上時候再來光顧我這兒~uj5u.com熱心網友回復:
你這不是程式大小的問題。堆疊溢位的癥狀uj5u.com熱心網友回復:
你這是典型的堆疊溢位問題。O0編譯,是對代碼不做任何優化;O1編譯是編譯時進行了優化,部分問題編譯時給你優化了。你這個問題查一下定義的變數以及使用uj5u.com熱心網友回復:
優化等級對RAM基本上沒有影響,另外堆疊足夠大uj5u.com熱心網友回復:
堆疊溢位跟堆疊足夠大沒關系。這個是編程代碼規范的問題。舉個例子,定義一個char變數a, 然后給個memcpy(&a,"aa",2); 之類的都會導致堆疊溢位。后面的堆疊資料會被無意識的給改變了
uj5u.com熱心網友回復:
優化等級對RAM基本上沒有影響,另外堆疊足夠大
你這是典型的堆疊溢位問題。O0編譯,是對代碼不做任何優化;O1編譯是編譯時進行了優化,部分問題編譯時給你優化了。你這個問題查一下定義的變數以及使用
這樣給你說吧,定義一個變數,系統會在堆疊上開辟一個空間用于存盤這個變數,但是在向這個堆疊空間傳的值所占空間大于定義的空間時,這個堆疊臨近的空間會被無意識的改變了
uj5u.com熱心網友回復:
優化等級對RAM基本上沒有影響,另外堆疊足夠大
你這是典型的堆疊溢位問題。O0編譯,是對代碼不做任何優化;O1編譯是編譯時進行了優化,部分問題編譯時給你優化了。你這個問題查一下定義的變數以及使用
這樣給你說吧,定義一個變數,系統會在堆疊上開辟一個空間用于存盤這個變數,但是在向這個堆疊空間傳的值所占空間大于定義的空間時,這個堆疊臨近的空間會被無意識的改變了
uj5u.com熱心網友回復:
你說的情況對于有些問題是可以這樣分析的,但我的這個非常奇怪,我若洗掉掉一些無關的陳述句,減少程式大小后,ADC又正常了,這個怎么看都是編譯器的問題,但我又不擅長匯編,所以這個問題我也不太好查.
優化等級對RAM基本上沒有影響,另外堆疊足夠大
你這是典型的堆疊溢位問題。O0編譯,是對代碼不做任何優化;O1編譯是編譯時進行了優化,部分問題編譯時給你優化了。你這個問題查一下定義的變數以及使用
這樣給你說吧,定義一個變數,系統會在堆疊上開辟一個空間用于存盤這個變數,但是在向這個堆疊空間傳的值所占空間大于定義的空間時,這個堆疊臨近的空間會被無意識的改變了
你對比下匯編代碼,是不是改了堆疊的資料,呼叫函式就會有堆疊操作
uj5u.com熱心網友回復:
程式大小是沒關系的。只要能編譯通過下載進去,運行就沒問題。我平時專案中經常是程式大小接近存盤極限都沒出現過這個問題。好好檢查堆疊操作uj5u.com熱心網友回復:
watch一下那個暫存器的地址,用資料斷點監視那個地址試試。雖然想這么弄,但是就算是踩記憶體了,從SRAM踩到PERIPH那也太過分了uj5u.com熱心網友回復:
我的程式90多k也用了adc沒有出現這個問題,但是遇到過類似的。因為當時用了2個ADC,配置上這2個ADC的代碼完全是一樣的,但是,實際上2個adc卻莫名的不相同,后來debug查找后才發現,原來定義結構體變數的時候沒有初始化,采用了默認值,但實際上編譯的時候卻分配了一個莫名得值。所以在函式中定義變數,或者結構體的時候,最好初始化,uj5u.com熱心網友回復:
已經64K多了,沒有發現ADC作業例外的現象uj5u.com熱心網友回復:
我也遇到了相同的問題。首先,萬分感謝您給的解決方案,不知道您知道了問題的根本原因了嗎?uj5u.com熱心網友回復:
我也遇到了相同的問題。首先,萬分感謝您給的解決方案,不知道您知道了問題的根本原因了嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/119779.html
標籤:單片機/工控
下一篇:基于stm32風力擺的設計
