STM32在Keil MDK5环境下RAM上代码调试
扫描二维码
随时随地手机看文章
步骤与图示:
1.先给个CPU的数据,需要注意的是三个红圈的地方,架构,型号,Flash和SRAM大小如图1
(STM32F107VC 256KB FLASH,64KB SRAM)
图1
2.Target的设置
1)勾上可以用微库,减小生成代码的大小
2,3)分别定义ROM区位置及大小和RAM区位置和大小。在这里需要说明的是,Cortex-M3的架构有4G的寻址空间,而Flash的起始地址在0x08000000,RAM地址在0x20000000,在这里进行了第一次相关地址的更改;如图2
0x1000为4K,这里的0xc000则为48K的ROM分配;RAM的为16K;基本上移植个uCOS-II都够用了
图2
3.Output的设置
选择Remout文件夹
强调一下Name of Executable吧;这里默认的应该是project的名字,改成output;而且这与编译后产生的*.axf和*.sct文件名字都有关联;没勾选HEX;见图3
图3
4.Listing Label 默认
5.User Label 默认
6.C/C++ Label 默认
7. Asm Label 默认
8. Linker Label
最上边打上勾,是这效果;不打勾,就反白了
先说说打勾的时候,如图4;非人为操作,你什么都不用管了,(很多人会发现,新建的项目,刚开始的时候下面的Scatter File后的内容是空的,当你把这勾去掉后会自动出现,然后随你勾与不勾,就都是存在的了,不过此时还只是个影子,没有实际的文件,什么时候出现这个文件呢,法一:自然你可以自己写;法二:在出现影子后打上勾编译一次,此文件就产生了;在output的文件夹里;马上后文还会有对此文件内容的介绍)
图4
再说说不打勾的时候会反白一些内容,如图5,需要修改两个地方
图5
再来看看output.sct文件内容,如图6~6行内容是ROM的地址和大小,11行事RAM的地址和大小,很是一目了然,内容根据Target自动生成的,不需要手动修改
图6
LR_IROM1 0x20000000 0x0000C000 { ;load region size_region
ER_IROM1 0x20000000 0x0000C000{ ;load address = executionaddress
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x2000C000 0x00004000{ ;RW date
.ANY (+RW +ZI )
}
}
9.Debug的配置
分成几部分,原界面和Setting界面
1)原界面,如图7,首先选好J-link ,在keil5下,选择“CMSIS-DAP Debugger”,取消Load Application at Startup的勾选
图7
再说说这个RAM.ini文件,内容如下,如图8,有注释
首先LOAD output.axf,加载启动代码到RAM,关关于hex,bin文件和axf的关系,是在axf中存有Debug需要的一些调试语句,所以这文件与前2者内容上是不相同的,前两者属于其子集的关系,(这里的output.axf名字对应了我们上边设定的output的文件名设定,此文件在output中设定的文件夹下生成,跟output.sct在一起)从文件内容可以看到,中断向量表已经被映射到0x20000000,PC也指向了0x20000004,说明在RAM中进行调试时理论上可以的了
图8
RAM.INI文件:
/******************************************************************************/
/* RAM.INI: RAM Initialization File */
/******************************************************************************/
/* This file is part of the uVision/ARMdevelopment tools. */
/* Copyright (c) 2010 Keil - An ARMCompany. All rights reserved.*/
/* This software may only be used under theterms of a valid, current, */
/* end user licence from KEIL for acompatible version of KEIL software*/
/* development tools. Nothing else givesyou the right to use this software. */
/******************************************************************************/
FUNC void Setup (void) {
SP= _RDWORD(0x20000000); // SetupStack Pointer
PC= _RDWORD(0x20000004); // SetupProgram Counter
_WDWORD(0xE000ED08, 0x20000000);// Setup Vector Table Offset Register
}
LOAD..RemoutProject.axfINCREMENTAL //Download
Setup(); // Setup forRunning
g, main
()
2)进入setting如图9
图9
3)然后进入了Flash Download label,如图10~Flash的擦写有规矩,需要在有内容的情况下擦出一个扇区后方可写入,而此时的RAM自然不必要这样做,然后需要点击add添加Flash编程算法接着进入了选择界面,如图11
图10
在这里选择好属于自己的芯片Flash大小~256K ~
add后还需要再更改最后一行红线上的内容,此时需要先点一下刚选好的变成算法就会反白可编辑,然后编程算法会自动更改其自身的地址
图11
10.进入Utilities~同Debug一样,选择其中的setting其实刚刚讲过,其实是同一个,如图12
图12
RAM调制到此为止
需要提醒大家注意的几点是:
1.Debug开始后~不要点reset~因为这样后走的就是Flash的程序了~容易造成调试问题~结果是产生keil被kill掉的PC错误~
2.重新启动开发板后一定要build target一次~或者rebuild all一次再烧写程序~不然~很容易同上