c6678,bios_6_33_06_50,CCS 5.3.0.00090
一直搞不清.cfg和.cmd文件。看都看不十分明白。
1 一个工程什么时候需要.cfg文件 ,什么时候需要.cmd文件呢?
2 有没有关于能让我看懂并能自己编写这两个文件的文档或资料呢?(求啊,,,,)
3 我在一个已有的demo里加了一段代码,里面有malloc操作,但总是分配失败,这个工程里只带了一个.cmd文件,我就在MEMORY中加了个DDR3,并把len设的很大,然后把所有sections都放在DDR3里,但是malloc仍然失败。我就不知道怎么办了
Adam Yao94020:
1. 所有在DSP上运行的工程都需要cmd文件,这个文件负责定义memory region,并将用户的代码数据section映射到这些region中去,
只有使用了sys-biso的工程才需要cfg文件。
2. 可以参考6679 PDK中的例子,PDK里面有很多参考工程。
3. 在cmd中加上-heap 0x80000,malloc从系统堆上申请内存,这条指令的作用是在用户memory上开一个系统堆。
ruijie yang:
回复 Adam Yao94020:
谢谢Adam!
1.原cmd中有-heap 8192,我试过改大,比如0x80000,但是编译就报错了:
errors encountered during linking;
run placement fails for object ".sysmem"
而cmd中有
.sysmem > L2_MEM
且 L2_MEM: origin = 0x008011FF length = 0x0007ee00
但是如果我把值改稍小一点,比如 -heap 40000就又可以编过(什么原因),但malloc依旧失败。
2.我输出了一下前面一个成功malloc的地址,发现是0x8x…,可我定义的所有的sections的origin都是0x00x…,它到底给分到哪里去了?
3.pdk我跑过好几个例子了,对cfg和cmd还是茫然啊
Andy Yin1:
回复 ruijie yang:
你的是sysBios工程么?如果是的话不能通过修改cmd生效,需要修改cfg文件。关于cmd文件请参考spru187 compile user guide,关于cfg文件请参考sysBios user guide。
ruijie yang:
回复 Andy Yin1:
谢谢Andy!
1 不是sysbios,是个ctoolslib的工程,DSPTrace_tietb_edma_6678,我在这个工程里加了一个算法,想对这个算法做trace,被malloc failed卡住了,试着修改cmd也不行。有什么建议吗
2 我又试着把DSPTrace_tietb_edma_6678里的代码加到image processing工程里做trace,能跑,但是跑到一半console会输出一串什么地址,然后resource conflict exception或是fetch packet exception或是opcode exception,然后terminate。不晓得这些exception该怎么处理…
谢谢推荐的文档,我先看看
lizhi hou:
回复 Adam Yao94020:
动态内存的申请都是在堆上生成的
lizhi hou:
回复 ruijie yang:
1.虽然可申请内存区域很大,但是在malloc申请时,内存中是否有足够连续的内存供申请,不确定,所以可能会申请失败。
ruijie yang:
回复 lizhi hou:
谢谢lizhi!
那这么说,只将heap size设置的足够大也不能保证malloc会成功喽?
那我要怎么做才能保证malloc能成功呢?不会无法确定吧?-__-
ruijie yang:
回复 lizhi hou:
谢谢lizhi!
我曾试过在MEMORY中定义DDR,比如,DDR3 (RWX) : org = 0x80000000, len = 0x10000000,然后将SECTIONS中几乎所有的sections都 > DDR3, MEMORY前有-heap 8192,但分配没有成功
malloc不是从堆上分吗,cmd中定义堆的就是-heap (size),而要我想问上面那样做是使heap放在DDR3中了吗?是在DDR3中分了8192做heap吗?不是的话,那怎么放在DDR上呢?
Ted cooper:
回复 ruijie yang:
不行就别动态分配了,直接自定义一段内存空间用于这个就好了,保证堆栈和代码都不会占据这段内存,只用于你需要的数据存储。