OpenEdv-开源电子网

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

关于mini stm32的FileType_Tell函数莫名其妙的死机

[复制链接]

63

主题

305

帖子

1

精华

高级会员

Rank: 4

积分
853
金钱
853
注册时间
2012-8-3
在线时间
79 小时
发表于 2013-10-9 22:48:10 | 显示全部楼层 |阅读模式
综合试验中
const unsigned char *filetype[23]=
{
"MP1","MP2","MP3","MP4","M4A","3GP","3G2","OGG","ACC","WMA","WAV","MID","FLA",
"LRC","TXT","C  ","H  ","   ","FON","SYS","BMP","JPG","JPE"
};
u32 FileType_Tell(u8 * exName)
{
    u8 i;
    u8 t;
/*LCD_ShowChar(20,220,exName[0],16,0);
LCD_ShowChar(28,220,exName[1],16,0);
LCD_ShowChar(36,220,exName[2],16,0);*/
    for(i=0;i<32;i++)
    { 
        for(t=0;t<3;t++)if(exName[t]!=filetype[t])break; 
        if(t==3)break;
//LCD_ShowNum(20,200,i,2,16);//显示数值,调试用
    }
//LCD_ShowNum(200,200,i,2,16);//显示数值,调试  
    return 1<<i;//返回文件类型

这个函数是将扩展名的3个字符与filetype数组里的字符相比较,但是当i大于23时,在我的板子上就死机了,不知道大家的是怎么样的?
其实当i大于23时,for循环并没有停止,而filetype[23][t]是未知的内存空间,具体跑到哪就不知道了,于是就死机了。
所以for循环应该限制i < 23,这样程序就正常了。
想测试这个bug很简单,格式化sd卡的时候,给一个卷标名字,我的是NEW VOLUME,这个卷标会生成一个目录项,放在根目录最前面的位置,按照8.3规范,扩展名被识别为ME,在filetype里没有ME这个扩展名。那么i应该会等于23。当我添加在return 1<<i之前添加以下语句时,实验就正常了,奇怪的是,再删掉之后,实验居然正常了,百思不得骑姐姐。。
if(i==23) 
{
i=17;
我原本是想在SD卡中前100M的隐藏分区,做cortex-a8裸机开发,但是无意中发现ministm32用这张SD卡不能跑综合实验,手上有没有jtag一步一步调试,而且综合试验居然不能用串口监控,最后用lcd配合调试。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-9 23:11:22 | 显示全部楼层
回复【楼主位】EDA3rd:
---------------------------------
数组本来就是23大小的,i最大是22,你为什么要给23啊。。。

const unsigned char *filetype[23]
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

63

主题

305

帖子

1

精华

高级会员

Rank: 4

积分
853
金钱
853
注册时间
2012-8-3
在线时间
79 小时
 楼主| 发表于 2013-10-9 23:23:10 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
不是我给的,下载的例程原本给的就是32,应该是你写错了,现在去网盘下的还是i<32,我刚查了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-10 10:06:41 | 显示全部楼层
回复【3楼】EDA3rd:
---------------------------------
for(i=0;i<32;i++)
这里是有bug,应该是23才对。
要和filetype数组大小一致才正确。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-12 11:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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