[问题] 编译不过

楼主: 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