在做CCS2.2向CCS5.5的程序移植,直接由5.5打开2.2工程,新工程直接编译和仿真结果都是正确的!
但是在更换了CPU(6713换成了6748)后,新旧程序的结果就不一致了,6748中函数A:elev = atan(enu[2]/sqrt(enu[0]*enu[0] + enu[1]*enu[1])) /PI;该语句的返回值与原程序不同,但enu数组中的值都是一样的!在另一个函数B中dElevation = atan(enu[2]/sqrt(enu[0]*enu[0] + enu[1]*enu[1]));这个结果是正确的!
这个相同的math库函数却得到两种不同的结果这可能会是什么原因呢?会不会是我的函数A中变量太多,导致内存溢出?程序中的函数嵌套也就最多4~5层,如果真的是溢出,这样不应该编译不通过吗……
6748的CMD文件如下:
-l rts67plus.lib
-c
-heap 0x7000
-stack 0x4000
MEMORY
{
VECS: ORIGIN = 0x11800000 LENGTH = 0x00000200
ROM_PMEM: ORIGIN = 0x11800200 LENGTH = 0x0002FE00
ROM_CINIT: ORIGIN = 0x11830000 LENGTH = 0x00010000
STACKHEAP: ORIGIN = 0x80000000 LENGTH = 0x00020000 //shared ram
BMEM: ORIGIN = 0x80020000 LENGTH = 0x00020000
DDR2: ORIGIN = 0xC0000000 LENGTH = 0x08000000
}
SECTIONS
{
.vectors > VECS
.text > ROM_PMEM
.tables > BMEM
.data > BMEM
.bss > BMEM
.cinit : load = ROM_CINIT
.const : load = ROM_CINIT
.switch : load = ROM_CINIT
.com_data > DDR2
.cio > BMEM
.far > BMEM
.stack > STACKHEAP
.sysmem > STACKHEAP
}
noaming:
你好,两块芯片不是一个系列的。对于C6748,首先下面这个库应该不对的。
-l rts67plus.lib
应该使用rts674x.lib
这里有个链接说明这个的不同:
http://e2e.ti.com/support/dsp/tms320c6000_high_performance_dsps/f/115/t/37352
user1973786:
回复 noaming:
我将库改成了-l rts6740.lib,编译后两个不同函数中的atan的计算结果依旧是一个正确一个错误!
现在想先弄清两个问题:
1)-heap 0x7000和-stack 0x4000在分配的时候是分配到什么地址上的?
2)有没有关于6748或OMAP138的通用寄存器说明,比如说A1寄存器是做什么的,完成一个加法会改变哪些寄存器,这样的文档资料?也就是汇编语言的指导