一个晚上断断续续地终于把这套工具链搞定了,目前已经可以下载及调试STM32了。
StepInto StepOver
哦~~~~~~~~~~~~~~~··
昨天晚上使用YAGARTO工具时,只是按照官方的全程一步一步地进行的,可是,可是进行到最后时却折了。
从头再看一遍,再操作一遍也无济于事。
所以晚上睡觉前再在网上找找了别人的解决方法,却发现使用Eclipse+Sourcery的人还是挺多的。就打算今天下班后再回来试试使用Sourcery,所以就有今天晚上的结果了。
可别说我像郭沫若先生,墙头草啊,一会儿Sourcery,一会儿YAGARTO,一会儿又回到Sourcery。。。
今晚晚上把自己前段时间在Sourcery命令环境下写的那个非常简单的程序(一个Startup.s以及一个只有Main的main.c)移到了Eclipse下了,编译是正确的,可是却无法调试。要么死掉,要么无法停止。
我就看了运行地址,都把Default启动地址放在0x00000800上去了,这个,应该是ARM7下的启动地址了吧。
我泪流满面。看来Eclipse自己的LD文件还不能准确定位我的内存安排,不像MDK这么智能。
其实也不奇怪了,Eclipse只是可以省去你管理工程文件、省去写Makefile的步骤,但是如何链接还是要你自己搞定的(它压根就并不知道你的目标系统是什么情况)。
/******************************************** * Sourcery G++ Linker Script Test * dmg 2011-04-12 * ldscript.lds ********************************************/ /* STM32F103C8芯片内的存储资源 * Flash:开始于0x08000000,大小为64KB */ __stack_size = 1024; PROVIDE(__end_of_stack = 0x20005000); ENTRY(Reset_Handler) MEMORY { FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K } SECTIONS { /* Flash起始地址 */ .isr_vector : { . = ALIGN(4); /* 向量表一定要KEEP,不然会被移位甚至删掉 */ KEEP(*(.isr_vector)) }>FLASH .text : { . = ALIGN(4); *(.text_rst_handler) *(.text) } . = 0x20000000; .data : { *(.data) *(.bss) } .bss : { *(.bss) } }
我的Linker Script是这么写的,还不太完整。
写好了这个链接文件之后,还要在Project->Properties->C/C++Build->Settings->...(你看图吧)
这样,我就再Build它。可程序仍然还是无法下载,更别说Step了。
这个时候,我又再看它的Dump汇编源码,.isr_vector段不知去向。(中断向量应该安排在Flash的最开始地方的)
我就回头望了望Startup.s文件,嗯,我故意改错了Startup.s文件,Clean再编译,没事通过。所以嘛,也就是说Startup.s没有被编译。
记忆中汇编文件的s大小写后缀是不一样含义的呃。我试着把后缀改成大写.S,再编译,出错了,改正之后再编译,DUMP看汇编。好吧,我就看到了.isr_vector已经被按在了我的程序第一块地方了。
然后,我Debug之。已经看到它下载到板上去了(Jlink弹出来一个框框)。
最后,看一下调试界面。
可以上传文件吗?点这里。
https://files.cnblogs.com/dmgslot/test01-%E5%8F%AF%E8%B0%83%E8%AF%95%E4%BA%86%E5%93%88%E5%93%88.rar