各位好
想把buf 放到一个内存段“Ram1” , 但是这个buf又没有在程序中¥直接¥引用,如何避免他被优化掉呢??
看到C6000编译器提供了
#pragma DATA_SECTION (buf,"Ram1") //来指定存放位置
#pragma RETAIN(buf) //来保持buf始终被链接
int buf ; // 发现这样写buf 还是会被优化掉··
目前还尝试了 volatile 这样是不行的,另外不可以使用lock 方式放在固定地址。
可能大家看出来弄这个buf是为了占住空间,我需要认为这个buf所在的位置已经被分配,请给些意见,谢谢各位。
Tony Tang:
在cmd里把这个内存空间空出来不行吗?
shuyu liang:
回复 Tony Tang:
谢谢
我也是结合这种方式用的,但您的意思是,比如我定义4个数组分配空间 ,为了保证在空间上绝对分分配出来,需将A B C D 数组依次指向CMD中已经划好的四个内存空间吗???
#pragma DATA_SECTION(A,"sectA")
char A[X]
#pragma DATA_SECTION(B,"sectB")
char B[X]
#pragma DATA_SECTION(C"sectC")
char C[X]
另外,咱们#pragma REMAIN 这个是不是有bug呀,我再-O3的选项中从来都没有试出他有用,我的测试方法是将A B C D 连续声明在某一块内存中,然后不使用B,直接打印A C地址 ,发现A C只间隔了一个数组的大小~ 麻烦啦
问题背景信息:
A.目前使用TMS320DM8148B.硬件环境基于8148的DVR产品C.软件环境基于DVRRDK3.5版本D.DSP核调试环境是CCS5.3产品已在迭代阶段
Jingang Yang:
回复 Tony Tang:
tony,你的邮箱是tony-tang@ti.com么?为啥我email发布过去嘞……
shuyu liang:
回复 Tony Tang:
Tony Tang试了没有问题啊:
多谢帮助 ^_^
我发现在ccs编译一部分内容 ,和在linux中编译整个DVRRDK的时候有了差异,在CCS中不会引起这个问题,可能是编译选项的差异,但我没有对比出来。
最后一个问题, 您知道有哪些可能将未使用buffer禁止分配的相关编译选项吗?或是别的可导致未使用buffer不分配的可能?
TI中文支持网
