小眼睛也是有眼神的

早上叫醒我的不是闹钟,而是梦想。

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

一个晚上断断续续地终于把这套工具链搞定了,目前已经可以下载及调试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

posted on 2011-04-15 00:08  dmg  阅读(2072)  评论(0编辑  收藏  举报