各变量在MCU中的存放位置ram or flash

发布者:亚瑟摩根最新更新时间:2018-05-05 来源: eefocus关键字:变量  MCU  存放位置ram  flash 手机看文章 扫描二维码
随时随地手机看文章

闲来无事,研究了下变量在MCU中存储位置
ps:MCU中能存放数据的地方有三处:register、rom、ram

涉及标准C关键字:register:定义和申请一个register级变量
                          auto::定义自动变量,缺省时为编译器默认
                          const:定义常量

涉及IAR预定义:   __no_init:说明变量不需初始化
                         section .text段:存放代码
                         section .rodata段:存放只读数据
                         section .noinit段:存放不需初始化数据
                         section .bss段:存放默认初始化数据
                         section .data段:存放已初始化数据
                         CSTACK段:栈
                         HEAP段:堆

//属性:宏变量
//位置:是在预编译期间被汇编进section .text段(一般放在rom里)
//操作:运行中已不存在
#define  ro_def   0x11111111UL

//属性:常量,只读变量
//位置:直接存在section .rodata段(一般放在rom里)
//操作:程序中访问时均是在section .rodata段中取(速度较慢)
const     uint32_t ro_var = 0x22222222;

//属性:未初始化全局变量
//位置:是存在section .noinit: DATA段(一般放在ram里)
//操作:程序中访问时均是在section .noinit: DATA段中存取(速度较快)
__no_init uint32_t ni_global_var;                 

//属性:默认0初始化全局变量
//位置:是存在section .bss段(一般放在ram里)
//操作:启动时将bss段清零;程序中访问时均是在section .bss段中存取(速度较快)
uint32_t zi_global_var;

//属性:已初始化全局变量
//位置:初始化值存在section .data_init段(一般放在rom里),变量本身是存在section .data段(一般放在ram里)
//操作:启动时将初值从.data_init段复制到.data段;程序中访问时均是在section .data段中存取(速度较快)
uint32_t i_global_var = 0x33333333; 

void test_variable(void) 
{
    //属性:已初始化寄存器变量
    //位置:其初始化值存在section .text段(一般放在rom里),变量本身存在cpu的register里
    //操作:如果申请成功,程序中访问时均是在cpu的register中存取(速度最快);如果申请失败,则是普通局部变量
    register  uint32_t i_register_var = 0x44444444;
    
    //属性:已初始化局部变量
    //位置:其初始化值存在section .rodata段(一般放在rom里),变量本身存在CSTACK里(一般放在ram里)
    //操作:定义时将初值从.rodata段复制到CSTACK中;程序中访问时均是在CSTACK段中存取(速度较快),一说局部变量入栈只是简单的移动SP指针,空出局部变量的位置而已.寻址是用SP的偏移量作为相对地址
    uint32_t i_local_iArray[4] = {0x55555555, 0x66666666, 0x77777777, 0x88888888};

    //属性:动态内存申请
    //位置:赋值是存在section .text段, 申请的内存区是存在HEAP里(一般放在ram里)
    //操作:程序中访问时均是在HEAP段中存取(速度较快)
    uint32_t *zi_local_p;
    p = (uint32_t *)malloc(4);
    ...
}

关键字:变量  MCU  存放位置ram  flash 引用地址:各变量在MCU中的存放位置ram or flash

上一篇:单片机片内存储器烧写
下一篇:单片机C语言头文件 #ifndef/#define/#endif使用详解

推荐阅读最新更新时间:2024-03-16 16:01

瑞萨MCU后工序新厂在北京奠基
株式会社瑞萨科技 在 3 月 25 日 宣布, 为进一步提高生产能力,瑞萨决定再次 投资约 40 亿日元,用于中国北京的半导体后工序工厂瑞萨半导体(北京)有限公司(英文名: Renesas Semiconductor ( Beijing ) Co. ,Ltd. 以下称 RSB) 建设新厂房,并于 3 月 26 日 在 RSB 举行隆重的新厂房开工奠基仪式。 瑞萨宣布将扩大核心事业 MCU 的生产,将现在的世界市场占有率约 25 %提升至 30 %,进一步稳固世界 No.1 的地位。其中最重要的一点就是,要向不断成长的中国 MCU 市场提供最适合的产品,以此作为拉动世界市场占有率的强大动力。此次大规模扩
[焦点新闻]
51单片机实验2:led灯闪烁
开发板led模块电路图如下: 在keil中,sbit的声明要放在全局变量的位置,若放在函数中,会报错。 延时函数的变量使用unsigned char,而不是int,因为char所占空间为1字节,为int所占空间为4字节,因此使用char可以节约内存。但是unsigned char仅能表示0~255,所以延时函数中的参数最大为255,若要更大,则使用int。 #include reg52.h #include intrins.h #define uc unsigned char sbit led1=P2^0; void delay(uc n) { uc i,j; for(i=1;i =n;i++) fo
[单片机]
51<font color='red'>单片机</font>实验2:led灯闪烁
NAND Flash持续缺货,第一季淡季品牌商营收仅微幅衰退0.4%
集微网消息, 集邦咨询半导体研究中心(DRAMeXchange)指出,第一季整体NAND Flash市况延续第四季持续受到缺货影响,即使第一季度为传统NAND Flash淡季,渠道颗粒合约价却仍上扬约20-25%。在智能终端设备如智能手机与平板电脑内的行动式存储价格也呈现双涨的状况下,2017年将是NAND Flash成果丰硕的一年。 DRAMeXchange资深研究经理陈玠玮表示,由于NAND在平面制程(2D/Planar NAND)面临微缩限制,进而转进垂直堆栈制程(3D/Vertical-NAND),然而转换期所造成的产能损失,导致供需失衡,进而使合约价持续上扬。 尽管第一季为传统淡季,终端需求量较少,但因为供给产出量受制程
[手机便携]
Freescale 9S12 系列单片机应用笔记(libmaker)
飞思卡尔提供的9S12系列单片机开发工具包 CodeWarrior Development Studio中包含一个非常有用的工具 libmaker, 可以将编译后的 obj 文件打包为库文件。还可以对现有的库文件进行一些基本的修改。这东东有什么用呢,首先,将一系列的 obj 文件打包为库文件后会提高最后的 Link 阶段的速度。还可以将自己一些不愿公开的代码打包为库文件,有助于知识产权的保护。 不说废话了,还是以一系列的例子来说明问题。首先假设我们的项目中有三个源文件。分别如下: /*add1.c*/ char add1(char a){ return a + 1;} /*add2.c*/ char a
[单片机]
msp430单片机应用之定时器、PWM、比较器
1。定时器使用查询和中断两种方式。大多数逻辑芯片输出0的能力大于输出1的能力。 (1)查询方式:TMSEL决定看门狗的工作模式,置一,看门狗工作在定时模式。SSEL选择看门狗定时器的时钟源。SSEL置一。IS0IS1决定了看门狗定时器的输出频率。(注意:使用查询方式时候要清除中断标志) main() { ... while(True) { if(IFG1&0x01) { P1OUT ^= 0x01;//翻转状态 IFG &=0xfe;//清除中断标志位 } } } (2)中断方
[单片机]
基于51单片机的贪吃蛇小程序(8*8LED点阵实现)
一直很想写一个贪吃蛇的小程序,这两天终于抽空完成了,这里把我的思路分享给大家,仅供参考! 代码如下: 先放段主函数压压惊 void main() { x_s = 2; //初始化三个点 y_s = 3; x_s = 3; y_s = 3; x_s = 4; y_s = 3; Timer0Init(); suijishu(); while(1) { appear(); if(flag_a) //蛇身移动位 { if(!flag_s) //蛇身死亡位 { auto_move(); HC_595(0x00); //消隐 P0 = 0xFF; //消隐
[单片机]
MCU基本技术原理与发展历史
一.单片机与单片微计算机系统 计算机系统已明显地朝巨型化、单片化、网络化三个方向发展。巨型化发展的目的在于不断提高计算机的运算速度和处理能力,以解决复杂系统计算和高速数据处理,比如系统仿真和模拟、实时运算和处理。单片化就是把计算机系统尽可能集成在一块半导体芯片上,其目的在于计算机微型化和提高系统的可靠性,通常把这种单片计算机简称单片机。准确而言,单片机(单片微型计算机)实际上是一种将CPU(中央处理器)、存储器和输入输出接口集成在一个芯片中的微型计算机。单片机的内部硬件结构和指令系统主要是针对自动控制应用而设计的,所以单片机又称微控制器MCU(MicroController Unit),又由于用它可以很容易地将计算机嵌入到各种仪
[单片机]
破解台湾MCU大厂的经营之道:8+32的互补新哲学
每年的MCU发表,都是盛群半导体的年度重头戏。今年盛群也以智能生活之相关控制及通讯应用为应用主轴。且继2015年推出ARM Cortex M0+的32位元Flash MCU,展现出效能、功耗、价格之最佳组合之后,今年也顺势拓展更多32位元MCU的产品系列,其中ARM Cortex M0+的32位元Flash MCU已拥有96MHz的高速与效能,目标将应用于智慧家居、物联网及穿戴式设备等。 8+32让应用更多元 面对MCU发展的脚步,盛群半导体总经理高国栋指出,8位元的基础都已经打稳根基,这些基础更不会消失,而M0+的32位元则是延伸了既有的8位元应用范围。当8位元MCU的功能与特性,没办法满足客户的时候,就会改用32位元。因此,简
[手机便携]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved