久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2971|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

filerw.c周立功的SD卡操作

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:72519 發(fā)表于 2015-1-23 03:53 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

  1. #include  "config.h"
  2. #include  "string.h"
  3. /*
  4. *********************************************************************************************************
  5. ** 函數(shù)名稱: SetISR()
  6. ** 函數(shù)功能: 設(shè)置向量中斷
  7. ** 入口參數(shù): no    中斷號(hào)
  8. **    pri   中斷優(yōu)先級(jí)
  9. **    isr_func 中斷服務(wù)函數(shù)入口地址
  10. ** 出口參數(shù): 操作是(1)否(0)成功
  11. ** 調(diào)試說(shuō)明:
  12. *********************************************************************************************************
  13. */
  14. uint8 SetISR(uint32 no, uint32 pri, uint32 isr_func)
  15. {
  16.     if(no > 31) return 0;
  17.     if(pri > 15) return 0;
  18.    
  19.     *(volatile uint32*)((&VICVectAddr0)+no) = isr_func;        //設(shè)置中斷服務(wù)函數(shù)
  20.     *(volatile uint32*)((&VICVectPri0)+no)= pri & 0x0F;        //設(shè)置中斷優(yōu)先級(jí)
  21.     VICIntSelect &= ~(1<<no);
  22.     VICIntEnable = 1<<no;
  23.    
  24.     return 1;
  25. }
  26. /*********************************************************************************************************
  27. ** 函數(shù)名稱: file_init
  28. ** 功能描述: 文件系統(tǒng)初始化
  29. **
  30. ** 輸 入:
  31. **
  32. ** 輸 出: RETURN_OK:成功
  33. **      
  34. ** 全局變量: 無(wú)
  35. ** 調(diào)用模塊:
  36. ********************************************************************************************************/
  37. uint8 File_init(void)
  38. {
  39. DiskInit();//磁盤初始化
  40. FileInit();//文件初始化
  41. SetISR(24,4,(uint32)MCI_Handler);//設(shè)置SD卡的中斷
  42. IRQEnable();//中斷使能
  43. AddFileDriver(SDCammand);//添加文件驅(qū)動(dòng)
  44. return 0;
  45. }
  46. /*********************************************************************************************************
  47. ** 函數(shù)名稱: dir_creat
  48. ** 功能描述: 創(chuàng)建目錄
  49. **
  50. ** 輸 入: path:路徑名,dirname目錄名
  51. **
  52. ** 輸 出: RETURN_OK:成功
  53. **      
  54. ** 全局變量: 無(wú)
  55. ** 調(diào)用模塊:
  56. ********************************************************************************************************/
  57. uint8 Dir_creat(char *path,char *dirname)
  58. {
  59. uint8  state=255;
  60. ChangeDir(path);//打開(kāi)文件夾
  61. state=MakeDir(dirname);
  62. AllCacheWriteBack();
  63. FileClose(0);
  64. return state;
  65. }
  66. /*********************************************************************************************************
  67. ** 函數(shù)名稱: dir_delete
  68. ** 功能描述: 刪除目錄
  69. **
  70. ** 輸 入: path:路徑名,dirname目錄名
  71. **
  72. ** 輸 出: RETURN_OK:成功
  73. **      
  74. ** 全局變量: 無(wú)
  75. ** 調(diào)用模塊:
  76. ********************************************************************************************************/
  77. uint8 Dir_delete(char *path,char *dirname)
  78. {
  79. uint8  state=0;
  80. ChangeDir(path);//打開(kāi)文件夾
  81. state=RemoveDir(dirname);
  82. AllCacheWriteBack();
  83. FileClose(0);
  84. return state;
  85. }
  86. /*********************************************************************************************************
  87. ** 函數(shù)名稱: FindFile
  88. ** 功能描述: 獲取目錄中的文件名
  89. **
  90. ** 輸 入: DirFilename:路徑名,i:路徑中的第幾個(gè)文件,F(xiàn)ileName:返回的文件名
  91. **
  92. ** 輸 出: RETURN_OK:成功
  93. **        其它參考fat.h中關(guān)于返回值的說(shuō)明
  94. ** 全局變量: 無(wú)
  95. ** 調(diào)用模塊: GetDirClusIndex,GetDiskInfo
  96. ********************************************************************************************************/
  97.    /*     uint8 FindFile(char *DirFilename,char i,char *FileName)
  98. {
  99.     uint32 ClusIndex=0;
  100.     uint8 Rt=0, Drive=0;
  101.     Disk_Info *Disk;
  102.     FDT *FileFDT;
  103.     char Path[15]={0};//是為了文件、路徑小寫(xiě)變大寫(xiě)
  104.     strcpy(Path,DirFilename);
  105.     strupr(Path);// 變?yōu)榇髮?xiě) //
  106.    
  107.     Rt = PATH_NOT_FIND;//=0x0e
  108.     ClusIndex = GetDirClusIndex(Path);//abc空空空空空
  109.     if (ClusIndex != BAD_CLUS)
  110.     {
  111.         Drive = GetDrive(Path);
  112.         Disk = GetDiskInfo(Drive);
  113.         Rt = NOT_FIND_DISK;
  114.         if (Disk != NULL)
  115.         {
  116.             Rt = RETURN_OK;
  117.             Disk->PathClusIndex = ClusIndex;
  118.         }
  119.     }
  120.    GetFDTInfo(FileFDT,Drive,ClusIndex,i);
  121.    Lcd_chinese_16(1,160,FileFDT->Name,0);
  122.    strcpy(FileName,FileFDT->Name);
  123.     return Rt;
  124. }
  125. */
  126. /*********************************************************************************************************
  127. ** 函數(shù)名稱: File_creat
  128. ** 功能描述: 創(chuàng)建文件
  129. **
  130. ** 輸 入: path:路徑名,filename文件名
  131. **
  132. ** 輸 出: RETURN_OK:成功
  133. ********************************************************************************************************/
  134. uint8 File_creat(char *path,char *filename)
  135. {
  136. uint8  state=255;
  137. ChangeDir(path);//打開(kāi)文件夾
  138. state=MakeDir(filename);
  139. AllCacheWriteBack();
  140. FileClose(0);
  141. return state;
  142. }
  143. /*********************************************************************************************************
  144. ** 函數(shù)名稱: File_delete
  145. ** 功能描述: 刪除文件
  146. **
  147. ** 輸 入: path:路徑名,filename文件名
  148. **
  149. ** 輸 出: RETURN_OK:成功
  150. **      
  151. ** 全局變量: 無(wú)
  152. ** 調(diào)用模塊:
  153. ********************************************************************************************************/
  154. uint8 File_delete(char *path,char *filename)
  155. {
  156. uint8  state=0;
  157. ChangeDir(path);//打開(kāi)文件夾
  158. state=RemoveFile(filename);
  159. AllCacheWriteBack();
  160. FileClose(0);
  161. return state;
  162. }
  163. /*********************************************************************************************************
  164. ** 函數(shù)名稱: file_find
  165. ** 功能描述: 獲取目錄中的指定文件類型的文件名
  166. **
  167. ** 輸 入: Dirname:路徑名,fileextname:文件擴(kuò)展名,filename:存放返回的文件名
  168. **
  169. ** 輸 出: RETURN_OK:成功
  170. **        其它參考fat.h中關(guān)于返回值的說(shuō)明
  171. ** 全局變量: 無(wú)
  172. ** 調(diào)用模塊: GetDirClusIndex,GetDiskInfo
  173. ********************************************************************************************************/
  174. uint8 File_find(char *Dirname,char *fileextname,char (*filename)[12])
  175. {   MY_FILE FileInfo[MAX_OPEN_FILES];
  176.     MY_FILE *fp;
  177.     HANDLE Rt;
  178.     FDT FileFDT;
  179.     uint32 i;
  180.     uint8 temp;
  181.     char NAME[12]={0};
  182.     ChangeDir(Dirname);
  183.     /* 查找空閑文件登記項(xiàng) */
  184.     for (Rt = 0; Rt < MAX_OPEN_FILES; Rt++)
  185.     {
  186.         if (FileInfo[Rt].Flags == 0)
  187.         {
  188.             break;
  189.         }
  190.     }
  191.    
  192.     if (Rt < MAX_OPEN_FILES)
  193.     {
  194.         fp = FileInfo + Rt;
  195.       
  196.         /* 獲取目錄開(kāi)始簇號(hào)和文件名 */
  197.         fp->DirClus = _GetFDTInfo(fp->Name,fileextname);
  198.         if (fp->DirClus < BAD_CLUS)
  199.         {
  200.             fp->Drive = GetDrive(fileextname);     /* 獲取文件所在邏輯盤號(hào) */
  201.            
  202.            
  203.    
  204.     i = 0;
  205.     /*if (FileName[0] == DEL_FDT)
  206.     {
  207.         FileName[0] = ESC_FDT;
  208.     }*/
  209.     while (1)
  210.     {
  211.         temp = GetFDTInfo(&FileFDT, fp->Drive, fp->DirClus, i);
  212.         if (temp != RETURN_OK)
  213.         {temp = RETURN_OK;
  214.             break;
  215.         }
  216.         if (FileFDT.Name[0] == EMPTY_FDT)
  217.         {
  218.             temp = NOT_FIND_FDT;
  219.             break;
  220.         }
  221.         if ((FileFDT.Attr & ATTR_VOLUME_ID) == 0)
  222.         if((FileFDT.Name[8]==fileextname[0])&&(FileFDT.Name[9]==fileextname[1])&&(FileFDT.Name[10]==fileextname[2])&&(FileFDT.Name[0]!=0xe5))
  223.         {strcpy(NAME,FileFDT.Name);
  224.          NAME[11]='\0';
  225.          strcpy(*(filename++),NAME);   
  226.         }
  227.         i++;
  228.     }
  229.             /* 獲取文件信息 */
  230.            // if (FindFDTFileInfo(&FileFDT, fp->Drive, fp->DirClus, fp->Name,(*filename)[12]) == RETURN_OK)
  231.             /*{
  232.                 if ((FileFDT.Attr & ATTR_DIRECTORY) == 0)
  233.                 {
  234.                     fp->Flags = FILE_FLAGS_READ;
  235.                     fp->FileSize = FileFDT.FileSize;
  236.                     Sd_File_size = FileFDT.FileSize;//記下打開(kāi)文件的大小
  237.                     fp->FstClus = FileFDT.FstClusLO | (uint32)FileFDT.FstClusHI << 16;//把FDT中的信息給MY_FILE
  238.                     fp->Clus = fp->FstClus;
  239.                     fp->Offset = 0;//清零偏移量
  240.                     return Rt;
  241.                 }
  242.             }*/
  243.         }
  244.     }

  245.     return RETURN_OK;
  246. }
  247. /*********************************************************************************************************
  248. ** 函數(shù)名稱: file_open
  249. ** 功能描述: 打開(kāi)文件
  250. **
  251. ** 輸 入: Dirname:路徑名
  252.            Filename:文件名
  253.            RWtype:打開(kāi)方式
  254. **
  255. ** 輸 出: 文件句柄如果為0xff表示打開(kāi)失敗
  256. **      
  257. ** 全局變量: 無(wú)
  258. ** 調(diào)用模塊: GetDirClusIndex,GetDiskInfo
  259. ********************************************************************************************************/
  260. HANDLE File_open(char *Dirname,char *Filename, char *RWtype)
  261. {
  262.     HANDLE FHandle;//文件句柄,代表一個(gè)打開(kāi)的文件
  263.     char  DirName[12]={0};
  264.     char  FileName[12]={0};//文件名
  265.     char  RWType[3]={0};
  266.     uint8  state=0;
  267.     strcpy(DirName,Dirname);
  268.     strcpy(FileName,Filename);
  269.     strcpy(RWType,RWtype);
  270. state=ChangeDir(DirName);//打開(kāi)文件夾                                    
  271. FHandle = FileOpen(FileName,RWType);//打開(kāi)文件,并得到文件句柄,F(xiàn)Handle實(shí)際是現(xiàn)在打開(kāi)的第幾個(gè)文件,也是MY_FILE FileInfo[FHandle]的編號(hào)
  272. if(FHandle==Not_Open_FILE) return (int8)state;//文件打開(kāi)的狀態(tài),打開(kāi)錯(cuò)誤則退出并返回值

  273. return FHandle;
  274. }
  275. /*********************************************************************************************************
  276. ** 函數(shù)名稱: file_read
  277. ** 功能描述: 讀文件
  278. **
  279. ** 輸 入:FHandle:文件句柄
  280.            Whence:讀文件的位置
  281.            offset:讀文件的字節(jié)數(shù)
  282.            Readbuf:讀回?cái)?shù)據(jù)存放位置
  283. **
  284. ** 輸 出: RETURN_OK:成功
  285. ** 全局變量: 無(wú)
  286. ** 調(diào)用模塊: GetDirClusIndex,GetDiskInfo
  287. ********************************************************************************************************/
  288. uint8 File_read(HANDLE FHandle,uint8 Whence,int32 offset,char *Readbuf)
  289. {
  290.     uint8  state;
  291. state=FileSeek(FHandle,0,Whence);//文件的內(nèi)容指針指向文件開(kāi)始后的0字節(jié)                             
  292. state=FileRead(Readbuf,offset,FHandle);//讀取文件內(nèi)容,讀10個(gè)字節(jié)
  293. return state;
  294. }
  295. /*********************************************************************************************************
  296. ** 函數(shù)名稱: file_close
  297. ** 功能描述: 關(guān)閉文件文件
  298. **
  299. ** 輸 入:FHandle:文件句柄
  300. **
  301. ** 輸 出: RETURN_OK:成功
  302. ** 全局變量: 無(wú)
  303. ** 調(diào)用模塊: GetDirClusIndex,GetDiskInfo
  304. **
  305. ** 作 者:
  306. ** 日 期: 2007年10月1日
  307. **-------------------------------------------------------------------------------------------------------
  308. ** 修改人:
  309. ** 日 期:
  310. **------------------------------------------------------------------------------------------------------
  311. ********************************************************************************************************/
  312. uint8 File_close(HANDLE FHandle)
  313. {
  314.     uint8  state;
  315. state=FileClose(FHandle);//關(guān)閉文件,釋放句柄,相當(dāng)于文件初始化
  316. //FileCloseAll();//關(guān)閉所有文件
  317.     AllCacheWriteBack();//所有文件的緩存數(shù)據(jù)寫(xiě)回到文件  
  318.     //RemoveFileDriver(0);//移除文件驅(qū)動(dòng),相當(dāng)于文件磁盤初始化
  319. return state;
  320. }
  321. /*********************************************************************************************************
  322. ** 函數(shù)名稱: file_write
  323. ** 功能描述: 讀文件
  324. **
  325. ** 輸 入:FHandle:文件句柄
  326.            Whence:讀文件的位置
  327.            offset:讀文件的字節(jié)數(shù)
  328.            Readbuf:讀回?cái)?shù)據(jù)存放位置
  329. **
  330. ** 輸 出: RETURN_OK:成功
  331. ** 全局變量: 無(wú)
  332. ** 調(diào)用模塊: GetDirClusIndex,GetDiskInfo
  333. **
  334. ** 作 者:
  335. ** 日 期: 2007年10月1日
  336. **-------------------------------------------------------------------------------------------------------
  337. ** 修改人:
  338. ** 日 期:
  339. **------------------------------------------------------------------------------------------------------
  340. ********************************************************************************************************/
  341. uint8 File_write(HANDLE FHandle,uint8 Whence,int32 offset,char *Readbuf)
  342. {
  343.     uint8  state;
  344. state=FileSeek(FHandle,0,Whence);//文件的內(nèi)容指針指向文件開(kāi)始后的0字節(jié)                             
  345. state=FileWrite(Readbuf,offset,FHandle);//讀取文件內(nèi)容,讀10個(gè)字節(jié)
  346. return state;
  347. }
  348. /*********************************************************************************************************
  349. ** 函數(shù)名稱: file_read
  350. ** 功能描述: 讀文件
  351. **
  352. ** 輸 入: DirFilename:路徑名
  353. **
  354. ** 輸 出: RETURN_OK:成功
  355. **        其它參考fat.h中關(guān)于返回值的說(shuō)明
  356. ** 全局變量: 無(wú)
  357. ** 調(diào)用模塊: GetDirClusIndex,GetDiskInfo
  358. **
  359. ** 作 者:
  360. ** 日 期: 2007年10月1日
  361. **-------------------------------------------------------------------------------------------------------
  362. ** 修改人:
  363. ** 日 期:
  364. **------------------------------------------------------------------------------------------------------
  365. ********************************************************************************************************/
  366. /*uint8 File_read(void)
  367. {
  368.     HANDLE FHandle;//文件句柄,代表一個(gè)打開(kāi)的文件
  369.     char  FileName[12]={"15153.txt"};//文件名
  370.     char  Readbuf[21]={1};//讀取的文件內(nèi)容
  371.     uint8  state=0;
  372. //AddFileDriver(SDCammand);//添加文件驅(qū)動(dòng)
  373. //ChangeDir("..");//當(dāng)前目錄
  374. state=ChangeDir("a:\\abc");//打開(kāi)文件夾
  375. //ChangeDir("131");//打開(kāi)子文件夾                                    
  376. FHandle = FileOpen(FileName,"R");//打開(kāi)文件,并得到文件句柄,F(xiàn)Handle實(shí)際是現(xiàn)在打開(kāi)的第幾個(gè)文件,也是MY_FILE FileInfo[FHandle]的編號(hào)
  377. if(FHandle==Not_Open_FILE)return 1;//文件打開(kāi)的狀態(tài),打開(kāi)錯(cuò)誤則退出并返回值
  378. FileSeek(FHandle, 0, SEEK_SET);//文件的內(nèi)容指針指向文件開(kāi)始后的0字節(jié)                             
  379. FileRead(Readbuf,10, FHandle);//讀取文件內(nèi)容,讀10個(gè)字節(jié)
  380. FileClose(FHandle);//關(guān)閉文件,釋放句柄,相當(dāng)于文件初始化
  381. //FileCloseAll();//關(guān)閉所有文件                                       
  382.     AllCacheWriteBack();//所有文件的緩存數(shù)據(jù)寫(xiě)回到文件  
  383.     //RemoveFileDriver(0);//移除文件驅(qū)動(dòng),相當(dāng)于文件磁盤初始化
  384.     //Lcd_chinese_16(1,160,Readbuf,0);
  385.   return state;
  386. }*/
復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国内精品视频在线观看 | 成人av电影在线 | 国产成人福利在线 | 精品一区二区在线视频 | 国产综合在线视频 | 欧美亚洲激情 | 日日夜夜视频 | 在线免费观看视频黄 | 精品久久久久久久人人人人传媒 | 国产成人精品一区二区三区在线 | 成人不卡| 欧美日韩国产在线观看 | 精品欧美乱码久久久久久 | 成人av网页| 久热免费 | 久久久激情视频 | 国产成人精品一区二区三区在线 | 在线视频国产一区 | 国产99久久精品一区二区永久免费 | 成人久久18免费网站麻豆 | 成人高清视频在线观看 | 91国内精品久久 | 天天操网 | 久久精品天堂 | 欧美色视频免费 | 欧美国产一区二区三区 | 国产丝袜一区二区三区免费视频 | 国外成人在线视频 | 久久久久久精 | 免费成人高清在线视频 | 欧美5区| 一级看片免费视频囗交动图 | 久久99精品久久久久久国产越南 | 久久中文字幕一区 | 国产成人精品亚洲日本在线观看 | av手机免费在线观看 | 亚洲成人第一页 | 国产三级精品三级在线观看四季网 | 色伊人久久| 日韩成人高清 | av网站免费观看 |