希望能够得到各位前辈的指点。<br /><br />我目前在使用SmartARM2200平台做一个仪器系统。我目前已经利用其扩展接口做了很多外接模块,现在进行系统综合时碰到一些问题。<br />我把ZLG/FS文件系统应用到SD卡上,对文件和目录的操作已经没有问题。<br />我利用SmartARM2200的USB模块,在电脑主机上,通过USB总线对ARM系统内的数据读写等也没有问题。<br />但是当我想通过USB总线操作SD卡文件时发现问题。<br /><br />在ZLG/FS 中 osFile.c中有文件系统服务任务: <br />void OSFileTask(void *pdata)<br />{ .........}<br /><br />在 ZLG_USBD13中,D13Driver.c中有控制传输处理任务:<br />void TaskSetup(void *pdata)<br />{ .......}<br /><br />我发现当这两个任务同时启动时,USB接口就无法连接,个人觉得是两个任务彼此发生冲突,但是不知道为什么会发生冲突。<br />下面是我的main.c中的部分代码,希望哪位能够指点迷津。感兴趣的,我可以将我的整个工程文件传过来,:<br /><br /><br /><br />#include "config.h" <br />#include "D13Driver.h" #include "I2C.h" <br /><br />#define PAGE_SIZE_CAT1025 16 <br />#define CMD_READ_CAT1025 0x01 <br />#define CMD_WRITE_CAT1025 0x02 <br />#define CMD_READ_SD 0x06<br />#define CMD_WRITE_SD 0x07<br /><br />OS_STK TaskStartStk[128]; <br />OS_STK ReadTaskStk[256]; <br />OS_STK WriteTaskStk[256]; <br />OS_STK ReadSDTaskStk[256];<br />OS_STK WriteSDTaskStk[256];<br />OS_STK TaskStk[1024];<br /><br />OS_EVENT *Write_Sem; OS_EVENT *Read_Sem; <br />OS_EVENT *Read_SD_Sem;<br />OS_EVENT *Write_SD_Sem;<br /><br />void Init_I2CInt(void); <br />INT16U Read_CAT1025(INT8U addr,INT8U offset,INT16U len,INT8U *recbuff);<br />INT16U Write_CAT1025(INT8U addr,INT8U offset,INT16U len,INT8U *sendbuff);<br /><br />void TaskStart(void *pdata); <br />void TaskRead(void *pdata);<br />void TaskWrite(void *pdata);<br />void TaskReadSD(void *pdata);<br />void TaskWriteSD(void *pdata);<br /><br />extern void Usb_Handler(void);<br /><br /> char *strupr(char *Str)<br />{<br /> char *cp;<br /> <br /> cp = Str;<br /> while (*cp != 0)<br /> {<br /> if (*cp >= 'a' && *cp <= 'z' )<br /> {<br /> *cp -= 'a' - 'A';<br /> }<br /> cp++;<br /> }<br /> return Str;<br />}<br /><br />*************************************************************/<br />void Init_D13Int(void)<br />{<br /> VICVectCntl1 = (0x20 | 0x0E); VICVectAddr1 = (INT32U)Usb_Handler; VICIntEnable = 1 << 14; <br />}<br /><br />/*************************************************************/<br />int main (void)<br />{<br /> OSInit(); <br /> OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[127], 5);<br /> OSStart(); <br />}<br /><br />/*************************************************************/<br />void TaskStart (void *pdata)<br />{<br />#if OS_CRITICAL_METHOD == 3 <br /> OS_CPU_SR cpu_sr; <br />#endif<br /> INT8U err,cmd;<br /> pdata = pdata; <br /> <br /> TargetInit(); I2cInit(30000); Init_I2CInt(); Init_D13Int(); err = Init_D13(); <br /> Write_Sem = OSSemCreate(0); Read_Sem = OSSemCreate(0); <br /> Read_SD_Sem = OSSemCreate(0);<br /> Write_SD_Sem = OSSemCreate(0);<br /> <br /> OSTaskCreate(TaskRead, (void *)0, &ReadTaskStk[255], 1); OSTaskCreate(TaskWrite, (void *)0, &WriteTaskStk[255], 2); OSTaskCreate(TaskReadSD, (void *)0, &ReadSDTaskStk[255], 3);<br /> OSTaskCreate(TaskWriteSD,(void *)0, &WriteSDTaskStk[255], 4); <br /> OSTaskCreate(OSFileTask, (void *)0, &TaskStk[1023], 6);<br /> if (err == 0) OSTaskCreate(TaskSetup, (void *)0, &TaskSetupStk[127], 0);<br /> <br /> for (;;)<br /> {<br /> err = ReadPort1(1, &cmd, 200); if (err == OS_NO_ERR)<br /> { if (cmd == CMD_READ_CAT1025) OSSemPost(Read_Sem); if (cmd == CMD_WRITE_CAT1025)<br /> OSSemPost(Write_Sem); if (cmd == CMD_READ_SD) OSSemPost(Read_SD_Sem); if (cmd == CMD_WRITE_SD)<br /> OSSemPost(Write_SD_Sem); } <br /> } <br /> }<br /> ....... |
|