当前位置: 首页 > news >正文

【单片机程序和RAM】程序在RAM中调试的运行方式程序固化后运行方式

程序固化后运行方式:

程序开始运行后需要将RW 和ZI段搬移到RAM中去,程序下载进Flash中以后,上电后是怎样将RW ZI断搬移到RAM中去的?注意IAR和ADS在进行完.s文件的初始化以后都不是直接跳转到main函数去执行,IAR是跳转到?main中而ADS是跳转到__main函数中,在这些函数中根据icf文件的配置,将RW和ZI段搬移到icf文件规定的RAM区域中。如果程序的运行时域是在片外RAM中,那程序是在什么时候对片外RAM控制器进行初始化呢?因为.s文件的开始部分是CODE RO的,不需要RAM空间,所以可以在.s文件中对片外RAM进行配置。还有一个问题,这个问题是在硬件设计时必须注意的,如果需要程序固化在外部Flash中,必须注意外接的Flash必须是片子上电后默认片外总线就支持的片子。

程序在RAM中调试的运行方式

为了调试的方便,程序有时候是不需要下载进flash进行调试,而是直接在RAM中运行,将icf文件中的ROM 和RAM地址都设成硬件RAM的地址,将Flashloader的使能关掉,那么程序就运行在RAM中了。但是问题又产生了,因为有时我们想在外部RAM中调试代码,所以片外RAM控制器需要在代码下载进RAM之前进行初始化,怎么能够实现呢?IAR是通过.mac文件实现的。在程序下载之前先执行了。mac文件中的程序,下面是一个例子

execUserFlashInit()
{
    __writeMemory32(0x1000ffef, 0xffe00000 , "Memory");
    __writeMemory32(0x0f000114, 0xE002C014, "Memory"); 
}

该例子是lpc初始化外部RAM的例子。配置好了外部RAM就可以在里面跑代码了。

程序的IAR下载

1.      文件在片内Flash中下载运行

这是最简单也是最常用的方式,一般的ARM芯片都会带有片内Flash,IAR会通过Flashloader将二进制的可执行文件下载到Flash中。下载的方式如下:如果要将程序B下载到片子里,IAR先将一个程序A(IAR事先编好的程序)下载到片内的RAM中,然后利用这个程序A通过JTAG和Flashloader交互完成程序B的下载。

2.      文件在片外Flash中下载

IAR下载进RAM中的程序A必须支持片外的Flash,他能够完成片外Flash的擦除。往往这个程序需要自己写。像HJTAG的下载机制也是这样,HJTAG中列举了很多HJTAG支持的芯片,所谓支持就是HJTAG很有这些芯片的A程序。在HJTAG中必须要指定程序A将要下载到的RAM的地址,而且这个地址的RAM必须是可用的,比如如果用的片外SDRAM的话就必须初始化SDRAM控制器。这在HJTAG的Init Script中完成、在IAR的mac文件中完成。

3.      文件在片内RAM中下载 、文件在片外RAM中下载

由于这两种方式不需要Flashloader的参与,这时程序的加载时域和运行时域是相同的,程序运行后不涉及程序的搬移,所以只要给IAR指定运行时域的RAM地址就行了,如果是内部RAM,那非常省事,直接在icf文件中将地址都设置成内部RAM就行,如果是外部RAM那么在mac文件中初始化外部SDRAM控制器或者其他的RAM,然后IAR就可以完成将程序放在已经初始化好的外部RAM里,并运行。

相关文章:

  • 【关于单片机的N多问题】关于单片机的N多问题
  • 【volatile关键字】 详解C中volatile关键字(IAR 优化等级问题)
  • 【下载进去无法运行】MSP430 程序能下载进去却无法运行
  • 【文章收藏】文章收藏
  • 【DATA16DATA20】MSP430中的DATA16和DATA20【Data model Large】
  • 【编程经验总结】编程经验总结
  • 【精确延时函数】IAR(MSP430)中的精确延时函数
  • 【Clng与Cint】clng与cint的区别及防溢出函数
  • 【寻址方式】直接寻址、位寻址、立即数寻址、寄存器寻址等
  • 【高效单片机语言结构】怎样最好地使用MSP430 编译器的建议
  • 【RS-485收发切换】使用RS-485要注意的一个问题
  • 【汇编指令】MSP430汇编指令
  • 【关于堆栈和指针】关于堆栈和指针 不错的文章
  • 【参数传递方式】参数用指针好还是用数值好(区别)结构体/指针做参数
  • 【JLINK与JTAG】JLINK与JTAG的区别,JTAG和H-JTAG和SBW的区别
  • gops —— Go 程序诊断分析工具
  • jdbc就是这么简单
  • markdown编辑器简评
  • node 版本过低
  • Python_网络编程
  • scrapy学习之路4(itemloder的使用)
  • Vue小说阅读器(仿追书神器)
  • yii2权限控制rbac之rule详细讲解
  • 分享一份非常强势的Android面试题
  • 复杂数据处理
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 前嗅ForeSpider中数据浏览界面介绍
  • 三栏布局总结
  • 时间复杂度与空间复杂度分析
  • 实现简单的正则表达式引擎
  • 一道面试题引发的“血案”
  • 怎样选择前端框架
  • Android开发者必备:推荐一款助力开发的开源APP
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​马来语翻译中文去哪比较好?
  • #Lua:Lua调用C++生成的DLL库
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (3)STL算法之搜索
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (六)c52学习之旅-独立按键
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (转)jQuery 基础
  • (转)德国人的记事本
  • (转载)OpenStack Hacker养成指南
  • .form文件_一篇文章学会文件上传
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net6Api后台+uniapp导出Excel
  • .net访问oracle数据库性能问题
  • .project文件
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [30期] 我的学习方法
  • [AR]Vumark(下一代条形码)