小弟用5510HPI启动,用MSP430单片机作为host,将code代码加载到0x8000处(字地址),可是上电后加载到0x8000的数据却并不是我的code代码(十六进制数据),请问大侠们,咋回事啊?
我的调试方法是:先将单片机上电运行host代码,然后用ccs3.3->connect连接,然后看view->memory,请问大侠们,我的操作有问题吗?我跟踪单片机,单片机确实运行起来了。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
小弟用5510HPI启动,用MSP430单片机作为host,将code代码加载到0x8000处(字地址),可是上电后加载到0x8000的数据却并不是我的code代码(十六进制数据),请问大侠们,咋回事啊?
我的调试方法是:先将单片机上电运行host代码,然后用ccs3.3->connect连接,然后看view->memory,请问大侠们,我的操作有问题吗?我跟踪单片机,单片机确实运行起来了。
真的太感谢您了,看过你的关于5509的hpi启动答疑http://www.deyisupport.com/question_answer/dsp_arm/c5000/f/48/t/19385.aspx学到了很多东西。
正如您所说,是时序不对,现在写入的数据是正确的,但是dsp还是没起来,明天继续研究,有问题再来请教您哈。
您好Shine Zhang,我按照您的方法调试了一下,我用ccs反汇编窗口中右键的“start address”可以定位0x10000处,但是用鼠标滚轮向上或向下稍微一滚动,就发现0x10000这个地址不存在了,看下面我复制的反汇编窗口数据:
以下是我用“start address”定位0x10000处:
010000 ec314e0038fa AMAR *(#038fah),XSP
010006 ec315e0039f4 AMAR *(#039f4h),XSSP
01000C f406f91f_98 AND #63775,mmap(@ST1_55)
010011 f5064100_98 OR #16640,mmap(@ST1_55)
010016 f496fa00_98 AND #64000,mmap(@ST2_55)
01001B f5968000_98 OR #32768,mmap(@ST2_55)
010020 4656 BCLR ST3_SATA
010022 4617 BSET ST3_SMUL
010024 160000 MOV #0,DPH
010027 160001 MOV #0,MDP05
01002A 160002 MOV #0,MDP67
01002D 6c000248 CALL _auto_init
在此窗口数据上,我在010000 ec314e0038fa AMAR *(#038fah),XSP这一行设定了一个硬件断点,发现pc指针可以停在此处。
以下是我用鼠标滚轮向上翻,本想看看0x10000以上的代码,但是却出现下面的情况:
00FFFA 6dd5a55a BCC #0x00a558,T1 >= #0
00FFFE 0cccec_314e RPT #52460 || MIN T0,AR6
010003 0038fa RPTCC #250, AR0 <= #0
010006 ec315e0039f4 AMAR *(#039f4h),XSSP
01000C f406f91f_98 AND #63775,mmap(@ST1_55)
010011 f5064100_98 OR #16640,mmap(@ST1_55)
010016 f496fa00_98 AND #64000,mmap(@ST2_55)
01001B f5968000_98 OR #32768,mmap(@ST2_55)
010020 4656 BCLR ST3_SATA
010022 4617 BSET ST3_SMUL
010024 160000 MOV #0,DPH
010027 160001 MOV #0,MDP05
01002A 160002 MOV #0,MDP67
01002D 6c000248 CALL _auto_init
以下是我的原始代码用ccs加载后的反汇编窗口:
000100 .text, __text, _c_int00:
000100 ec314e0038fa AMAR *(#038fah),XSP
000106 ec315e0039f4 AMAR *(#039f4h),XSSP
00010C f406f91f_98 AND #63775,mmap(@ST1_55)
000111 f5064100_98 OR #16640,mmap(@ST1_55)
000116 f496fa00_98 AND #64000,mmap(@ST2_55)
00011B f5968000_98 OR #32768,mmap(@ST2_55)
000120 4656 BCLR ST3_SATA
000122 4617 BSET ST3_SMUL
000124 160000 MOV #0,DPH
000127 160001 MOV #0,MDP05
00012A 160002 MOV #0,MDP67
00012D 6c000248 CALL _auto_init
从贴出来的代码看表示前面的加载步骤都是正确的, 现在要查为什么程序执行不正确. 你再往下执行比如在main()处设置断点, 看程序跑到哪里出错, 具体方法在你看到的帖子里有:
把仿真器连上,选择debug->Reset CPU。查看PC寄存器地址应该在0xff8000,这是bootloader源代码在ROM中的位置,选择file->load symbols->load symbols only,然后选择out文件,这样只载入符号定义
还有就是编译的时候不要用-cr选项
太感谢您了,确实是-cr惹的祸,最开始一直没有关心-cr选项,也没有找到这个选项在哪儿,后来刻意的找到了这个选项,改成none,马上就可以运行了,但是代码数据貌似很少了,而且这个-cr不是cinit段初始化作用的么?这样一来哪些全局变量不就没有初始化了么?为什么程序还能运行起来?很不解。
而且,现在的代码数据和利用ccs加载进DSP的数据貌似根本就不一样,但是为什么能运行起来呢?
当时用-cr选项,代码数据和利用ccs加载进DSP的数据完全一样,反而却运行不起来,这一点很是不解,可能还是没有弄明白HPI启动的深层原理是什么?
-cr, -c都是cinit段初始化作用, 只是方式不一样, -c是需要把.cinit段保存到memory中, 全局变量的初始化是程序run的时候实现的, 而-cr不需要把.cinit段保存到memory, 由CCS loader加载器直接加载到.bss段进行初始化, 所以你会看到脱机和CCS加载的数据不一样.
具体关于-cr, -c怎么处理.cinit段, 你可以看一下下面的文档第145页.
http://www.ti.com/lit/ug/spru281g/spru281g.pdf