Part Number:TMS320F280039C
您好,我在CLA里增加代码的时候遇到了一个问题。
比如当前的CLA的RAM空间还有71%,然后我加入一段含有fabs函数的代码,编译就会报CLA RAM空间不足,如果去掉fabs这个函数,编译就可以通过,请问这个是什么原因,在CLA调用fabs会占用很大空间吗?
加入fabs函数之前,CAL RAM空间仅用了71%,
在CLA调用fabs函数之后,编译会报CLA RAM空间不足的故障:
Yale Li:
您好,您给CLA1 program分配了哪些内存空间?
可以给它增加一些内存分配试试看。
您有参考哪个例程吗?我没有在CLA的相关文档中找到关于函数fabs的描述。方便的话请告知一下。
,
Liu Jun:
您好!
谢谢你的回复。
我是自己编写的程序,CMD文件分配的空间是Cla1Prog : origin = 0x008000, length = 0x002000;
我发现在CLA里面,如果写了fabs(A*B*C)这样的语句,就会编译不过去,但是如果加入一个中间变量,改写为D = A*B*C, fabs(D),这样子就可以编译过去了,空间也没增加多少。
我不大清楚为什么在CLA里面,按照fabs(A*B*C)这样子写会报空间不足?
,
Yale Li:
再问一下您的A、B、C定义的是什么类型的数据?
,
Liu Jun:
浮点数,类似0.707这种
,
Yale Li:
可否告知一下具体是什么类型?
,
Liu Jun:
抱歉,国庆节没看问题,定义的都是float 类型的变量
,
Yale Li:
我的推测是这可能与类型转换有关。
Liu Jun 说:fabs(A*B*C)
直接使用类似的写法,可能直接会传一个64位的数据给该函数,而CLA最高只支持32位的数据。所以会报程序与内存不兼容。您帖上来的报错不完整,后面的内容我无法知晓,但感觉并不是程序大小的问题。
Liu Jun 说:D = A*B*C, fabs(D)
而您使用类似写法,加入一个中间变量时,D会被编译器强制优化为32位的数据
,
Liu Jun:
谢谢你的回复,我把编译不过时的结果复制下来了,请帮忙看一下,谢谢!
<Linking>"../cmd/28003x_cla_flash_lnk.cmd", line 85: error #10099-D: program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. run placement with alignment/blocking fails for section "Cla1Prog" size 0x23de page 0. Available memory ranges: Cla1Prog size: 0x2000 unused: 0x2000 max hole: 0x2000 error #10010: errors encountered during linking; "3-6KW_280039_V0.10.33.out" not built >> Compilation failuremakefile:208: recipe for target '3-6KW_280039_V0.10.33.out' failedgmake[1]: *** [3-6KW_280039_V0.10.33.out] Error 1gmake[1]: Target 'secondary-outputs' not remade because of errors.makefile:204: recipe for target 'all' failedgmake: *** [all] Error 2
**** Build Finished ****
,
Yale Li:
看来确实是内存不足。
至于为什么不使用中间变量会导致内存占用的增加,我得询问一下资深工程师。
,
Liu Jun:
好的,谢谢!
,
Liu Jun:
好的,谢谢!
,
Yale Li:
没事,有了结果我会第一时间回复
,
Yale Li:
您能分享一下生成的汇编代码吗?
,
Liu Jun:
hi,我刚刚尝试了一下进入Debug页面的Disassemby窗口,但是CLA里面没法设置断点,也不能用Run to line定位,所以我没办法找到对应CLA代码的的汇编代码
,
Yale Li:
看一下这篇文档的83:https://www.ti.com.cn/cn/lit/ug/zhcu101/zhcu101.pdf