|
发表于 2011-7-7 09:59:26
|
显示全部楼层
我把这一段相关源的代码贴出来,便于分析:
unsigned char code Rev[16] = //ASCII字符高低位倒序转换表
{
0x0c,0x8c,0x4c,0xcc,0x2c,0xac,0x6c,0xec,0x1c,0x9c, //'0' ~ '9'
0x42,0xb2,0x0a,0xea,0x82,0x6a, //"BMP" "WAV"
};
for (k = 3; k != 0; k--) //预载文件名于Buffer,以便进行比较
{
Buffer[k + 7] = Rev[k + File_type]; //根据扩展名,载入"BMP"或"WAV"的倒序码
Buffer[k - 1] = Rev[n%10]; //依次载入个十百位的倒序码
n = n / 10; //十进制右移一位
}
Cluster_count = 100; //限制根目录搜索深度,防止数据错误导致死读
Next_cluster.all = 2; //根目录从簇号2开始
do //按簇链依次进行文件搜索
{
Sector_count = 0;
Addr.all = Dat_base + (Next_cluster.all << Shift_bits); //计算簇基址
do //搜索簇内各个扇区
{
SD_send_read_cmd(); //发送读取指令
Addr.all += 512; //计算下一扇区地址
Wait_start_token(); //等待SD卡响应
for (j = 16; j != 0; j--) //搜索扇区内各个文件记录
{
for (i = 0; i != 12; i++) //比较文件名的11个字符
{ //只比较文件名前三位数字和扩展名,其它忽略
if (SD_spi_read() != Buffer && (i & 0x07) < 3) break;
}
if (i == 12) //匹配成功 |
|