来自https://wiki.analog.com/resources/eval/user-guides/eval-adicup360的ADuCM360 / ADICUP360的演示项目运行正常。 但是,如果我尝试创建自己的项目(例如,构建项目-> 调试为),例如:
#include <sys/platform.h>
int main (int argc, char *argv[])
{
/* Begin adding your custom code here */
return 0;
}
然后我收到错误消息:
“ 0_150处的_start()”没有可用的源
当我按下按钮查看反汇编时,我得到以下结果:
00000150: bkpt 0x00ab
00000152: ldr r0, [pc, #192] ; (0x214 <_start+200>)
00000154: ldr r1, [r0, #4]
00000156: cmp r1, #0
00000158: beq.n 0x15e <_start+18>
0000015a: ldr r2, [pc, #212] ; (0x230 <_start+228>)
0000015c: str r1, [r2, #0]
0000015e: ldr r1, [r0, #0]
00000160: cmp r1, #0
00000162: bne.n 0x168 <_start+28>
00000164: ldr r1, [pc, #196] ; (0x22c <_start+224>)
00000166: str r1, [r0, #0]
00000168: ldr r1, [r0, #8]
0000016a: ldr r2, [r0, #12]
0000016c: cmp r1, #0
0000016e: beq.n 0x172 <_start+38>
00000170: mov sp, r1
00000172: cmp r2, #0
00000174: beq.n 0x17a <_start+46>
00000176: add.w r10, r2, #256 ; 0x100
0000017a: movs r1, #0
0000017c: mov r11, r1
0000017e: mov r7, r1
00000180: ldr r0, [pc, #148] ; (0x218 <_start+204>)
00000182: ldr r2, [pc, #152] ; (0x21c <_start+208>)
00000184: subs r2, r2, r0
00000186: bl 0x41c <memset>
0000018a: bl 0x6c0 <initialise_monitor_handles>
0000018e: movs r0, #21
00000190: ldr r1, [pc, #148] ; (0x228 <_start+220>)
00000192: bkpt 0x00ab
00000194: ldr r1, [pc, #144] ; (0x228 <_start+220>)
00000196: ldr r1, [r1, #0]
00000198: movs r0, #0
0000019a: push {r0}
0000019c: ldrb r3, [r1, #0]
0000019e: adds r1, #1
000001a0: cmp r3, #0
000001a2: beq.n 0x1d0 <_start+132>
000001a4: cmp r3, #32
000001a6: beq.n 0x19c <_start+80>
000001a8: cmp r3, #34 ; 0x22
000001aa: beq.n 0x1b0 <_start+100>
000001ac: cmp r3, #39 ; 0x27
000001ae: bne.n 0x1b4 <_start+104>
000001b0: movs r2, r3
000001b2: b.n 0x1b8 <_start+108>
000001b4: movs r2, #32
000001b6: subs r1, #1
000001b8: push {r1}
000001ba: adds r0, #1
000001bc: ldrb r3, [r1, #0]
000001be: adds r1, #1
000001c0: cmp r3, #0
000001c2: beq.n 0x1d0 <_start+132>
......... ...
我该如何解决?
答案 0 :(得分:0)
这是C运行时启动-可能作为目标代码提供给您的项目,因此没有源代码。
您是否需要对启动代码进行源代码级调试?如果是这样,则需要包括源代码(如果有的话,汇编代码很可能在任何情况下都可用)。
在main()
或之上放置一个断点,并继续操作,直到您使用的代码可以为其提供源代码为止。
问题是,为什么在_start()
处有一个断点指令(软断点)?是您设置的,还是调试器自动插入的?
CrossCore编译器手册参考“系统运行时文档”以获取运行时启动的详细信息,但常见问题之一是"Where is the System Run-Time Documentation?"。
答案 1 :(得分:0)
最好的简便方法是以工作示例(例如闪烁项目)为例,删除主要功能的内容,然后在其中添加自定义代码。
我从您的评论中了解到您正在调试代码。 我可否知道 1.如果完成从断点的跳出,行为如何? 2.自由奔跑的行为是什么?