作者tizzychen (大笨钟)
看板C_and_CPP
标题[问题] 编译不过
时间Sat Jan 13 20:15:38 2018
有数年没写程式了,最近要改一支别人写的程式,遇到一些问题,不知可否解?
上层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
有点想不出如何解,希望各位指点一下,感谢.
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.32.240.169
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1515845741.A.6B2.html
1F:→ bibo9901: 这问题很常见,用API000()或API9527()就好了 01/13 20:26
2F:→ tizzychen: 请问b大,这是什麽意思? 01/13 21:11
3F:推 tailau0: 在API789外面包一层,处理记忆体。 01/14 00:34
4F:→ tizzychen: 外面包一层? 可是API还是会从SPI_READ()拿资料 01/14 09:09
5F:→ tizzychen: API要读的位置和数量非常多,我只是想把重覆性比较高的 01/14 09:11
6F:→ tizzychen: 先搬到RSM,降低SPI执行的loading 01/14 09:11
7F:→ Lipraxde: 多判断个来自API789、或是多个全域变数纪录你这块catch 01/14 13:17
8F:→ Lipraxde: 有没有启用呢? 01/14 13:17
9F:→ Lipraxde: 是说,compiler会知道你RAM有没有开起来? 01/14 13:19
10F:推 michael0728n: 把SPI写成MACRO然後用__function__判断? 01/14 22:44
11F:→ michael0728n: 感觉你很无奈,应该叫APIXXX改code才对XD 01/14 22:46
12F:→ michael0728n: *把SPA_READ写成MACRO 01/14 22:47
13F:→ F04E: 先判断指标是否为 nullptr ? 01/15 18:31
14F:→ tizzychen: F大,目前改成用malloc和判断NULL来实作,暂时可解~ 01/15 22:52
15F:→ cphe: 如果连编译不过就是scope的问题吧 程式根本还没开始跑阿 01/16 10:00
16F:推 cobrasgo: compile不过跟程式的逻辑无关,看内文我猜是先reference 01/29 21:36
17F:→ cobrasgo: 了未宣告的变数 01/29 21:36
18F:→ cobrasgo: 就是reference的地方还没宣告。最後你的error也po上来 01/29 21:36