有误或者表述不清楚请指出,谢谢

硬件:TQ2440开发板、jlink  V8 固件

软件:J-LINK  ARM 4.08i、MDK4.20

先解释下MDK中三种linker之间的区别

设置集中在option linker选项卡

1.采用Target对话框中的ram和rom地址。采用此方式,需在linker选项卡中的Use Memort Layout from

Target Diaglog选项选中,并且在Target中设置好ram、rom地址。MDK会根据Target对话框中设定的ram

和rom地址自动生成一个分散加载文件。最后链接器会根据此文件中的信息对目标文件进行连接,生成axf文件。

如下图:

至于rom和ram是片内还是片外,容量多大就需要根据芯片和开发板来决定了。

2.直接通过linker选项卡中的R/O Base和R/W Base来设定链接信息。链接器最后可根据此处指定的地址信息进

行连接,连接的文件应该是顺序存放了,最多RO和RW分开。此时需要注意的是应将 Use Memort Layout from

Target Diaglog前的勾去掉,且保证Scatter File中未包含分散加载文件。并且要在Misc control中设定镜像的入口点,如:

--first 2440init.o(Init)

2440init.o对应的是启动代码汇编源文件2440init.s,Init是对应的是段名在异常向量表之前。此处需要根据具体文件修改。

3.最后一种为直接采用分散加载文件。

在设置linker的时候可以注意下linker control string的信息,看看linker的输入信息是否符合自己的要求。

此处应该是只要选择使用scatter file文件,那么其他链接方式的设置自动失效。

可以从linker control string的信息看出来。

对应TQ2440开发板的设置

由于TQ2440开发板采用的是片外的ram和片外的flash,所以我这里直接采用前面说到的第二种方法。

就是通过手动设置ro的地址,其中0x30000000就是片外ram的地址。rw未指定,则说明rw数据顺序

存存放到ro段之后。

MDK Jlink 外部RAM调试设置

设置集中在option 的debug选项卡下

1.先将黑点调到右边,然后在右边的下拉框中选中J-LINK/J-TRACE,然后点击Setting,找到Info中的JLink,点击查看Jlink和MDK能否连接起来,在点击下面的Target查看仿真器能否找到cpu。

load Application at startup貌似去掉和不去掉的效果是一样的,猜测这个选项和前面Target中的rom地址有关,因为rom地址的后面有startup这个选项。我这里未采用Target方式链接,所以将此勾去掉了。

2.然后是ram调试是最重要的init文件。这个文件的作用是在加载axf调试文件前先将ram初始化完毕,需要完成设置总线时钟,设置bank控制寄存器等(sdram直接挂在bank6上)。本来想偷懒,直接将MDK安装文件夹下Clabsys公司的2440开发板的Ext_RAM.ini拷贝出来,结果调试的时候出现了莫名其妙的错误,猜测是初始化的问题。打开看了下,发现能看懂,MDK自带的文件只初始化了bank6。于是动手将TQ2440的init_sdram改造了下,做了个新的Ext_RAM.ini,可以顺利调试。需要注意的是,Init文件需要根据工程做一定修改,具体是在LOAD命令处。附init文件:

[cpp] view plaincopyprint?
  1. FUNC void SetupForStart (void) {
  2. // <o> Program Entry Point
  3. PC = 0x30000000;
  4. }
  5. FUNC void Init (void) {
  6. _WDWORD(0x53000000, 0x00000000);
  7. _WDWORD(0x4A000008, 0xFFFFFFFF);
  8. _WDWORD(0x4A00001C, 0x000007FF);
  9. _WDWORD(0x53000000, 0x00000000);
  10. _WDWORD(0x56000050, 0x000055AA);
  11. _WDWORD(0x4C000014, 0x00000007);
  12. _WDWORD(0x4C000000, 0x00FFFFFF);
  13. _WDWORD(0x4C000004, 0x00061012);
  14. _WDWORD(0x4C000008, 0x00040042);
  15. _WDWORD(0x48000000, 0x22111120);
  16. _WDWORD(0x48000004, 0x00002F50);
  17. _WDWORD(0x48000008, 0x00000700);
  18. _WDWORD(0x4800000C, 0x00000700);
  19. _WDWORD(0x48000010, 0x00000700);
  20. _WDWORD(0x48000014, 0x00000700);
  21. _WDWORD(0x48000018, 0x0007FFFC);
  22. _WDWORD(0x4800001C, 0x00018005);
  23. _WDWORD(0x48000020, 0x00018005);
  24. _WDWORD(0x48000024, 0x008E0459);
  25. _WDWORD(0x48000028, 0x00000032);
  26. _WDWORD(0x4800002C, 0x00000030);
  27. _WDWORD(0x48000030, 0x00000030);
  28. }
  29. // Reset chip with watchdog, because nRST line is routed on hardware in a way
  30. // that it can not be pulled low with ULINK
  31. _WDWORD(0x40000000, 0xEAFFFFFE);        // Load RAM addr 0 with branch to itself
  32. CPSR = 0x000000D3;                      // Disable interrupts
  33. PC   = 0x40000000;                      // Position PC to start of RAM
  34. _WDWORD(0x53000000, 0x00000021);        // Enable Watchdog
  35. g, 0                                    // Wait for Watchdog to reset chip
  36. Init();                                 // Initialize memory
  37. LOAD ..\output\codec.axf INCREMENTAL    // 此处需修改axf文件的路径各工程设置可能不一样需要在此处修改!
  38. SetupForStart();                        // Setup for Running
  39. stop, pc                                // 想要直接到main可设置为  g, main
FUNC void SetupForStart (void) {// <o> Program Entry PointPC = 0x30000000;
}FUNC void Init (void) {_WDWORD(0x53000000, 0x00000000);_WDWORD(0x4A000008, 0xFFFFFFFF);_WDWORD(0x4A00001C, 0x000007FF);_WDWORD(0x53000000, 0x00000000);_WDWORD(0x56000050, 0x000055AA);_WDWORD(0x4C000014, 0x00000007);_WDWORD(0x4C000000, 0x00FFFFFF);_WDWORD(0x4C000004, 0x00061012);_WDWORD(0x4C000008, 0x00040042);_WDWORD(0x48000000, 0x22111120);_WDWORD(0x48000004, 0x00002F50);_WDWORD(0x48000008, 0x00000700);_WDWORD(0x4800000C, 0x00000700);_WDWORD(0x48000010, 0x00000700);_WDWORD(0x48000014, 0x00000700);_WDWORD(0x48000018, 0x0007FFFC);_WDWORD(0x4800001C, 0x00018005);_WDWORD(0x48000020, 0x00018005);_WDWORD(0x48000024, 0x008E0459);_WDWORD(0x48000028, 0x00000032);_WDWORD(0x4800002C, 0x00000030);_WDWORD(0x48000030, 0x00000030);
}// Reset chip with watchdog, because nRST line is routed on hardware in a way
// that it can not be pulled low with ULINK_WDWORD(0x40000000, 0xEAFFFFFE);        // Load RAM addr 0 with branch to itself
CPSR = 0x000000D3;                      // Disable interrupts
PC   = 0x40000000;                      // Position PC to start of RAM
_WDWORD(0x53000000, 0x00000021);        // Enable Watchdog
g, 0                                    // Wait for Watchdog to reset chipInit();                                 // Initialize memory
LOAD ..\output\codec.axf INCREMENTAL    // 此处需修改axf文件的路径各工程设置可能不一样需要在此处修改!
SetupForStart();                        // Setup for Running
stop, pc                                // 想要直接到main可设置为  g, main

具体设置如图:

转载:http://blog.csdn.net/rockrockwu/article/details/7093435

转载于:https://www.cnblogs.com/Hdd-Yi/archive/2013/04/19/3030386.html

MDK linker和debug的设置以及在RAM中调试相关推荐

  1. CMake设置Visual Studio工程的调试环境变量和工作目录cwd的方法

    1.设置在Visual Studio中调试的环境变量,此设置仅仅在VS中点击那个绿色三角运行时有效,与你直接双击打开exe文件运行无关,有效避免多版本动态库全部写入系统环境变量的污染问题: # Vis ...

  2. 解决ThinkPHP3.2 将Debug 关闭 设置为False 报页面错误 请稍后再试

    1.最近系统要上线,就把Index.php中的debug 关闭 设置成false,结果出现如下的错误 2.修改config.php文件,加入   'SHOW_ERROR_MSG' => TRUE ...

  3. 痞子衡嵌入式:在MDK开发环境下将关键函数重定向到RAM中执行的几种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在MDK开发环境下将关键函数重定向到RAM中执行的几种方法. 这个关键函数重定向到 RAM 中执行系列文章,痞子衡已经写过 <IA ...

  4. stm32f4 RAM中运行程序 读保护设置

    主要是为了在RAM中运行程序来解除读保护的.没想到ST-Link Utility 就直接可以. ST-Link Utility:target-->options bytes-->就可以看到 ...

  5. 如何在浏览器中调试JS代码,debug

    如何在浏览器中调试JS代码,debug 首先需要一段js代码,我将它放进html文件里面: 创建一个html文件,<script>标签里面放入需要调试的js代码,html文件如下: < ...

  6. word文档怎么给数字加千分符_Word中如何将文档中的金额数值设置为财务数字中的千分位格式...

    Word中如何将文档中的金额数值设置为财务数字中的千分位格式 时间:2015-06-10   作者:snow   来源:互联网 如图6‑19所示为某公司给省商务厅上报的2013年农产品现代流通综合试点 ...

  7. 如何设置文字的位置html5,怎么设置文字在表格中的位置

    表格中的文字默认都是顶格的导致有的时候看起来特别的不美观,那么怎样才能让它们排版更加好看呢,这里详细介绍了怎么操作,让我们一起看看吧! 一.设置文字在表格中的位置 在表格中添加文字后,默认的文字位置为 ...

  8. Seaborn使用violinplot函数可视化多分组小提琴图(violin plot)、每个小提琴图内部包含两个分组、使用inner函数设置在小提琴图中使用虚线显示分位数位置

    Seaborn使用violinplot函数可视化多分组小提琴图(violin plot).每个小提琴图内部包含两个分组.使用inner函数设置在小提琴图中使用虚线显示分位数位置(inner = 'qu ...

  9. VC++设置Release模式下允许调试代码

    2019独角兽企业重金招聘Python工程师标准>>> 在Release中允许代码调试,只需要关闭代码优化,设置调试信息输出就可以了.以VS2015为例,说明如何设置相关项目属性,其 ...

最新文章

  1. Nginx的安装和多域名配置的实现方法
  2. [云炬创业基础笔记]第四章测试24
  3. html css js调用dll,js调用Activex的dll
  4. NYOJ737 石子合并(一)区间动态规划
  5. 第二章 API的理解和使用
  6. Python 线程队列 LifoQueue – LIFO - Python零基础入门教程
  7. 三角函数π/2转化_【高中数学说课】三角函数的诱导公式
  8. Could not connect to Redis at 127.0.0.1:13141: Cannot assign requested address
  9. 自己的Matlab代码整理
  10. [JavaScript实例解析]js计算器
  11. 宇视EZview/智U手机客户端输入了正确的账号、密码,为什么却提示“该用户名未注册”
  12. シェリーヌ / 老师
  13. 23个Python爬虫开源项目代码:微信、淘宝、豆瓣、知乎、微博...
  14. Mac下如何输入全角空格
  15. 如何使用tor代理网络
  16. Python时间序列中ADF检验详解
  17. C# 使用串口分析SAM协议,读取身份证信息
  18. 编程猫和python区别_西瓜创客和编程猫有什么不同?哪个更值得报名?
  19. 总结:m文件转化为c/c++语言文件,VC编译
  20. 经验分享|原来这些图灵奖巨匠就藏在身边

热门文章

  1. OPENCV-5 学习笔记
  2. 一条命令教你安装centos下面的pip服务
  3. python进阶10 MySQL补充 编码、别名、视图、数据库修改
  4. 谈谈Java基础数据类型
  5. cocos2d-x3.2创建项目
  6. C# 之 HttpResponse 类
  7. 关于lvalue and rvalue
  8. 网络IPC:套接字之建立连接
  9. 解决思科认证学员与高校网络及信息安全专业实验限制的解决方案
  10. Agile in a Flash:重新定义纪律