所使用的mm32芯片是32 位 ARM Cortex TM-M3 的处理器内核,128K 字节的闪存程序存储器,20K 字节的 SRAM。在进行音频程序移植的过程当中,音频程序原本是在512K的stm32的单片机上运行,而现在是在mm32上运行,那所谓的连接错误,其实就是空间不足的体现。由于空间不足,导致内部的很多地址全部都是错误的,导致指针根本无法使用。在前面调编译等级的方法其实就是让编译器自动优化代码,使代码减少占用的空间,系统会自动删除掉系统认为不重要的代码。在代码不严谨的情况下,很容易出很大的问题。

找到了所存在的问题,那么就对整个程序进行裁剪,整个程序实现的功能非常的多,有各种音频的切换,现在只是使用一个固定的音频进行播放,所以有很多不需要的功能。并且程序中有非常多的静态数组,静态数组在内存中位于栈区,在定义的时候就已经给分配好了大小,这样的定义非常占用内存空间,所以重点就是找出不用的静态数组,将其删除。

通过OUTPUT.map这个文件中的相关信息,看齐内存占用的大小,来减少空间的占用。先将其空间降低到128K以内。

在进行调试发现还是会产生硬件错误,直接停在下图HardFault_Handler的B位置。

在细细查看,发现还是地址问题,指针还是会产生变化。首先想到的是内存占用的问题,可能还是占用空间过大,于是在进行程序删减,找到一切能删除的代码,进行注释。到最后占用flash有大约70K。在进行调试,发现还是不能继续向下进行,地址依然会改变。于是只能重新定义一个变量,先记录下来当前变量的地址,在函数调用它之前,重新赋值一下,发现问题可以解决。接下来,慢慢对不符合的地方进行重新赋值,发现,整个程序已经可以正常运行。

编译等级修改之后,导致整个程序无法正确执行,在进行调试的时候,发现很多的代码都不走,也很难发现程序所存在的问题,导致走了很多的弯路。在程序中间又修改了很多,所以只能够重新进行移植。在地址发生改变的问题当中,我发现在执行子函数的时候,内部定义的一些变量的空间与原来的地址发生了冲突,导致了地址混乱发生错误。目前的处理方法主要就是,先把地址保存一下,在进行重新赋值。可能程序在压栈的时候出现了问题,也可能是程序跑飞等原因。

stm32程序跑飞_mm32芯片使用心得(三)音频播放程序修改相关推荐

  1. 教你如何找到导致程序跑飞的指令

    调试嵌入式程序时,你是否遇到过程序跑飞最终导致硬件异常中断的问题?遇到这种问题是否感觉比较难定位?不知道问题出在哪里,没有办法跟踪?尤其是当别人的程序踩了自己的内存,那就只能哭了:( 今天在论坛上看有 ...

  2. AUTOSAR实战教程 - 软件集成调试_程序跑飞一招解决

    工欲善其事必先利其器. AUTOSAR工程如此庞大的代码量,如果没有一个科学.程式化的方法来调试程序, 那么程序跑飞之后使用三板斧:打断点.看变量.对比正常代码和异常代码的变动,这显然是不能够胜任工作 ...

  3. 困扰一周的奇葩bug:重复相似代码多,导致单片机程序跑飞

    今天是个好日子,困扰一周的bug终于解决了,迫不及待将这个奇葩问题分享给各位朋友~ 硬件环境: 国产MCU:华大HC32L130 问题描述: 最近做一款基于Modbus协议的三通道温度采集模块,程序设 ...

  4. 单片机长时间程序跑飞_单片机程序跑飞的三种现象、原因及解决方法

    今天在编写单片机程序的时候,由于中断服务程序写的不好,导致单片机程序总是跑飞,最后费了好长时间,花了很大功夫才找到问题原因,由此总结了单片机程序跑飞的三种现象.原因及解决方法. 一.数组越界(数组溢出 ...

  5. MPC5748G开发笔记-----MPC5748G程序跑飞uSDHCDriverIRQHandler

    MPC5748G程序跑飞uSDHCDriverIRQHandler 文章目录 MPC5748G程序跑飞uSDHCDriverIRQHandler 前言 一.跑飞时的状态 二.利用异常中断获取位置 1. ...

  6. 嵌入式开发——程序跑飞原因总结

    前言 在嵌入式软件开发中,程序跑飞是一个比较棘手的问题.为什么说棘手,那是因为当程序跑飞时,往往没有任何错误信息报出来,Log停止的地方通常也不是出现问题的地方,因此这让我们很难定位问题. 基于以上原 ...

  7. 【跑飞、死机】单片机 msp430程序跑飞原因和解决方式积累

    目录 单片机 msp430程序跑飞原因和解决方式积累 MSP430 数组填充越界引起的栈溢出 导致程序跑飞 [单片机重启]MSP430重启/频繁重启/跑飞 原因分析 单片机 msp430程序跑飞原因和 ...

  8. C语言 跑飞位置,DSP程序跑飞的问题 - C2000™︎ 微控制器论坛 - C2000 微控制器 - E2E™ 设计支持...

    Other Parts Discussed in Thread:MOTORWARE TI的各位专家大家好: 第一次发帖,请多多包涵.本人使用的是F28027 C2000 Piccolo LaunchP ...

  9. MSP430程序跑飞原因

    MSP430单片机的程序有时候容易出现跑飞的情况,导致运行不正常.常见原因总结如下: 没有设置停止看门狗,也没有及时喂狗 没有定义中断函数,但又开启了对应的中断,发生中断时,找不到中断函数入口 供电电 ...

  10. 单片机程序跑飞死机的几种原因

    在使用单片机过程中,经常会出现程序运行一段时间后,不能够正常相应的情况.一般分为软件原因和硬件原因,其中硬件原因比较容易查,软件原因就较为复杂. 软件导致单片机死机的原因 1.指针异常 指针未初始化或 ...

最新文章

  1. python数据分析常用包_python可视化数据分析常用图大集合(收藏)
  2. [IOS] 'Double' is not convertible to 'CGFloat'
  3. OCM备考 三. Managing Database Availability 之RMAN高级操作
  4. 从数据仓库系统对比看Hive发展前景
  5. python中none算变量吗_在python中对变量判断是否为None的三种方法总结
  6. STL总结之deque
  7. 如何做好一个流量站?
  8. cocos2d 字体颜色
  9. 网页设计html对联样式代码,纯CSS做对联广告代码
  10. 批量图片缩小工具,JPG|PNG|BMP图片缩小工具
  11. 简单点教你python文件处理
  12. 关于Git使用详细教程
  13. 快速搭建仓储管理系统
  14. 夜神模拟器+adb命令+图解
  15. 手把手教你做音乐播放器(八)桌面小工具(上)
  16. System Verilog 视频缩放图像缩放 vivado 仿真
  17. 给十年前手机刷Linux,一台十年前的手机,竟然能刷遍市面上所有的手机操作系统 zt...
  18. 区块链+AI,恰似双剑合璧?
  19. Swing 美化工具包
  20. 菲律宾联合银行推出加密货币ATM

热门文章

  1. NGUI组件参数总结
  2. 6、Java包的命名与划分
  3. 什么是Code Review
  4. [收藏】正确使用SqlConnection对象,兼谈数据库连接池
  5. Vmware vSphere5.0网络连接服务器配置常见问题
  6. 【转译】玩黑莓你必须了解的10件事
  7. Tips for ASP.NET Application Performance Enhancement
  8. 随机森林的基分类器可否由决策树替换为线性分类器或者K-NN?
  9. Java基础,使用双循环嵌套,实现输出1-1000之间所有的素数,并统计有多少个
  10. html怎么插入jq背景,HTML 全屏背景的方法