[問題] 編譯不過

作者: tizzychen (大笨鐘)   2018-01-13 20:15:38
有數年沒寫程式了,最近要改一支別人寫的程式,遇到一些問題,不知可否解?
上層API有
API123();
API456();
API789();
API是其他sw廠商提供的,不能修改,也不會有修改的意願
全部的API都會在底層一直呼叫 SPI_READ()
SPI_READ()是我們自己寫的,可以修改
因為API是純SW的寫法,會去SPI取固定位置、固定長度的資料,拿去做運算
造成API789()執行時間超級長,大概10秒
因為我已經知道他要的SPI資料的位置和長度,
我是想把資料先預讀搬到RAM中,
然後在SPI_READ()判斷,
if(位置對 && 長度對), 去RAM搬資料,不實際執行底層SPI的運作 (偷時間)
要預存的RAM大小~1KB,
對斤斤計較的MCU來說,RAM最好只在需要的時間再開起來
所以RAM只希望在API789()前開起來,API789()結束後close和free掉
現在的問題在我在SPI_READ()中,寫了if的判斷式
但是可能在執行API123()時,
寫的if判斷式中,RAM的變數或變數指標,在那個時間點並不存在
造成編譯一直不過
總結:
我只希望在API789()前後,才讓RAM有預讀的資料
讓API789()裏頭呼叫SPI_READ()時,if成立,才去拿預讀資料
其他API123(), API234()執行呼叫SPI_READ()時,我不care
有點想不出如何解,希望各位指點一下,感謝.
作者: bibo9901 (function(){})()   2018-01-13 20:26:00
這問題很常見,用API000()或API9527()就好了
作者: tizzychen (大笨鐘)   2018-01-13 21:11:00
請問b大,這是什麼意思?
作者: tailau0 (台勞)   2018-01-14 00:34:00
在API789外面包一層,處理記憶體。
作者: tizzychen (大笨鐘)   2018-01-14 09:09:00
外面包一層? 可是API還是會從SPI_READ()拿資料API要讀的位置和數量非常多,我只是想把重覆性比較高的先搬到RSM,降低SPI執行的loading
作者: Lipraxde (Lipraxde)   2018-01-14 13:17:00
多判斷個來自API789、或是多個全域變數紀錄你這塊catch有沒有啟用呢?是說,compiler會知道你RAM有沒有開起來?
作者: michael0728n (蒜˙遠古)   2018-01-14 22:44:00
把SPI寫成MACRO然後用__function__判斷?感覺你很無奈,應該叫APIXXX改code才對XD*把SPA_READ寫成MACRO
作者: F04E (Fujitsu)   2018-01-15 18:31:00
先判斷指標是否為 nullptr ?
作者: tizzychen (大笨鐘)   2018-01-15 22:52:00
F大,目前改成用malloc和判斷NULL來實作,暫時可解~
作者: cphe (魔鬼藏在垃圾筒裡)   2018-01-16 10:00:00
如果連編譯不過就是scope的問題吧 程式根本還沒開始跑阿
作者: cobrasgo (人魚線變成鮪魚線,超帥)   2018-01-29 21:36:00
compile不過跟程式的邏輯無關,看內文我猜是先reference了未宣告的變數就是reference的地方還沒宣告。最後你的error也po上來

Links booklink

Contact Us: admin [ a t ] ucptt.com