通常情況下,keil、iar 在定義陣列的時候,都是需要指定陣列的長度,但是我們大多數情況下是不知道我們輸入的資料可能會有多長。
所以為了盡可能的包含所有的情況,通常的做法就是在定義陣列的時候,將陣列的長度定義的非常長。結果就會導致多數情況下,大量的記憶體空間被浪費了。
其實在c99新增的標準中是有關於這個的定義的,而且keil和iar 也是支援的。
下面我們來看看具體的實現方法:
一、在keil 中的設定方法
在keil4.7編譯配置管理的c/c++選項卡中misc control中填寫 --c99(或者 --gnu 此方法還未測試)
如圖
在linker選項卡中刪除misc control中的資料
在keil5編譯配置管理的c/c++選項卡中選中 c99 mode
在linker選項卡中刪除misc control中的資料
如圖
這樣的話,編譯就能不報錯,通過了…
二、在iar 中的設定方法
在options->c/c++ compiler的c dialect 選中 allow vla即可。
如圖
ok! 經過以上的設定,就可以不考慮陣列長度的問題了!哈哈哈~~
STM32空閒中斷 DMA解決接收不定長資料問題
串列埠的中斷型別 define usart it pe uint16 t 0x0028 define usart it txe uint16 t 0x0727 define usart it tc uint16 t 0x0626 define usart it rxne uint16 t 0x052...
STM32空閒中斷 DMA解決接收不定長資料問題
串列埠的中斷型別 cpp view plain copy define usart it pe uint16 t 0x0028 define usart it txe uint16 t 0x0727 define usart it tc uint16 t 0x0626 define usart it...
stm32 串列埠接受不定長資料方法(3種)
方法1 串列埠接受資料,定時器來判斷超時是否接受資料完成。方法2 dma接受 idle中斷 實現思路 採用stm32f103的串列埠1,並配置成空閒中斷idle模式且使能dma接收,並同時設定接收緩衝區和初始化dma。那麼初始化完成之後,當外部給微控制器傳送資料的時候,假設這幀資料長度是200個位元...