目标硬件:TMS320C6747+16C654+M25P16(SPI1)
IDE:CCS6.2和CCS5.5,pspdrivers_01_30_01(仅使用了里面的CSLR)
用户程序:
1)自定义UBL,运行于0x80000000(SHRAM),由仿真器烧写在SPI_Flash的SECTOR0,上电后由ROM内置的bootldr启动运行;
2)基于SYS/BIOS的程序APP,运行于0x11800000(L2RAM),由IDE自带的C6000 Hex Utility转换为Intel格式的Hex文件,通过自定义UBL烧写在SPI_Flash的SECTOR1~SECTORn,上电后自定义UBL读取SPI_Flash中的Hex文件后跳转运行,APP入口地址_c_int00固定为0x11800000;
现象描述:
编写APP程序用于串口单元测试,运行后在6个串口上(DSP自身3个+16C654扩展3个)若2秒未输入则输出"Timeout @"+次数,否则输出"ACK="+所输入字符串,DEbug模式下通过JTAG调试正常,转换为hex后通过UBL烧写后断电再上电,UBL能够加载并运行该APP(可以接收到预期的字符串);设置为Release模式后,设置好所include的文件路径(CSLR),取消Debug所预定义的宏_DEBUG,编译并转换为hex通过UBL烧写后断电再上电,该APP未运行(串口输出停留在UBL的Loading..而并未输出"timeout"等预期字符串)。
另外,Debug和Release所使用C6000 Hex Utility参数均为 –memwidth=32 –order=L –romwidth=32 –intel,(通过IDE设置,在Summary of flags set中显示)。
问题:
因为UBL可以加载并运行多个程序,包括基于SYS/BIOS和裸机的,而现在碰到的问题是相同的程序Debug模式编译出来的可以加载运行而Release的不行(包括CCS5.5和CCS6.2),所以想请TI的工程师帮忙分析一下出现这个问题的原因是什么,通过什么样的手段去验证和解决。
多谢了。
sonkhwa loo1:
回复 Shine:
今天在ccs6.20下调试,设置为Release模式编译和下载.out后运行,异常退出(运行至exit.c的abort函数),控制台出现以下信息:
[C674X_0] 8 B17=0x180010cB18=0x8000bfb3 B19=0x7fffffffB20=0xdcbd6498 B21=0xccfc11cdB22=0x7f1b64b8 B23=0xffff2f4bB24=0x349cd876 B25=0x110b19cdB26=0x0 B27=0xbe00be00B28=0xfbf2dff7 B29=0x1181da94B30=0x2 B31=0x1e26014NTSR=0x1000fITSR=0xeIRP=0x11812020SSR=0x0AMR=0x0RILC=0x0ILC=0x0Exception at 0x0EFR=0x2 NRP=0x0Internal exception: IERR=0x1Instruction fetch exceptionti.sysbios.family.c64p.Exception: line 256: E_exceptionMax: pc = 0x00000000, sp = 0x11819cc8.xdc.runtime.Error.raise: terminating execution
操作系统:Windows 7 x64;
IDE: CCS6.20 + XDS100v3
SYS/BIOS: 6.46.5.55
XDCtools : 3.32.1.22_core
sonkhwa loo1:
回复 Shine:
正在排除原因,不过现在看来应该和Debug或Release模式没关系;因为不启动16c654的单元测试task后,可以正常调试,UBL也可以正常加载和跳转运行;
目前的信息看是16c654驱动代码某个地方的Event出现了NULL指针,但为什么在Debug下没有触发断言目前正在调试。
无论如何,确实不是由于Debug和Release模式不同导致的,本帖结束,谢谢协助。