历史上的今天
返回首页

历史上的今天

今天是:2025年01月16日(星期四)

正在发生

2020年01月16日 | AVR单片机对外部RAM的扩展

2020-01-16 来源:eefocus

我采用的是GCC编译器,并且在项目中采用C++来编写程序,根据理论上来讲,只要外部存储器使能了并且配置完成,那么变量的地址分配完全可以交给编译器来做,但是前提是存储器使能及配置代码要在上电复位后最先得到执行,而采用C或者C++来编写程序,上电复位之后最先得到执行的代码是由编译器自动增加的启动代码以及构造函数代码。我不清楚如何让存储器使能及配置代码在上电复位后最先得到执行,所以就写了下面一段宏来控制外部存储器的访问。

AVR单片机对外部RAM的扩展

代码如下:

//extern_ram.h

#ifndef _H_EXTERN_RAM_H_

#define _H_EXTERN_RAM_H_

#include “type.h”

#define DEF_EX_VAR(name) EX_VAR name;

#define INIT_EX_VAR(name,ele_size,ele_n) do{

name.size_ele=ele_size;

name.n_ele=ele_n;

name.addr=p;

p+=((ele_size)*(ele_n));

}while(0)

#define WR_EX_VAR(name,pos,pdat) do {

for(UINT8 iiiii=“0”;iiiii(name.addr+(pos)*name.size_ele)[iiiii]=*((INT8 *)pdat+iiiii);

} while(0)

#define RD_EX_VAR(name,pos,pdat) do {

for(UINT8 iiiii=“0”;iiiii*((INT8 *)pdat+iiiii)=((INT8 *)(name.addr+(pos)*name.size_ele))[iiiii];

} while(0);

#define GET_P_EX_VAR(name,pos) (name.addr+(pos)*name.size_ele)

typedef struct _tag_ex_var

{

UINT8 size_ele;

UINT16 n_ele;

INT8 *addr;

} EX_VAR;

#endif

应用示例

//main.cpp

#include “includes.h”

INT8 *p=(INT8*)0x3100;//外部RAM的地址从0X3100开始

DEF_EX_VAR(test);//定义一个外部变量

INT16 main(void)

{

UINT8 i;

INT16 tmp;

INT16 *p_ele;

MCUCR|=0X80;//使能XRAM,并配制成最快速度访问

INIT_EX_VAR(test,sizeof(INT16),100);//外部变量初始化,该变量有100个元素,元素大小为sizeof(INT16)

tmp=“0xaaaa”;

for(i=0;i《100;i++)

{

WR_EX_VAR(test,i,&tmp);//写示例,对变量test的所有元素都赋值为0Xaaaa

}

for(i=0;i《100;i++)

{

RD_EX_VAR(test,i,&tmp);//读示例

}

p_ele=( INT16 *)GET_P_EX_VAR(test,32);//获取变量test的第32个元素的指针

while(1);

return 0x00;

}

推荐阅读

史海拾趣

鑫雁公司的发展小趣事

聚洵半导体于2016年在上海张江科学城正式成立,这里被誉为中国的“硅谷”,是科技创新的沃土。公司自创立之初就专注于高性能、高品质模拟及混合信号产品的研发设计与销售管理。在初创阶段,聚洵凭借其核心团队来自国内外顶尖半导体设计公司的背景,迅速构建了强大的技术基础,并获得了业界认可。初期,聚洵聚焦于运算放大器、比较器等基础产品的研发,逐步在市场中站稳脚跟。

Displaytech公司的发展小趣事

随着公司业务的不断发展,Displaytech于1997年在加利福尼亚州圣地亚哥成立了销售办事处,名为SEACOMP。这一举措标志着公司开始向国际市场进军。SEACOMP的成立不仅为公司带来了更多的商业机会,也促进了公司在全球范围内的技术交流与合作。

Beckhoff Automation GmbH公司的发展小趣事

品质是电子行业的生命线,BCD Semi公司深知这一点。因此,公司始终将品质管理放在首位,建立了完善的品质管理体系和质量控制流程。公司从原材料采购、生产制造到产品出厂,每一个环节都进行严格的质量把控,确保产品的高品质和稳定性。同时,BCD Semi还不断引进先进的生产设备和技术,优化生产流程,提高生产效率,为客户提供更优质的产品和服务。

EMBEST公司的发展小趣事

XXXX年,ARM公司投资了EMBEST,双方建立了紧密的战略合作关系。这一合作不仅为EMBEST带来了更多的技术支持和资源,也进一步巩固了其在ARM开发工具领域的领先地位。通过与ARM的紧密合作,EMBEST不断推出创新产品,满足市场的多样化需求。

Celduc Relais公司的发展小趣事

为了确保产品质量和客户满意度,Celduc Relais公司投入大量资源建立了完善的质量管理体系。公司引入了先进的质量管理工具和方法,通过严格的质量控制和持续改进,不断提升产品质量和服务水平。这一举措不仅增强了客户对公司的信任,也为公司在激烈的市场竞争中保持领先地位提供了有力保障。

三环(CCTC)公司的发展小趣事

随着科技的不断进步和市场环境的变化,三环(CCTC)公司认识到科技创新是企业持续发展的关键。因此,公司加大了研发投入力度,引进和培养了一批高素质的研发人才,建立了以博士、硕士为主组成的技术研发团队。同时,公司积极承担并完成多个国家、省级重点科研项目,不断开展新材料、新产品、新技术的研究与创新。这些努力使公司在多个领域取得了突破性的成果,实现了转型升级。

问答坊 | AI 解惑

史上最强动物机CES登场 Marvell Plug Computer 3.0

完全无风扇,内置硬盘,5W功耗(一代指标,含硬盘也不会超过10W),千兆以太+WiFi,Kernel-2.6支持,动物机的绝配啊。 由于目前spec尚未发布,因此仅知道是基于 2 GHz Marvell ARMADA 300处理器,内置硬盘 WiFi 蓝牙 USB2.0 及千兆以太。内存大小 ...…

查看全部问答>

(电子电气工程师必知必会)中文版

下载 (86.56 KB) 2010-4-16 21:49 “作者强调大局观和直觉,从实际出发,这对于我们这些专业人员有着不可估量的重要性。强烈推荐本书”         ——Rick Nelson,Test&Measurement World杂志主编   “本书弥补了学校教育的缺陷。 ...…

查看全部问答>

Windows CE及其开发工具.pdf

Windows CE及其开发工具.pdf…

查看全部问答>

用VS2005开发pocket pc如何配置仿真器网络环境

刚接触,不知道如何配置仿真器的网络环境…

查看全部问答>

在VHDL语言中怎么实现矩阵运算

请问在FPGA上怎么实现矩阵运算? 哪位大虾介绍点资料 邮箱:ldwmmch@163.com …

查看全部问答>

求助串口高手

哪位大侠用过TI公司的TL16C554芯片啊。我现在被这个折磨了很久了还没解决掉。 我在自己作的DSP板子上用的,554自己发送数据时不会出错,但554接收0xFF、0xFA等之类的数据时会变成为零。接收其他数据正确。用示波器测试数据在到达接收引脚时候都是 ...…

查看全部问答>

出个人闲置DSP2812+XDS510USB

现因个人转行原因出06年购合众达DSP2812+XDS510一套。。价格一套共:600元 有意请加QQ:350563705 或致电:13828499087…

查看全部问答>

请教模电知识

  问题:在答案中为什么说“使输出的正方向电压有可能高于电源电压”,这句话应该怎么理解?还能高于电源电压很费解,请高手们指点。谢谢 。还有两个问题:反馈的电流方向是不是由T2管的基极经R3到C2再到输出端呀?从而降低R3中的电流, ...…

查看全部问答>

关于atmel烧录的问题

刚买了块at89lv51,可是在stc的开发板上烧写总是出错,请问可能是什么原因?是电压问题?还是烧写驱动,烧写工具的问题,怎么解决?因为要用到低电压驱动的单片机,谁知道的麻烦告诉一声,谢谢了。…

查看全部问答>

DM642 BIOS中能设置外扩sdram的数据宽度吗?

我想在642外只采用扩展一个32位的SDRAM,一般的开发板都是扩展两片SDRAM,这样数据宽度为64位,很多例程也是基于此的?我现在想问如何在bios中设置数据宽度,将外扩SDRAM扩展为32位?…

查看全部问答>