有数年没写程式了,最近要改一支别人写的程式,遇到一些问题,不知可否解?
上层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()就好了
作者:
tailau0 (台劳)
2018-01-14 00:34:00在API789外面包一层,处理内存。
外面包一层? 可是API还是会从SPI_READ()拿资料API要读的位置和数量非常多,我只是想把重复性比较高的先搬到RSM,降低SPI执行的loading
作者:
Lipraxde (Lipraxde)
2018-01-14 13:17:00多判断个来自API789、或是多个全域变量纪录你这块catch有没有启用呢?是说,compiler会知道你RAM有没有开起来?
把SPI写成MACRO然后用__function__判断?感觉你很无奈,应该叫APIXXX改code才对XD*把SPA_READ写成MACRO
作者:
F04E (Fujitsu)
2018-01-15 18:31:00先判断指标是否为 nullptr ?
F大,目前改成用malloc和判断NULL来实作,暂时可解~
作者:
cphe (魔鬼藏在垃圾筒里)
2018-01-16 10:00:00如果连编译不过就是scope的问题吧 程式根本还没开始跑阿
作者:
cobrasgo (人鱼线变成鲔鱼线,超帅)
2018-01-29 21:36:00compile不过跟程式的逻辑无关,看内文我猜是先reference了未宣告的变量就是reference的地方还没宣告。最后你的error也po上来