stm32中程序内存的理解和一些问题的解决
来源:互联网 发布:阿里巴巴淘宝城 编辑:程序博客网 时间:2024/06/05 06:56
一个小的项目,在测试时间和产品量稍微大一些之后,出现了一些莫名其妙的非逻辑错误的Bug(最头疼的是不能每次都能复制出来)。经过修改后,最近一个月的测试都没有出现。本人在这里得到了原子哥和其他朋友的很多帮助,也把自己的一些经验分享给各位,也欢迎大家指正。
1. 程序偶尔会出现一些Bug,经过output串口信息发现一些堆栈的临时变量被莫名其妙的修改。
stm32103rbt6的内存是20K,算比较小了,看到程序出错的那个函数申请了很多零时变量,也需要访问很多全局变量。猜想是内存被其他操作更改所致。
解决ram被使用过多的一个方法是尽量少用全局变量,能用const就用一定用const变量,因为这样会放在flash,而不是ram.
我的程序未将全局变量修改成const变量之前,编译出来
Program Size: Code=40998 RO-data=8702 RW-data=3724 ZI-data=3260
尽量将全局变量修改成const变量之后,编译出来
Program Size: Code=35778 RO-data=13470 RW-data=108 ZI-data=2060
大大减少了RW-data,这个问题就再也没出现了。
相关资料:
Code为程序代码部分
RO-data 表示 程序定义的常量 const temp;
RW-data 表示 已初始化的全局变量
ZI-data 表示 未初始化的全局变量
Total RO Size (Code + RO Data)
Total RW Size (RW Data + ZI Data)
Total ROM Size (Code + RO Data + RW Data)
初始化时RW-data从flash拷贝到RAM
2. 程序莫名其妙死机,
猜想因为申请了很多零时变量,可能需要调整Stack_Size
在STM32F10x.s文件中
修改Stack_Size EQU 0x00000200
成Stack_Size EQU 0x00000400
就再没出现死机的情况。
1. 程序偶尔会出现一些Bug,经过output串口信息发现一些堆栈的临时变量被莫名其妙的修改。
stm32103rbt6的内存是20K,算比较小了,看到程序出错的那个函数申请了很多零时变量,也需要访问很多全局变量。猜想是内存被其他操作更改所致。
解决ram被使用过多的一个方法是尽量少用全局变量,能用const就用一定用const变量,因为这样会放在flash,而不是ram.
我的程序未将全局变量修改成const变量之前,编译出来
Program Size: Code=40998 RO-data=8702 RW-data=3724 ZI-data=3260
尽量将全局变量修改成const变量之后,编译出来
Program Size: Code=35778 RO-data=13470 RW-data=108 ZI-data=2060
大大减少了RW-data,这个问题就再也没出现了。
相关资料:
Code为程序代码部分
RO-data 表示 程序定义的常量 const temp;
RW-data 表示 已初始化的全局变量
ZI-data 表示 未初始化的全局变量
Total RO Size (Code + RO Data)
Total RW Size (RW Data + ZI Data)
Total ROM Size (Code + RO Data + RW Data)
初始化时RW-data从flash拷贝到RAM
2. 程序莫名其妙死机,
猜想因为申请了很多零时变量,可能需要调整Stack_Size
在STM32F10x.s文件中
修改Stack_Size EQU 0x00000200
成Stack_Size EQU 0x00000400
就再没出现死机的情况。
0 0
- stm32中程序内存的理解和一些问题的解决
- 大用户程序开发过程中遇到和解决的一些问题集
- fuse程序挂载时nonempty问题的理解和解决
- fuse程序挂载时nonempty问题的简单理解和解决
- STM32内存管理以及堆和栈的理解
- STM32内存管理以及堆和栈的理解
- 一些搬迁GitLab环境中碰见的问题和解决
- 关于C程序运行时的内存 的一些理解
- STM32中一些需要注意的小问题
- 关于我对STM32的一些理解
- 程序中一些和多线程有关的问题
- 程序中变量的内存安排和const_cast问题
- stm32中引脚和一些功能模块的一般配置方法
- c++中关于内存的一些问题
- OC中内存管理的一些问题
- STM32程序移植的一些注意方法
- MTU 理解和遇到的一些问题
- 解决UDT中内存下不去的问题
- igb uio小结
- Python编程入门-第六章 字符串 -学习笔记
- Android Input之JoyStick
- struts2拦截器
- WPF CM框架下点击不同的按钮切换到不同的界面
- stm32中程序内存的理解和一些问题的解决
- 按Android平板(或手机)的物理按键(如音量键)实现Activity界面的跳转
- 中途相遇法(侏罗纪,LA 2965)
- C++面向对象高级编程(上)学习笔记
- 6. React 表单使用介绍
- KEIL 编译后的芯片资源使用情况
- 堆和栈的区别(经典干货)
- (Eclipse打包问题)Export aborted because fatal lint errors were found.These are listed in the lint view
- Bootstrap学习笔记