OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8081|回复: 7

stm32f4 U盘设计引起的HardFault

[复制链接]

9

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2015-3-18
在线时间
0 小时
发表于 2015-7-29 16:31:46 | 显示全部楼层 |阅读模式
5金钱
最近小弟做了一个程序,用了uocs以及emwin。
程序中,设计了U盘的插入,识别,以及数据传输。
目前U盘这个地方出现了问题,我简化为了,插入U盘然后显示出U盘的容量,然后我抽出U盘再插入并且显示U盘,这个动作重复2次,第三次的时候便会产生硬件中断。硬件中断寄存器,如下图·····



如果朋友知道,这种硬件错误产生的原因,或者可能性·麻烦大家告诉一下。
我刚开始以为是UCOSII的问题,我单任务或者不加操作ucos运行,都出现了这个问题

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2015-3-18
在线时间
0 小时
 楼主| 发表于 2015-7-29 16:36:23 | 显示全部楼层
跪求原子哥··瞅瞅····给点意见,我折腾很久了····
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-7-29 21:55:59 | 显示全部楼层
硬件错误一般都是内存溢出造成的,查下是不是有些内存用了没有及时释放掉
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-7-29 21:56:57 | 显示全部楼层
还有就是某些变量在定义的时候就要给初值,楼主可以往这个方向查找原因,比如u8 temp = 0;这样
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

9

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2015-3-18
在线时间
0 小时
 楼主| 发表于 2015-8-4 11:18:34 | 显示全部楼层
回复【3楼】八度空间:
---------------------------------
我把内存的大小进行了修改,还是出现了这个问题。
我前几天解决了这个问题,但是自己感觉莫名其妙的。
我自己是使用了EMWIN以及UCOSII  
GUIConf.c文件中
硬件的同事叫我尽量使用内存,我就这样配置的
#define USE_EXRAM  0//1使用外部RAM   有1M
//设置EMWIN内存大小   
#define GUI_NUMBYTES  (70*1024)    //#define GUI_NUMBYTES  (500*1024)
#define GUI_BLOCKSIZE 0X80  //块大小
结果U盘的介入就导致了死机,现在我换为了使用外部SRAM就没有出问题了
#define USE_EXRAM  1//使用外部RAM   有1M
//设置EMWIN内存大小   
#define GUI_NUMBYTES  (60*1024)    //#define GUI_NUMBYTES  (500*1024)
#define GUI_BLOCKSIZE 0X80  //块大小


//GUI_X_Config
//初始化的时候调用,用来设置emwin所使用的内存
void GUI_X_Config(void) {
if(USE_EXRAM) //使用外部RAM
{
U32 *aMemory = mymalloc(SRAMEX,GUI_NUMBYTES); //从外部SRAM中分配GUI_NUMBYTES字节的内存
GUI_ALLOC_AssignMemory((void*)aMemory, GUI_NUMBYTES); //为存储管理系统分配一个存储块
GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE); //设置存储快的平均尺寸,该区越大,可用的存储快数量越少
GUI_SetDefaultFont(GUI_FONT_6X8); //设置默认字体
}else  //使用内部RAM
{
U32 *aMemory = mymalloc(SRAMIN,GUI_NUMBYTES); //从内部SRAM中分配GUI_NUMBYTES字节的内存
GUI_ALLOC_AssignMemory((U32 *)aMemory, GUI_NUMBYTES); //为存储管理系统分配一个存储块
GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE); //设置存储快的平均尺寸,该区越大,可用的存储快数量越少
GUI_SetDefaultFont(GUI_FONT_6X8); //设置默认字体
}
}
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-8-5 08:03:14 | 显示全部楼层
回复【5楼】lovebird_27:
---------------------------------
我emWin分配的内存是50K,目前运行没问题,不过没加U盘功能,你上面分配的是60K,降低一点试下,其实emWin分配个40K就差不多了,不搞什么大动作
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

9

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2015-3-18
在线时间
0 小时
 楼主| 发表于 2015-8-5 15:18:43 | 显示全部楼层
回复【6楼】八度空间:
---------------------------------
问一下,emwin 分配内存或者外村 有什么区别么
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-8-6 22:08:59 | 显示全部楼层
回复【7楼】lovebird_27:
---------------------------------
没啥区别,能运行就行
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-20 17:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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