野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 50002|回复: 12

野火大哥,关于使用中等容量STM32芯片下载MP3程序时出现的问题

[复制链接]
发表于 2013-5-2 20:59:07 | 显示全部楼层 |阅读模式
野火大哥:
             今天上午和您在QQ里交流了一下在中等容量STM32芯片里下载MP3程序,出现了程序卡在hardfault硬中断的现象,然而我通过在汇编中修改栈的大小依然出现了该问题。
             后来我参考了别人关于内存分配的代码,将内存分配的代码移植到我的MP3程序中,但是仍然是这个问题。想向野火大哥求教。
            文件太打了,无法附在后面了,如果野火大哥高兴看看的话,我可以用QQ传给您,谢谢!

回复

使用道具 举报

发表于 2013-5-2 22:47:49 | 显示全部楼层
出现硬件上访?

这个尝试自己单步调试来解决吧……看看是不是栈用完了,或者哪个数据越界了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-4 22:43:24 | 显示全部楼层
山外メ雲ジ 发表于 2013-5-2 22:47
出现硬件上访?

这个尝试自己单步调试来解决吧……看看是不是栈用完了,或者哪个数据越界了

单步调试之后发现,初始结束系统时钟之后,就在startup_stm32f10x_md()卡住了
回复 支持 反对

使用道具 举报

发表于 2013-5-4 22:46:29 | 显示全部楼层
sandonion 发表于 2013-5-4 22:43
单步调试之后发现,初始结束系统时钟之后,就在startup_stm32f10x_md()卡住了

不同的stm32芯片,启动代码文件是不相同的哦。

startup_stm32f10x_cl.s 互联型的器件,STM32F105xx,STM32F107xx
startup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_hd_vl.s 大容量的STM32F100xx
startup_stm32f10x_ld.s 小容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_ld_vl.s 小容量的STM32F100xx
startup_stm32f10x_md.s 中容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_md_vl.s 中容量的STM32F100xx
startup_stm32f10x_xl.s FLASH在512K到1024K字节的STM32F101xx,STM32F102xx,STM32F103xx
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-4 22:49:51 | 显示全部楼层
山外メ雲ジ 发表于 2013-5-2 22:47
出现硬件上访?

这个尝试自己单步调试来解决吧……看看是不是栈用完了,或者哪个数据越界了

山外大哥,在KEIL MDK3.80中可以查看变量分配的地址吗?我到网上找了很久,都没有找到,有什么资料可以分享不?
回复 支持 反对

使用道具 举报

发表于 2013-5-4 23:03:40 | 显示全部楼层
sandonion 发表于 2013-5-4 22:49
山外大哥,在KEIL MDK3.80中可以查看变量分配的地址吗?我到网上找了很久,都没有找到,有什么资料可以分 ...

在调试界面 & 一下变量就可以了
例如变量a 的地址是 &a
回复 支持 反对

使用道具 举报

发表于 2013-5-4 23:07:23 | 显示全部楼层
sandonion 发表于 2013-5-4 22:49
山外大哥,在KEIL MDK3.80中可以查看变量分配的地址吗?我到网上找了很久,都没有找到,有什么资料可以分 ...

全局变量,可以在 map 文件上查看得到: data 就是 数据,例如下面的 core_clk_mhz 的地址是  0x1fff0004

QQ截图20130504230604.jpg
回复 支持 反对

使用道具 举报

发表于 2013-5-4 23:28:07 | 显示全部楼层
山外メ雲ジ 发表于 2013-5-4 22:46
不同的stm32芯片,启动代码文件是不相同的哦。

startup_stm32f10x_cl.s 互联型的器件,STM32F105xx,S ...

哈哈,山外大哥,我把这资料的出处转了过来,方便大家了解情况:

http://www.firebbs.cn/forum.p ... age=1&extra=#pid277
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-5 21:23:28 | 显示全部楼层
山外メ雲ジ 发表于 2013-5-4 23:07
全局变量,可以在 map 文件上查看得到: data 就是 数据,例如下面的 core_clk_mhz 的地址是  0x1fff0004 ...

谢谢山外大哥的悉心点拨。
我按照您教的,发现了像tbl_lower 这个变量地址为0x080 3051a,而中等容量芯片ROM只有128k(即最大地址到0x0801 ffff),已经超出了地址范围了。
并且通过调试,发现当加载cc936.c(文件系统的简体中文支持)的相关函数时,会出现超出ROM地址的问题。
难道说,中等容量的STM32不能直接进行文件系统自带的简体中文支持的移植?
回复 支持 反对

使用道具 举报

发表于 2013-5-5 21:42:12 | 显示全部楼层
sandonion 发表于 2013-5-5 21:23
谢谢山外大哥的悉心点拨。
我按照您教的,发现了像tbl_lower 这个变量地址为0x080 3051a,而中等容量芯片 ...

在工程选项里可以设置 rom 的大小的啊,这样就不会超出ROM(超出会编译不通过)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-5 21:47:17 | 显示全部楼层
山外メ雲ジ 发表于 2013-5-5 21:42
在工程选项里可以设置 rom 的大小的啊,这样就不会超出ROM(超出会编译不通过)

可我的文件编译是能通过的啊,只是在用jtag硬件仿真时会卡在hardfault中断里。
您说的设置ROM是在哪里设置啊,能截个屏,让我学下吗?
回复 支持 反对

使用道具 举报

发表于 2013-5-5 21:59:20 | 显示全部楼层
sandonion 发表于 2013-5-5 21:47
可我的文件编译是能通过的啊,只是在用jtag硬件仿真时会卡在hardfault中断里。
您说的设置ROM是在哪里设 ...

QQ截图20130505215820.png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-6 17:52:08 | 显示全部楼层
fire 发表于 2013-5-5 21:59

谢谢,但是我的参数设置的是对的,不过还是要谢谢您。现在我已经证实了是中等芯片的ROM本身不够容纳这个程序的静态变量的问题
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 16:09 , Processed in 0.043189 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表