ADICUP360和CrossCore Embedded Studio-错误:“ 0_150处的_start()”没有可用的源

时间:2019-04-17 16:05:45

标签: ide embedded microcontroller disassembly cortex-m3

来自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>
......... ...

我该如何解决?

2 个答案:

答案 0 :(得分:0)

这是C运行时启动-可能作为目标代码提供给您的项目,因此没有源代码。

您是否需要对启动代码进行源代码级调试?如果是这样,则需要包括源代码(如果有的话,汇编代码很可能在任何情况下都可用)。

main()或之上放置一个断点,并继续操作,直到您使用的代码可以为其提供源代码为止。

问题是,为什么在_start()处有一个断点指令(软断点)?是您设置的,还是调试器自动插入的?

CrossCore编译器手册参考“系统运行时文档”以获取运行时启动的详细信息,但常见问题之一是"Where is the System Run-Time Documentation?"

答案 1 :(得分:0)

最好的简便方法是以工作示例(例如闪烁项目)为例,删除主要功能的内容,然后在其中添加自定义代码。

我从您的评论中了解到您正在调试代码。 我可否知道 1.如果完成从断点的跳出,行为如何? 2.自由奔跑的行为是什么?