您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 我加了个SD卡的FatFs文件系统后,代码老是出... 
本帖共有1865个阅读者
发表帖子 发表投票 回复主题
我加了个SD卡的FatFs文件系统后,代码老是出现这个问题EXCAUSE 0x24
笑溜溜(论坛游民)
笑溜溜
头衔:社区公民
帮派:无帮无派
帖数:84
金钱:819
积分:107
注册时间:2012/12/13
10信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
SD卡配置速度我都已经设置成最大了,CLK_DIV为00
下面的图是DSP从SD卡中读取文件的代码,这个在for循环中,不读到文件末位一直执行for循环。
我测了这个for循环中各个函数的执行时间
f_read(133行)---0x31668,
RC4EnDeCrypt(134行)--0x47068,
把数组buffer(L1空间中4096大小)中数据存放到SDRAM中(136行)--0x1a023。
这个时间RC4EnDeCrypt函数花的最多。我没做过DSP的优化,现在要求的读SD卡然后数据处理再放到SDRAM中时间还是长,我想的是把RC4EnDeCrypt函数用汇编语言来实现,可是这个RC4EnDeCrypt函数我看一共也没几句。
void RC4EnDeCrypt(RC4KEY *rc4, unsigned char *data, long len)
{
ST_INT4 x = rc4->x, y = rc4->y;
ST_INT4 sx, sy;
ST_INT4 *state = &rc4->state[0];

while (len--)
{
x++;
x &= 0xFF;                    
sx = state[x];
y += sx;
y &= 0xFF;                    
sy = state[y];
state[y] = sx;
state[x] = sy;
*data++ ^= state[(unsigned char)(sx + sy)];                      
}
rc4->x = x;
rc4->y = y;
}


上传的图片
  201362516143703.jpg [ 29.68 KB 650×184 ] (缩略时请点击查看原图)

 


这个函数最大的时间消耗是在*data++ ^= state[(unsigned char)(sx + sy)];  我看的那个profile上中的显示,没编过这个DSP的汇编,这个就是写成汇编这个函数执行能省下时间吗?



「该帖子被 笑溜溜 在 2013-06-25 16:17:08 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2013/6/25 16:14:04
笑溜溜(论坛游民)
笑溜溜
头衔:社区公民
帮派:无帮无派
帖数:84
金钱:819
积分:107
注册时间:2012/12/13
11信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
我想的是在for循环中组成一个乒乓操作的DMA数据处理方式,我想这样会节约世间了吧

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2013/6/25 16:58:34
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
12信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
通常用core搬运数据会消耗大量资源,如果profile中最大的消耗不是停留在标识位等待。你在工程选项中,把优化开关打开,还有cache也打开,通常代码会自动优化,提升一些性能。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/6/25 23:50:37
笑溜溜(论坛游民)
笑溜溜
头衔:社区公民
帮派:无帮无派
帖数:84
金钱:819
积分:107
注册时间:2012/12/13
13信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
优化我使能了那个Enable optimiztation,后面的有个速度和大小范围的滑动条我保持默认,后来下载完程序后程序死在了这个while(!Mdma_flag);这个是不是你说的停留的标识位,有没有只对某一段函数进行优化的设置

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2013/6/26 14:00:46
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
14信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
通常开优化后代码死掉,主要是你的一些延时函数被优化了,你用这个语句放到你不希望优化的函数前面
#pragma optimize_off

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/6/27 9:55:28
15
2
2/2
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154581 Call, 1 Queries, Processed in 0.015625 second(s),