一段DSP代码,两个问题,敬请指点

[复制链接]
2438|2
 楼主| ahong007 发表于 2009-3-6 16:01 | 显示全部楼层 |阅读模式
一段DSP代码,两个问题,敬请指点<br /><br /><br />Uint16&nbsp;data_buff[256]={0x1234,0x5678,0xaa55,0x55aa};<br />Uint16&nbsp;FAT32data_buff[512];<br />unsigned&nbsp;long&nbsp;lb2bb(unsigned&nbsp;char&nbsp;*dat,unsigned&nbsp;char&nbsp;len);<br />void&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;Uint32&nbsp;i,&nbsp;temp=0;<br />&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;BPB_temp=0x00;<br />&nbsp;&nbsp;&nbsp;struct&nbsp;FAT32_Init_Arg&nbsp;*arg;<br />&nbsp;&nbsp;&nbsp;struct&nbsp;FAT32_BPB&nbsp;*bpb=(struct&nbsp;FAT32_BPB&nbsp;*)(FAT32data_buff);<br />&nbsp;&nbsp;&nbsp;CSL_init();<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SdRead_Sector(temp,data_buff);&nbsp;&nbsp;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;asm(&quot;&nbsp;nop&nbsp;&quot;);<br /><br />&nbsp;if(FAT32data_buff[0]==0xeb&nbsp;&&&nbsp;FAT32data_buff[2]==0x90)<br />&nbsp;&nbsp;&nbsp;&nbsp;asm(&quot;&nbsp;nop&nbsp;&quot;)&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;BPB_temp=lb2bb((bpb-&gtBPB_FATSz32),4);<br />&nbsp;&nbsp;&nbsp;&nbsp;arg-&gtFATsectors&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=BPB_temp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;asm(&quot;&nbsp;nop&nbsp;&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A处<br />&nbsp;arg-&gtFirstDirClust&nbsp;&nbsp;&nbsp;=lb2bb((bpb-&gtBPB_RootClus)&nbsp;&nbsp;&nbsp;,4);<br />&nbsp;asm(&quot;&nbsp;nop&nbsp;&quot;);<br />&nbsp;arg-&gtBytesPerSector&nbsp;&nbsp;=lb2bb((bpb-&gtBPB_BytesPerSec),2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B处&nbsp;<br />&nbsp;asm(&quot;&nbsp;nop&nbsp;&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//每扇区字节数<br />&nbsp;arg-&gtSectorsPerClust&nbsp;=lb2bb((bpb-&gtBPB_SecPerClus)&nbsp;,1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C处<br />&nbsp;asm(&quot;&nbsp;nop&nbsp;&quot;);<br />&nbsp;arg-&gtFirstFATSector&nbsp;&nbsp;=lb2bb((bpb-&gtBPB_RsvdSecCnt)&nbsp;,2)+arg-&gtBPB_Sector_No;//第一个FAT表扇区<br />&nbsp;asm(&quot;&nbsp;nop&nbsp;&quot;);<br /><br />1&nbsp;&nbsp;&nbsp;&nbsp;程序执行到A处,BPB_temp类型为unsigned&nbsp;char&nbsp;,数值0x792,而结构体的arg-&gtFirstDirClust类型为unsigned&nbsp;int&nbsp;,数据值变为0x1C12,不是所希望的0x792,不知道怎么回事,请指点一下。<br />2&nbsp;&nbsp;&nbsp;&nbsp;程序执行A,B,都没有问题,但是执行到C就抛飞,与硬件仿真器自动断开,lb2bb在A和B都没有问题而在C处怎么存在问题?<br />3&nbsp;&nbsp;&nbsp;&nbsp;Arg和bpb都是512字节的变量,CMD中设置-heap大小为1000字节。<br />
hitajian 发表于 2009-3-9 17:52 | 显示全部楼层

FAT32_Init_Arg

&nbsp;&nbsp;&nbsp;struct&nbsp;FAT32_Init_Arg&nbsp;*arg;<br /><br />看起来像是一个FAT32的初试化参数表,&nbsp;贴出的代码里面<br />我只看到&nbsp;&nbsp;&nbsp;&quot;&nbsp;struct&nbsp;FAT32_Init_Arg&nbsp;*arg;&quot;<br />那么只是说明arg是指向一个结构体&quot;FAT32_Init_Arg&quot;的指针,<br />此时arg的值是不确定的.<br />指向别的数据区域里,结果自然会不对.
r_jw 发表于 2009-3-10 10:51 | 显示全部楼层

回复

文件系统数据结构中定义的是8位,如果DSP是16时char型数据就占用一个地址,32位时,数据接口的宽度为16位也会占用一个地址。char型数据运算前清掉高8位就可以。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

120

主题

337

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部