4420|4

603

帖子

1

TA的资源

纯净的硅(中级)

楼主
 

晒设计方案+马里奥大叔还可以在SDRAM里跑! [复制链接]

马里奥大叔的相关信息,还请移步下文来了解……晒设计方案+马里奥大叔可以在F4上跑得更好



移植马里奥大叔可不是一件手到擒来的事,调试嘛还是少不了的,这时候就遇到了一个尴尬的问题:每次改两条语句,就要烧写FlashRom,真是很讨厌。

于是本辑带来一个Keil的特殊玩法:在外置SDRAM中调试程序。

之前似乎在哪位童鞋的帖子里看到他谈论在片上SRAM中调试程序了。相信他再努努力,就快练成在外部RAM调试的绝技啦。所以呢,我这里也不再讲述在片上RAM调试的事情啦。

由于楼主多年在有关方面工作,时而就会遇到这样的情况:本身没有可存储程序的ROM,程序从外部SPI的Flash中加载到内存里运行,而程序又很大很大,烧写SPIFlash就要花费好长时间。于是在这种压力下,本辑的独(páng)门绝(zuǒ)技(dào)诞生了。

其实调试过程中,程序根本不需要经过Flash,直接加载到内存里即可啦。

对于我们的F4,它有巨大的外部SDRAM,当然也有巨大的ROM,这里我们暂且认为,烧写ROM是无谓的芯片损耗。于是,我们要谢绝download,直接在内存中调试。

很大的程序,就无法在相对较小的片上SRAM里存储,想要用外置RAM,似乎又必须要先运行程序,将控制器初始化,这里难道是个死循环吗?

其实你只要把一部分程序先搞到SRAM里运行一下,来初始化外部RAM,然后就可以继续加载剩下的程序到外置RAM里啦……

事实上,我们需要一个辅助工程——来进行外置RAM的初始化——这一部分和我们想要调试的工程毫无关系。你可以认为它只是一个函数,来初始化SDRAM控制器了。这个东西我准备好了,不过我也讲不了那么深刻,这段内容还是示例中直接搬过来的,所以大家多多交流,慢慢理解。
sdram_debug.rar (2.43 KB, 下载次数: 47)


然后,通过压缩包里另带的调试脚本,将初始化程序引入SRAM,并运行,初始化结束后停下来,然后继续加载我们自己要调试的工程,……后面就好理解啦。
当然,毕竟是SDRAM,可能在其上的运行速度会令人伤心的。不过,如果我们在芯片外面接的是SRAM,或许效果就不一样啦。

下面动手调整,首先把我们的前面的辅助文件都拷贝到要调试的工程里——只是两个文件嘛,sdram_init.hex和sdram_debug.ini

目标工程设定,我们看图说话







以下是分散加载描述文件,原来的样子。
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08000000 0x00200000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00200000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00030000  {  ; RW data
   .ANY (+RW +ZI)
  }
}

我们的目的是把它们统统塞到外部RAM中,所以改成下面这样:
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x90000000 0x00800000  {    ; load region size_region
  ER_IROM1 0x90000000 0x00800000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+RW +ZI)
  }
}

OK,编译,之后不要Download,直接开启Debug

如果有一天你想把程序烧写到Flash中了,好像只要把Link标签页的“Use Memory Layout from ......”勾回来然后重新编译就可以用于download啦,当然其他内容不改回原样,是不太好在Flash中调试的。

最后楼主根据相关的调试经历,郑重提醒各位:
1.被调试工程,就不要再对SDRAM进行初始化了,取缔其中所有关于SDRAM控制器的操作。
2.不要简单认为你能看见内存中的数据,数据就能被cpu取指,内存可能没有挂在指令总线上。
3.没有Cache的日子,在SDRAM上调试可能比在Flash中调试痛苦到不知哪里去了。
4.有Cache的日子,也不要指望SDRAM的速度。

本辑到此就告一段落了,由于楼主对IAR不熟悉,所以这里就只讲讲Keil的使用了。另外,这里只研究了关于F4在SDRAM上跑程序的问题,并没有进一步研究如何提高运行的效率,更多内容还是欢迎高手来指导和讲解。

最后是我在SDRAM里跑得马里奥,献丑了……太丑了……运行很慢的,下载的童鞋要有心理准备
NesRam.zip (2.26 MB, 下载次数: 60) (7z压缩,体积更小)



查看本帖全部内容,请登录或者注册
此帖出自stm32/stm8论坛

最新回复

顶帖收藏下,做下标记  详情 回复 发表于 2014-12-1 00:37
点赞 关注(1)
 

回复
举报

373

帖子

0

TA的资源

纯净的硅(中级)

沙发
 
请问楼主  IAR下如何自外部ram调试程序呢
此帖出自stm32/stm8论坛
 
 

回复

373

帖子

0

TA的资源

纯净的硅(中级)

板凳
 
你这个hex文件怎么用呢
此帖出自stm32/stm8论坛
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

4
 
赞一个很有参考价值
此帖出自stm32/stm8论坛
 
 
 

回复

231

帖子

0

TA的资源

一粒金砂(中级)

5
 
顶帖收藏下,做下标记
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表