zoukankan      html  css  js  c++  java
  • stm32 RAM分配及占有(转)

    源:http://blog.chinaunix.net/uid-26921272-id-4550126.html

    一个小的项目,在测试时间和产品量稍微大一些之后,出现了一些莫名其妙的非逻辑错误的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
    就再没出现死机的情况。

  • 相关阅读:
    AtCoder Grand Contest 001F Wide Swap
    生成函数/母函数入门学习
    树的点分治入门小结
    树链剖分入门小结
    有重复元素的全排列
    二项式界
    二项系数
    排列问题、组合问题
    容斥原理
    P3372 【模板】线段树 1
  • 原文地址:https://www.cnblogs.com/LittleTiger/p/4371367.html
Copyright © 2011-2022 走看看