TI中文支持网
TI专业的中文技术问题搜集分享网站

c6701片外sram仿真

通过cmd文件将text段分配在片内程序存储器中,其他段分配在ce3连接的512k的32位sram中,进行仿真时无法将函数指针赋值给片外sram中的变量,导致程序跑飞

Tony Tang:

yan zoutext段分配在片内程序存储器中,其他段分配在ce3连接的512k的32位sram中,进行仿真时无法将函数指针赋值给片外sram中的变量,导致程序跑飞

text段在片内,其它在CE3,那么程序代码在片内,其它数据等段在片外,怎么把函数指针赋值给片外呢?片外又没有代码,函数指针的赋值不是代码,跑飞不是很自然的事么。

yan zou:

回复 Tony Tang:

是不是把片内程序存储器内的代码都放在片外sram就可以了,由于我的sram是连接在ce3上,是不是有必要将内部程序存储器配置为cache模式。

Tony Tang:

回复 yan zou:

没有这个限制。

cmd怎么写的?代码是怎么访问的?

yan zou:

回复 Tony Tang:

cmd代码如下:

MEMORY{ VECS: o = 00000000h l = 00000200h /*Internal PROG RAM*/ boot_load: o = 00000200h l = 00000200h PMEM: o = 00000400h l = 0000FC00h /*Internal PROG RAM*/ DMEM: o = 80000000h l = 0000FA00h /*Internal DATA RAM*/ CE1BOOT: o = 01400200h l = 00000200h CE1VECS: o = 01400000h l = 00000200h /*CE1:512K,FLASH*/ CE1PMEM: o = 01400400h l = 0000FA00h CE1init: o = 01410000h l = 003F0000h CE0: o = 00400000h l = 00C00000h /*CE0:12M*/ CE2: o = 02000000h l = 01000000h /*CE2:16M,SDRAM*/ /*CE3: o = 03000000h l = 00080000h*/ /*CE3:512K*/ CE3VECS: o = 03000000h l = 00000200h /*CE1:512K,FLASH*/ CE3PMEM: o = 03000200h l = 0000FC00h CE3DMEM: o = 0300FE00h l = 00070200h}

SECTIONS{ .vectors> CE3VECS .text > CE3PMEM .pinit > CE3DMEM .cinit > CE3DMEM .data > CE3DMEM .switch > CE3DMEM .const > CE3DMEM .econst > CE3DMEM .cio > CE3DMEM .stack > CE3DMEM .bss > CE3DMEM .ebss > CE3DMEM .sysmem > CE3DMEM .far > CE3DMEM .csldata > CE3DMEM}

刚才验证了一下,都放在CE3片外RAM中,问题依旧!但是,如果将.far段放在DMEM中,.text和.vectors段放在PMEM中,程序运行正常!

Tony Tang:

回复 yan zou:

等等,你说的仿真是软件仿真(simulator),还是在板子上用仿真器调试?

yan zou:

回复 Tony Tang:

在板子上用仿真器调试!

Tony Tang:

回复 yan zou:

程序不正常是什么情况?中断跑飞,还是主程序不能进入main?

yan zou:

回复 Tony Tang:

可以正常进入main函数,但是如果使用CE3,则函数指针指向0x03030303地址,用DMEM的时候,就可以指向正确地址。截图:

错误:

正确:

Tony Tang:

回复 yan zou:

工程里有用到中断吗?是不是在那个函数里配置使能中断了?

把那个函数的内容也贴上来看一下。对了上面错误的图的函数地址是奇数,应该是4字节对齐的才对。从map文件里看这个函数的地址是多少呢?分辨是编译时就错了,还是调用时出的错。

yan zou:

回复 Tony Tang:

函数为了测试外部RAM特意写的,用到函数指针。里没有使用中断,编译完的地址是对的,应该是调用时出错。

编译完地址:

赞(0)
未经允许不得转载:TI中文支持网 » c6701片外sram仿真
分享到: 更多 (0)