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

本文讲述了在将音频播放程序从512K的stm32移植到128K的mm32芯片过程中遇到的挑战。主要问题是空间不足导致的地址错误和指针问题。通过优化编译等级、裁剪程序、删除静态数组和调整内存占用,解决了部分问题。然而,仍出现硬件错误,最终通过记录和重新赋值变量地址解决了地址混乱问题。调试过程中发现编译等级修改可能导致代码不执行,提示了子函数内部变量地址冲突可能是原因。
摘要由CSDN通过智能技术生成

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

baddbfac710ff22c249d2d88d05a389a.png

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

bc2fb6014db0153f0cdc939920550d7f.png

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

8c5c6f0fef06354af7042138ec7789db.png

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

ab8229d4a0ea11821af08471022a4e41.png

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

d80bd631e481200ab8d9ae5726578a65.png

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值