|
| 技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
M128的外部RAM的问题 |
|
| 作者:star0528 栏目:单片机 | |
我是新人,现在公司的工程用M128,外扩了32K RAM. 可是用C写了程序,用GCC编译后,调试的时候发现程序不会把变量定义到外部内存中去,当把4K内部RAM写满后,就继续在最后面重复定义变量. 公司的软件工程师已经在程序中定义了MCUCR,XMCRA,XMCRB: MCUCR = 0xC0; //MCUCR = 1100 0000 XMCRA = 0x40; //XMCRA = 0100 0000 XMCRB = 0x00; //XMCRB = 0000 0000 应该没什么问题吧? 另外我在MAKEFILE的SAMPLE中发现以下的东西: # External MEMORY options # 64 KB of external RAM, starting after internal RAM (ATMEGA128!), # used for variables (.data/.bss) and heap (malloc()). #EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff # 64 KB of external RAM, starting after internal RAM (ATMEGA128!), # ONLY used for heap (malloc()). #EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff EXTMEMOPTS = 现在用的MAKEFILE里没这句. 我觉得与这个问题有关,需要做什么改动吗? 最后再改一次,硬件方面应该没问题. 现在软工在用直接用指针写地址的方法编程,可以把数据存在外部RAM中的. * - 本贴最后修改时间:2005-3-14 11:17:41 修改者:star0528 |
| 2楼: | >>参与讨论 |
| 作者: star0528 于 2005-3-14 11:18:00 发布:
先谢谢了 先谢谢各位了! |
|
| 3楼: | >>参与讨论 |
| 作者: star0528 于 2005-3-14 14:33:00 发布:
晕 怎么没人愿意帮我吗~? |
|
| 4楼: | >>参与讨论 |
| 作者: mxh0506 于 2005-3-14 22:27:00 发布:
我一般是这么用的: 把DATA段定义到外部RAM中的最低地址处,内部RAM全部留给堆栈.这样程序堆栈从RAM_END处向内部RAM的低地址延伸;而程序中的变量占用的RAM从DATA段开始处向高地址延伸,不用担心堆栈被误写. |
|
| 5楼: | >>参与讨论 |
| 作者: star0528 于 2005-3-15 8:20:00 发布:
谢谢啊,可是具体怎么用呢? 是要在MAKEFILE里写那些与ERAM有关的设置语句?还是在C语言源程序里写什么语句??再次感谢啊 |
|
| 6楼: | >>参与讨论 |
| 作者: mxh0506 于 2005-3-16 21:22:00 发布:
找段文档给你看: It is possible to tell the LINKer the SRAM address of the beginning of the .data section. This is accomplished by adding -Wl,-Tdata,addr to the avr-gcc command used to LINK your program. Note that addr must be offset by adding 0x800000 the to real SRAM address so that the LINKer knows that the address is in the SRAM MEMORY space. Thus, if you want the .data section to start at 0x1100, pass 0x801100 at the address to the LINKer. ==================================================================== 基本上照文档中说的去做就对了.但是文档中没有提到程序中存在ExRAM中的常量时如何处理,而这又需要注意另外的技巧,否则那些用const修饰的常量是不会被正确初始化的. 我觉得改变数据段地址是个挺不错的功能,会用了以后,可以实现一些看似软件不支持的功能. * - 本贴最后修改时间:2005-3-16 21:31:52 修改者:mxh0506 |
|
|
|
| 免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |