历史上的今天
返回首页

历史上的今天

今天是:2025年03月03日(星期一)

正在发生

2020年03月03日 | 使用KEIL、Atmel studio将数组定义在Flash区

2020-03-03 来源:eefocus

简介:在进行51或AVR单片机程序开发时如果需要定义较大的数组或字符串时,一般定义将会把这些占用内存较大的变量放置到RAM中,因此RAM吃紧,严重的话将导致程序崩溃,面对这种情况我们可以将这些占用内存较大的变量定义到Flash中以释放一定的RAM空间,保障程序的流畅运行。


在进行51或AVR单片机程序开发时如果需要定义较大的数组或字符串时,一般定义将会把这些占用内存较大的变量放置到RAM中,因此RAM吃紧,严重的话将导致程序崩溃,面对这种情况我们可以将这些占用内存较大的变量定义到Flash中以释放一定的RAM空间,保障程序的流畅运行。


方法/步骤1——51单片机KEIL编译环境


一、很多单片机爱好者都知道“摇摇棒”和“旋转LED”,它们可以在空中显示出字符和一些简单的图形,在程序开发中需要将这些字符或者图形编码以数组的形式定义出来,如果按照一般定义变量的方式定义就会出现如下情况:


我想显示《一生有你》的歌词,所以我把歌词编码定义了一个数组,此数组有12.8KB多,按照图示定义的话,编译提示已经超出RAM的容量,无法完成编译,怎么解决呢?请看步骤2

二、在KEIl中只需在定义中添加关键字code就可以把变量定义到程序区,如图示,编译通过,是不是很简单呢

方法/步骤2——AVR单片机Atmel studio编译

1.AVR单片机开发个人习惯用Atmel官方的Atmel studio,因为集成了很多官方的库,开发起来方便很多,在程序开发的过程中经常需要用串口输出一些提示性的语句,如下图定义:


可以看到Data Memory占用42byte,由于我未在其他地方定义任何变量,所以这42byte完全就是字符串所占用的空间,那么如果一个工程中定义大量的变量,此时Data Memory就会占用很大,那么怎么把字符串定义在Program Memory中以节省Data Memory呢?请看步骤2

二、Atmel studio提供一个名为pgmspace.h的头文件里面包含一些对Flash的操作,只要在工程中包含了这个头文件,再在定义字符串的时候稍加修改,以PSTR()包括就可以把字符串定义在Flash中了,但是由于是定义在Flash中,需要编写一个如下图所示的读取函数就能把字符依次从Flash中读出并用串口发送

从上图可以看到虽然增加了PSTR()包含的字符串,但是编译后的Data Memory依然是42byte,证明该字符串却是被存储在了Program Memory区!

推荐阅读

史海拾趣

Avery Dennison公司的发展小趣事

Avery Dennison在追求商业成功的同时,也积极履行社会责任,致力于可持续发展。公司注重环保和节能,通过采用环保材料和工艺、推广循环经济等方式,降低生产过程中的环境影响。此外,Avery Dennison还积极参与社会公益事业,支持教育、扶贫等项目,为社会和谐与发展贡献力量。

这些故事展示了Avery Dennison在电子行业中的发展历程和成就,体现了公司不断创新、追求卓越的精神。未来,随着科技的不断进步和市场需求的不断变化,Avery Dennison将继续保持创新活力,为客户和社会创造更多价值。

Edsun Laboratories Inc公司的发展小趣事

面对日益严重的环境问题,ECM Electronics Limited.积极响应国家节能减排的号召,将绿色发展和可持续发展作为企业的重要战略。公司采用环保材料和节能技术,降低产品能耗和排放。同时,公司还积极参与环保公益活动,推动行业绿色发展。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

Deltron / DEM Manufacturing公司的发展小趣事

DEM Manufacturing深知品牌对于企业发展的重要性。因此,公司注重品牌塑造和宣传,通过广告、公关等多种手段提升品牌知名度和美誉度。同时,公司还积极参与公益事业和社会活动,履行社会责任,树立了良好的企业形象。

远阳(FLYOUNG)公司的发展小趣事

国光新业在深耕国内市场的同时,也积极拓展海外市场。公司的电容器产品凭借其优异的性能与可靠的质量,赢得了国内外众多客户的信赖与好评。随着品牌影响力的不断提升,国光新业已成为电子元器件行业中的佼佼者。未来,公司将继续坚持创新驱动发展战略,不断提升产品与服务的品质与竞争力,致力于成为具有国际竞争力的电子元器件供应商。

Discera公司的发展小趣事

Discera公司的产品在性能和稳定性上表现出色,很快就引起了美国军方的关注。经过严格的测试和评估,Discera的CMOS MEMS谐振器成功通过了美国军方的质量可靠性测试,并获得了军方的认证。这一成就不仅证明了Discera产品的卓越性能,也为公司进一步拓展军用市场打下了坚实的基础。

BusBoard公司的发展小趣事

在竞争激烈的电子行业,技术创新是企业生存发展的关键。BusBoard公司深知这一点,因此不断加大研发投入,引进高端人才,推动技术创新。一次偶然的机会,公司研发团队发现了一种新型材料,可以显著提高电路板的性能和稳定性。经过反复试验和优化,这一技术突破最终转化为实际产品,并成功推向市场。这一创新不仅提升了BusBoard公司的竞争力,也为客户带来了更优质的产品体验。

问答坊 | AI 解惑

8位、32位MCU整体研发成本比较

前言:在多数的微控器(MCU)应用中「成本」向来被视为第一设计要则,因此许多工程师倾向(或被要求)使用初阶MCU来精省成本,然这仅是精省了量产时的硬件料件成本,若从整体成本的角度来审视,结果往往会适得其反。 过去,微控器(MCU)的应用设计相 ...…

查看全部问答>

Protel DXP2004 简体中文破解版

Altium Protel DXP是第一套完整的板卡级设计系统,真正实现在单个应用程序中的集成。设计从一开始的目的就是为了支持整个设计过程,Protel DXP让你可以选择最适当的设计途径来按你想要的方式工作。Protel DXP PCB线路图设计系统完全利用了Windows X ...…

查看全部问答>

求助:电烙铁故障问题

开始用的时候可以,但是时间久了就不送锡了。 而且等锡融化时,把电烙铁头插入锡中,锡还保持着融合状态。 不知大家有没有好的办法解决?…

查看全部问答>

RS485通讯

  谁知道RS485通讯的详细资料???现在急用,谢谢!!!…

查看全部问答>

这个钟不错

http://www.tudou.com/programs/view/2dcGxif077E…

查看全部问答>

DE2_WEB 哪位大侠用过DE2_WEB这个程序?

我在网上下了一个DE2_WEB的程序,用NIOSII编译不能用过,说是dm9000.c里边有错误,不知道啥原因?…

查看全部问答>

急 求破解!困惑了几个星期了!

为啥用msp430驱动不了呢?用51就可以呢?msp430用的是默认的时钟!各位帮帮忙啊! /**************宏定义***************/ #define DataDir0     P4DIR      //LCD1602 #define DataPort0    ...…

查看全部问答>

求问15pin oled的问题~~~~~

项目上要用到的 板子已经做好了 网上买了15pin的oled 中景园的 已经焊到板子上了~ oled 和接口如下图: 然后给大家看下淘宝卖家给提供的外围电路原理图: 那么问题来了 ~ 我现在外界电路已经按他给的图画好了 然后我用的mcu是430f5529 可 ...…

查看全部问答>

求 《STM32库开发实战指南》(刘火良 版)光盘资料 ?

本帖最后由 yhye2world 于 2016-10-27 15:11 编辑 见附图,为 《STM32库开发实战指南》(刘火良 版)封面截图。 请教: 哪位 有这本书的 光盘资料 呀 ?给小弟 共享下 ! 先谢谢了 ! …

查看全部问答>