stm32中程序内存的理解和一些问题的解决

发布者:DelightfulGaze最新更新时间:2018-06-07 来源: eefocus关键字:stm32  程序内存 手机看文章 扫描二维码
随时随地手机看文章

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

关键字:stm32  程序内存 引用地址:stm32中程序内存的理解和一些问题的解决

上一篇:STM32堆区分配内存--malloc的使用
下一篇:STM32的存储分配问题

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

STM32 Cube固件库编程之新建工程
  Cube固件库是ST现在主推的固件库,并且在它的官网已经找不到原来的标准库可供下载。Cube固件库的构架图如下 这种新式构架可以有效的加快软件工程师的工程进度。   新建一个工程项目主要包括以下的步骤:   1、使用它提供的模板或是拷贝一个现有的工程   2、加入你可能用到的middleware   3、拷贝相应的HAL及middleware的配置头文件到你的工程中   4、检查主函数中调用的HAL_Init()   5、配置系统时钟   6、初始化外围   7、这一步就是根据你的设计要求写你自己的工程了
[单片机]
<font color='red'>STM32</font> Cube固件库编程之新建工程
基于STM32设计的遥控小车(手机APP+GPS+温湿度+ESP8266)
一、环境介绍 小车主控MCU: STM32F103ZET6 STM32程序开发IDE: keil5 STM32程序风格: 采用寄存器方式开发,注释齐全,执行效率高,方便移植 手机APP: 采用QT设计,程序支持跨平台编译运行(Android、IOS、Windows、Linux都可以编译运行,对应平台上QT的环境搭建,之前博客已经发了文章讲解) 硬件包含: 淘宝购买的完整一套4轮遥控小车(采用STM32F103ZET6作为主控板)、DHT11温湿度传感器、中科微GPS模块、ESP8266 小车完整源码下载地址: https://download.csdn.net/download/xiaolong11266264
[单片机]
基于<font color='red'>STM32</font>设计的遥控小车(手机APP+GPS+温湿度+ESP8266)
STM32单片机对ADS1246芯片的驱动
ADS1246是TI公司大致在2009年中期推出的24位ADC,最高采样速率可达2Ksps,其为单通道器件,与之相对应的还有ADS1247和ADS1248三通道器件,但特性并非完全一致。据TI资料介绍,ADS1246在ADS1247/ADS1248功能上做出简化,保留了其部分特性。本次设计,需要用到24位单通道转换器件,于是考虑用到ADS1246,主控制器用STM32L系列。以下为ADS1246的引脚图 上图显示ADS1246引脚图,其CS/SCLK/DIN/DUT为SPI通讯接口,RESET/START/DRDY为控制与状态脚,AVDD/AVSS以及DVDD/DGND分别为模拟/数字电源供电端,REFP/REFN为基准源输入
[单片机]
<font color='red'>STM32</font>单片机对ADS1246芯片的驱动
JSN-SR04T超声波模块驱动(模式二、STM32
一、前期准备 单片机:STM32F103C8T6 开发环境:MDK5.14 库函数:标准库V3.5 JSN-SR04T模块:淘宝有售 二、实验效果 三、驱动原理 此模块分3中模式: (1)模式一:R27 = open,普通驱动模式; (2)模式二:R27 = 47K,串口模式,每隔100ms更新一次数据。 (3)模式三:R27 = 120K,串口模式,发0x55。 注意:次模块测试盲区20cm。 串口二接收模块数据,每隔100ms刷新次数据,串口接收数据之后,做完校验之后算出测试距离并打印出来。 需要完整工程或者有问题的请加QQ:1002521871,验证:呵呵。 四、驱动代码 JSN-SR04T.h #if
[单片机]
JSN-SR04T超声波模块驱动(模式二、<font color='red'>STM32</font>)
stm32实用篇5:HAL库 DHT11 驱动
DHT11是很常用的温湿度传感器,时序也比较简单,如下所示: 直接给出HAL库的驱动: 1 微秒级延时函数 HAL库并没有直接的微秒级延时函数,下面是自己实现的微秒堵塞延时函数(使用定时器TIM3); /** * @brief 微秒级延时 */ void bsp_delay_us(uint16_t us) { __HAL_TIM_SET_COUNTER(&htim3, 0); HAL_TIM_Base_Start(&htim3); while (__HAL_TIM_GET_COUNTER(&htim3) != us); HAL_TIM_Base_Stop(
[单片机]
<font color='red'>stm32</font>实用篇5:HAL库 DHT11 驱动
基于语音识别汽车空调控制系统设计
  现在汽车上使用的电器越来越多,驾驶员需要手动操作的电器开关也越来越多,不但增加了驾驶员的负担,还影响了行车安全。本文以STM32F103VET6(以下简称STM32)芯片为控制核心,采用高性能LD3320语音识别芯片,设计基于语音识别的汽车空调控制系统。该系统可以用语音有效控制汽车空调,减轻了驾驶员的操作负担,保证行车过程中的安全。   1 系统硬件设计   运用语音识别技术,结合各种传感器对车身内外的环境(如气温、阳光强度等)以及制冷压缩机的状态等多种参数进行实时检测,与设定参数相比较,微控制器经过运算处理做出判断,输出相应的调节和控制信号。执行机构经过实时调整和修正,实现对车厢内空气环境全方位、多功能的调节和控制。系统
[单片机]
基于语音识别汽车空调控制系统设计
STM32中GPIO的8种工作模式总结
一、推挽输出:可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。形象点解释:推挽,就是有推有拉,任何时候IO口的电平都是确定的,不需要外接上拉或者下拉电阻。 推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。 二、开漏输出: 开漏,就等于输出口接了个NPN三极管,并且只接了E,B,而C极是开路的,你可以接
[单片机]
<font color='red'>STM32</font>中GPIO的8种工作模式总结
STM32外部中断解决方法
01 单片机外部中断简介 所谓外部中断,就是通过外部信号所引起的中断,如单片机引脚上的电平变化(高电平、低电平)、边沿变化(上升沿、下降沿)等。51单片机有5个中断源,其中有两个是外部中断,分别为INT0和INT1,INT0被分配在P3.2引脚,INT1被分配在P3.2引脚,也即是说如果使用51单片机的外部中断0,则必须将信号接在P3.2上,否则无效。 02 举例说明什么是中断 单片机在执行程序时有两种方式: 查询方式 中断方式 所谓查询方式就是单片机一遍一遍的扫描,查看所监视的目标有没有发生变化,是一种主动式的监视方法,用一个成语可以很客观的描述:守株待兔。 所谓中断方式就是单片机不主动去监视目标,而是目标主动通知单片机状态
[单片机]
<font color='red'>STM32</font>外部中断解决方法
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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