keril中不能定义全局变量时初始化的原因
来源:互联网 发布:linux 字符集查询 编辑:程序博客网 时间:2024/05/14 16:31
在嵌入式系统中,全局变量的初始化是在系统启动的过程中来做的。做法其实很简单,就是把外存(ROM或Flash等存放CODE的介质)中的全局变量空间拷贝到内存中的全局变量空间映像中。如果没有这一步正确的从外存到内存的拷贝工作,你的全局变量是没有初始化值的。
编译器如果没有生成这步代码,那你的全局变量就都是没有办法初始化的。
用const为啥能解决问题呢?因为const型的变量被Keil直接放到了外存中,也就是放到了代码段中。以后使用const实际不是访问内存而是外存!
现在说你的全局变量初始化的问题解决方案:
1. 研究编译结果,看全局变量的初值被放在了code段的哪个位置,以及全局变量在内存中的位置定义,然后在初始化过程中——进入main函数之前,把这些值拷贝过来。因为编译器是按照段来处理全局变量的,所以所有全局变量的相对位置都是一一对应的,用memcpy就可以了。
2. 不要在全局变量中这样初始化,而是通过函数来初始化,在main函数的开头用init函数来初始化所有的全局变量。
- keril中不能定义全局变量时初始化的原因
- 转载_keril中不能定义全局变量时初始化的原因
- 为什么.h文件中不能定义全局变量
- delphi 全局变量的定义与初始化赋值
- delphi 全局变量的定义与初始化赋值
- MFC中全局变量的定义
- Android中全局变量的定义
- jquery ajax 异步调用方法中不能给全局变量赋值的原因及解决办法
- jquery 异步调用方法中不能给全局变量赋值的原因及解决办法
- jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
- getjson中不能在函数体内给全局变量赋值的原因及解决办法
- 全局变量只能初始化不能赋值
- C++中定义全局变量时的一个注意点
- C++中全局变量的编译器初始化值
- C语言中全局变量初始化的重要性!!!
- c语言中全局变量的初始化
- c++中静态成员变量要在类外部再定义或初始化的原因
- c++中静态成员变量要在类外部再定义或初始化的原因
- Windows自带的小巧的调试利器--Dr.Watson
- 输入和输出的操作符重载
- shift+delete删除文件恢复
- 利用Path环境变量解决oracle数据库和owb工具不兼容问题!
- 自己动手写一个APK安装器(一)
- keril中不能定义全局变量时初始化的原因
- 学习笔记2011.4.27
- JAVA 用JFreeChart绘制K线图 急!急!急!!求高手!
- Android2.1消息应用(Messaging)源码学习笔记(转载)
- JAVA 用JFreeChart绘制K线图 急!急!急!!求高手!
- Android2.1消息应用(Messaging)源码学习笔记(转载)
- qq语音不能聊天解决方法
- Android2.1消息应用(Messaging)源码学习笔记(转载)
- OWB无法定位程序输入点kpuhhalo于动态链接库oci.dll上