GD32F130FXP6学习笔记十二:mdk定义一些变量上电不初始化
来源:互联网 发布:网络职业 编辑:程序博客网 时间:2024/05/20 22:35
用IAR的同学一定知道__no_init关键字,就是把一些变量放到no_zero段,MCU复位时候
不会初始化这些变量。查看了下mdk的C编译器说明文档,并没有专门的关键字,解决方法是
需要自己开辟一个UNINIT的内存块,再把不需要初始化的变量定义到这个内存块里面(内存块地址和
大小,需要手动修改,不够灵活)。
一、MDK四中属性
code :代码区
rodata :只读数据
rwdata :可读写数据
zidata :(用户)未初始化区(编译器会自己初始化为0)
我自己测试了下,如果是一个未初始化的变量,那么放到了rwdata区;如果是一个未初始化的数组,
则放到了zidata区。但是不管放到哪个区,编译器都会自己完成初始化0。
关于zidata说明:
The ANSI C specification states that static data that is not explicitly initialized, is to be initialized to zero.
Therefore, by default, the compiler puts both zero-initialized and uninitialized data into the same ZI data
section, which is populated with zeroes at runtime by the C library initialization code.
二、手动修改分散加载文件
如上图设置,单击Edit,手动编辑分散加载文件(语法请看上一篇)。
编辑后的:
LR_IROM1 0x08000000 0x00010000 { ; load region size_region ER_IROM1 0x08000000 0x00010000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x20000000 0x00001C00 { ; RW data .ANY (+RW +ZI) } NON_INITIALIZED +0 UNINIT 0x00000400 { ; NO_INIT RW data * (no_init) }}
三、使用说明
uint8_t chBss __attribute__((section("NO_INIT"),zero_init));#pragma arm section zidata="NO_INIT"uint8_t chBssArray[10];
其中:
__attribute__((section("NO_INIT"),zero_init))和#pragma arm section zidata="NO_INIT"
是等价的。
- GD32F130FXP6学习笔记十二:mdk定义一些变量上电不初始化
- GD32F130FXP6学习笔记十一:KEIL MDK输出map文件分析
- C++学习笔记(二)变量定义及初始化
- GD32F130FXP6学习笔记二:CMSIS初识
- GD32F130FXP6学习笔记十三:mdk优化掉不调用的函数和防止没有显式调用的函数被优化掉
- C++ Primer 学习笔记4 变量和基本类型 (变量初始化规则、声明和定义)
- GD32F130FXP6学习笔记八:Cortex-M3启动代码分析笔记
- GD32F130FXP6学习笔记十:Cortex-M3中断学习
- GD32F130FXP6学习笔记一:硬件和软件初学
- GD32F130FXP6学习笔记三:ARM的GPIO初识
- GD32F130FXP6学习笔记四:ARM 汇编指令集初识
- GD32F130FXP6学习笔记五:cortex-m3系列的启动过程
- GD32F130FXP6学习笔记六:cortex-m3系列的ADC初识
- GD32F130FXP6学习笔记七:RealView编译器常用特有功能
- Keil (MDK)中变量定义位置
- 静态变量定义初始化
- 变量定义,初始化,声明
- 变量声明,定义,初始化
- JDBC
- acm之"You are my brother"
- Linux脚本中利用sed修改文件内容的多种技巧
- Struts2拦截器登录验证
- 项目中遇到的一些问题
- GD32F130FXP6学习笔记十二:mdk定义一些变量上电不初始化
- html入门之meta
- iOS webView与H5的交互(返回页面的处理)
- POJ 3635:Full Tank?
- 按钮跳转网页
- fork与vfork创建进程的区别
- SSH整合之could not initialize proxy异常解决方案
- wamp虚拟主机配置
- 二叉树前序、中序、后序遍历非递归写法的透彻解析