使用KEIL、Atmel studio将数组定义在Flash区

 时间:2024-10-23 11:20:18

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

工具/原料

51单片机程序开发工具:KEIL4

AVR单片机程序开发工具:Atmelstudio6.2

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

1、很多单片机爱好者都知道“摇摇棒”和“旋转LED”,毋队末哎它们可以在空中显示出字符和一些简单的图形,在程序开发中亟冁雇乏需要将这些字符或者图形编码以数组的形式定义出来,如果按照一般定义变量的方式定义就会出现如下情况:我想显示《一生有你》的歌词,所以我把歌词编码定义了一个数组,此数组有12.8KB多,按照图示定义的话,编译提示已经超出RAM的容量,无法完成编译,怎么解决呢?请看步骤2

使用KEIL、Atmel studio将数组定义在Flash区

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

使用KEIL、Atmel studio将数组定义在Flash区

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

1、AVR单片机开发个人习惯用Atmel沣举泉零官方的Atmelstudio,因为集成了很多官方的库,开发起来方便很多,在程序开发的过程中经常需要用串口输出棒瀹跏癞一些提示性的语句,如下图定义:可以看到DataMemory占用42byte,由于我未在其他地方定义任何变量,所以这42byte完全就是字符串所占用的空间,那么如果一个工程中定义大量的变量,此时DataMemory就会占用很大,那么怎么把字符串定义在ProgramMemory中以节省DataMemory呢?请看步骤2

使用KEIL、Atmel studio将数组定义在Flash区

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

使用KEIL、Atmel studio将数组定义在Flash区

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

C51单片机流水灯c语言程序详解 NI LabVIEW怎么开启显示VI脚本函数属性和方法 labview中“搜索替换字符串”函数的使用 Altium Designer怎么快速使用右对齐 stc-isp(stc烧写软件的使用)
热门搜索
灯笼图片大全 企鹅图片 菲梦少女 芡实图片 海贼王娜美邪恶漫画