OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12564|回复: 4

请教一个在程序定义的变量如何在单片机的Flash或RAM储存的问题

[复制链接]

1

主题

3

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-3-14
在线时间
2 小时
发表于 2014-5-22 14:27:56 | 显示全部楼层 |阅读模式
5金钱

先给出一段代码:

#include <reg51.h>

#include "uart.h"

 void main()

{

    char []str="abcdef";

    UartInit();

    while(1)

    {

        rintString(str);

        Delayms(500);


    }

}

这样,这个测试程序可以一直通过串口打印字符串“abcdef”。

问题1:定义的char []str字符数组占用了单片机的RAM,是否同时占用单片机的Flash程序空间?

问题2:如果在字符数组定义时加上“code”关键词,即定义成 char code []str ="abcdef";是不是只占用单片机的Flash程序空间?

请各位大神指教,先谢谢了。。

--------------------------------------------------------------------------------------------------------

如果说 char []str ="abcdef"定义后只占用RAM;char code []str="abcdef";定义后只占用Flash,

那为什么char []str ="abcdef"这样定义的程序编译下载到单片机后能打印出“abcdef”呢,断电后重启也能打印出来,这个字符不是保存在RAM空间么?很疑惑。

最佳答案

查看完整内容[请看2#楼]

回复【3楼】Weboo10000: --------------------------------- abcdef,肯定是存放在flash里面了. 只是你同时又将这个字符串赋值给了数组str. 等于说单片机内部有这么一个操作: 实际存储: code str1x="abcdef" 运行到main函数时: char str[]=str1x;
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-5-22 14:27:57 | 显示全部楼层
回复【3楼】Weboo10000:
---------------------------------
abcdef,肯定是存放在flash里面了.
只是你同时又将这个字符串赋值给了数组str.
等于说单片机内部有这么一个操作:
实际存储:
code str1x="abcdef"
运行到main函数时:
char str[]=str1x;
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-5-15
在线时间
0 小时
发表于 2014-5-22 15:56:49 | 显示全部楼层
HI,你好,如果定义,char []str 在程序编译的时候就分配了RAM空间,这个空间在整个MAIN函数里面都有效。
对于问题2,是只占用了FLASH的空间
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-3-14
在线时间
2 小时
 楼主| 发表于 2014-5-22 16:07:00 | 显示全部楼层
回复【2楼】CXP_ARM:
---------------------------------
谢谢这位朋友的解答。我的疑问点还有一个:就是说这个程序编译后生成HEX,下载到单片机,定义的char str[]="abcdef";是存在于所分配的RAM空间,而不会占用Flash空间,那我让单片机断电重启,串口还是能打印“abcdef”这样的字符串,那这个要怎么解释呢?主要是这一点我很迷糊
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-3-14
在线时间
2 小时
 楼主| 发表于 2014-5-22 18:52:50 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
谢谢原子哥,你这么解释我终于明白了。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 22:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表