久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
CheapFAT--嵌入式文件系統免費源碼下載
[打印本頁]
作者:
figureyang
時間:
2016-10-21 09:37
標題:
CheapFAT--嵌入式文件系統免費源碼下載
CheapFAT--嵌入式文件系統免費源碼下載
CheapFAT版本完全兼容FAT16/FAT32文件系統總共兩種格式,兼容長文件名,
兼容文字編碼GB2312/UNICODE漢字編碼(文件名完全支持中文),
實現了支持子目錄,實現了支持文件的讀取,寫入,刪除,創建等文件系統常用功能。
總之,本文件系統代碼全部使用C代碼編寫,可以移植去各種單片機平臺上面實現文件系統模塊。
本文件系統是精簡版,適合在嵌入式上使用,相當于cheap_flash_fs的精簡版。
支持多扇區操作。
(CheapFAT為我們的免費代碼,用戶可免費測試,研究,應用。并可用于商業目的!
如果您需要聯系作者,請通過! qq:292942278,E-MAIL:
292942278@qq.com.cn
取得聯系)
BUG
1.(2010-06-01)函數GetEntryFromDirectory(),解決HIDDEN目錄枚舉失敗!
2.(2010-06-05)優化FreeClusterChain()!
3.(2010-06-06)Add_A_Directory_Entry_(), seek_space()是長文件名,len++;
4.(2010-06-13)CORE_offset_add_32(), 解決末簇0xfffffff誤判錯誤!
5.Writeback_FCB_file_buffer(u8 FCBsn)-u16 TEMP=>>u32 TEMP
6.解決多個長文件名對應短文件名沖突,造成PC藍屏的問題!
7.(2010-09-12)解決GetEntryWithLongFileName()中文長文件名尾判斷失誤的BUG,計算大于0X80的字符為UNICODE,而非ASCII.
8.(2010-09-13)GetEntryFromDirectory()返回的ENTRY NAME包括Extension,Extension不放數據,廢棄
9.(2011-01-31)GetEntryFromDirectory()增加檢查CORE.offset==512目錄讀取結束的判斷
10.(2011-02-21)解決中文相對路徑在FullPathToSectorCluster()中判斷失誤的bug!
11.(2011-05-26)解決FAT32長文件名不能生成不同短文件的錯誤!
12.(2011-05-27)解決長文件名不帶擴展名或擴展名大于3個字符的生成相同短文件名的BUG!
13.(2011-05-27)解決文件名的擴展名大于3個字節,則建立長文件名!
14.(2011-07-04)解決不能刪除空目錄的BUG,!改進了空目錄的判斷!
15.(2011-07-06)解決time驅動,秒需要除2!
16.(2011-07-08)增加一個函數get_file_attribute(),用于獲取文件或目錄的讀寫時間
17.(2011-07-08)解決FullPathToSectorCluster目錄和文件不能區分的BUG!
18.(2011-08-03)解決Get_Previous_Cluster_From_Current_Cluster()不能獲取前一簇的BUG;
19.(2012-06-10)解決UPCASE對日文處理的BUG和相對路徑開始不是字符路徑不能轉換成功的BUG;
20.(2012-06-16)CurClusterInBUF_for_read,CurClusterInBUF_for_read兩變量的去除;
21.(2012-06-16)優化Update_FCB_file_buffer(),加入了判斷文件緩沖是否已緩沖完的判斷!
22.(2014-05-28)取文件ENTRY時正好遇到末簇,再offset_add_32加個offset==512的判斷!
0.png
(49.4 KB, 下載次數: 207)
下載附件
2016-10-21 12:54 上傳
CheapFAT.rar
(1.68 MB, 下載次數: 11)
2016-10-21 09:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2016-10-21 13:00
部分源碼:
/*
+FHDR------------------------------------------------------------------
Copyright (c),
Tony Yang –specialized in fat usb firmware development
Contact:qq 292942278 e-mail:tony_yang123@sina.com.cn
;;;;;;;;;;
Abstract:
$Id: main.C,v 1.12 2007/05/10 11:13:14 design Exp $
-FHDR-------------------------------------------------------------------
*/
#include "stdio.h"
#include "include\types.h"
#include "fat\fat.h"
#include "Flash_Management\Flash_Management.h"
#include "include\FAT_cfg.h"
/*
===============================================================================
函數
main();
入口:無
出口:無
===============================================================================
*/
static FILE *file2;
static u8 Fl;
void main(void)
{
#if 1
u32 cc,bb;
u16 COUNT,i;
u8 a,ATTR,j,b,mode;
u8 HANDLE1,HANDLE2;
u8 buf[65536];
u8 ddd[] = "c:\\ok\\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa我們aaaaaaaaaaaAAAAAAAAAAAaaaaaaaaa.rar";
flash_management_sysinit();
FAT_filesystem_autoformat('C',FAT32,270336*2*2);
FAT_filesystem_autoformat('D',FAT16,270336);
FAT_filesystem_initialization();
volume_inquiry('c',&cc,&bb);
printf("Volume C Capacity: %ld\n",cc);
printf("Volume C FreeSpace: %ld\n",bb);
volume_inquiry('d',&cc,&bb);
printf("Volume D Capacity: %ld\n",cc);
printf("Volume D FreeSpace: %ld\n",bb);
scanf("%c",&a);
/* 建立一個目錄CREATE_FOLDER_TEST,以測試建立目錄函數create_floder() */
create_folder("c:\\測試中文目錄");
create_file("測試中文目錄\\測試中文文件名.txt");
create_folder("aaaaaaaaaaA");
create_folder("aaaaaaaaaaA");
create_folder("C:\\AAAAAAAAAAAaaaaaa");
create_folder("D:\\AAAAAAAAAAAaaaaaa");
create_folder("c:\\CREATE_FOLDER_TEST");
create_folder("D:\\CREATE_FOLDER_TEST");
scanf("%c",&a);
/* 在目錄CREATE_FOLDER_TEST下建立一個文件,以測試建立目錄函數create_file() */
create_file("C:\\CREATE_FOLDER_TEST\\created_file.txt");
create_file("D:\\CREATE_FOLDER_TEST\\created_file.txt");
create_file("C:\\CREATE_FOLDER_TEST\\AAAAAAAAAAB");
create_file("D:\\CREATE_FOLDER_TEST\\AAAAAAAAAABaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
create_file("D:\\CREATE_FOLDER_TEST\\aa.rarc.rar.rar");
/* 重命令文件CREATE_FOLDER_TEST\\created_file.txt為"DFDFDFDFDFDFDFDFSDFSDTONY.TXT"
,以測試重命名文件函數rename_file() */
//rename_file("ok\\bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.RAR","DFDFDFDFDFDFDFDFSDFSDTONY.TXT");
//scanf("%c",&a);
/* 刪除文件CREATE_FOLDER_TEST\\created_file.txt */
//delete_file("ok\\ZZZZZZZZZZZZZZZUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.RAR");
/* 刪除目錄CREATE_FOLDER_TEST */
//delete_folder("CREATE_FOLDER_TEST");
/* 列舉CREATE_FOLDER_TEST目錄下面的所有文件,打印到屏幕 */
cd_folder("c:\\CREATE_FOLDER_TEST",0);
a = 0;
while(folder_enumeration(buf,a,&ATTR) == SUCC)
{
printf("\nreaded entry=%s Attr = %x",buf,ATTR);
if(a == 0)
a = 1;
}
scanf("%c",&a);
cd_folder(" ",1);
/* 列舉根目錄的文件,打印去屏幕 */
a = 0;
while(folder_enumeration(buf,a,&ATTR) == SUCC)
{
printf("\nreaded entry=%s Attr = %x",buf,ATTR);
if(a == 0)
a = 1;
}
scanf("%c",&a);
#if 1
/* 在OK目錄下連續寫文件,readed.rar,直到磁盤被寫滿 */
create_folder("c:\\ok");
j = 0;
COUNT = 0;
do{
for(a = 0;a < 25; a++)
{
COUNT++;
if(create_file(ddd) == SUCC)
{
printf("Create file %s successfully\n",ddd);
HANDLE1 = open_file(ddd);
if((file2 = fopen("readed.rar","rb+")) == NULL)
{
return;
}
if(HANDLE1 != FAIL)
{
printf("\nOpen File %s successfully",ddd);
do{
cc = fread(buf,1,40000,file2);
//printf("\nreaded chars = %ld ",cc);
write_file(HANDLE1,buf, cc);
if(cc < 40000)
break;
}while(1);
close_file(HANDLE1);
fclose(file2);
}
else
printf("\nOpen File %s failed",ddd);
}
else
printf("Create file %s failed\n",ddd);
ddd[6+j] ++;
}
j++;
}while(j< 20);
scanf("%c",&a);
/* 分離磁盤0中的所有文件 */
a = 0;
while(disk_enumeration(0,buf,a,&ATTR) == SUCC)
{
printf("\nreaded entry=%s Attr = %x",buf,ATTR);
if(a == 0)
a = 1;
if(ATTR & ATTR_DIRECTORY)
{
mkdir(buf+3);
continue;
}
else
{
if ((file2 = fopen(buf+3,"wb+")) == NULL)
{ printf("create file failed");scanf("%c",buf);
return;
}
else
HANDLE1 = open_file(buf);
}
if(HANDLE1 != FAIL)
do{
cc = read_file(HANDLE1,buf+400,50000);
printf("\nreaded chars = %ld ",cc);
fwrite(buf+400,1,cc,file2);
if(cc != 50000)
{
close_file(HANDLE1);
break;
}
}while(1);
else{
printf("Openfile failed!");
}
fclose(file2);
}
scanf("%c",&a);
#endif
/* DISK0 拷貝至DISK1 */
mode = 0; //設置disk_enumeration列舉mode(0)-復位至第一個文件項或目錄項開始枚舉
while(disk_enumeration(0,buf,mode,&ATTR) == SUCC) //枚舉一個目錄項或目錄項
{
printf("\nreaded entry=%s Attr = %x",buf,ATTR); //打印被枚舉的一個目錄項或目錄項
if(mode == 0)
mode = 1; //設置disk_enumeration列舉mode(1)- 繼續上一枚舉后的目錄項或目錄項
if(ATTR & ATTR_DIRECTORY)
{
buf[0]++;
create_folder(buf); //建一個disk_enumeration的目錄
continue;
}
else //復制文件
{ HANDLE1 = open_file(buf); //打開文件
buf[0]++;
create_file(buf); //在DISK1上建立文件
}
if(HANDLE1 != FAIL)
{ HANDLE2 = open_file(buf); //打開DISK1上建立的文件
if(HANDLE2 == FAIL)
break;
do{ //復制文件
cc = read_file(HANDLE1,buf+400,50000); //讀文件
printf("\nreaded chars = %ld ",cc); //打印讀文件讀取的字節數
cc = write_file(HANDLE2,buf+400,cc); //將讀取的字節寫去DISK1上的文件
if(cc != 50000) //檢查讀取的字節數,確認文件尾
{
close_file(HANDLE1); //文件復制結束,關閉文件
close_file(HANDLE2);
break;
}
}while(1);
}
else
{
printf("Openfile failed!");
}
}
scanf("%c",&a);
#else
u8 ret;
u8 handle,buffer[65536];
struct attribute ATTRIBUTE;
ret = flash_management_sysinit();
ret = FAT_filesystem_autoformat('C',FAT32,270336*2*2);
ret = FAT_filesystem_initialization();
ret = create_folder("C:\\newFolder_0");
if (ret == 0)
{
printf("newFolder_0 創建成功!\n");
}
ret = create_file("C:\\newFolder_0\\newFile_1");
if (ret == 0)
{
printf("newFolder_0\\newFile_1 創建成功!\n");
}
ret = create_file("C:\\newFolder_0\\newFile_2");
if (ret == 0)
{
printf("newFolder_0\\newFile_2 創建成功!\n");
}
ret = delete_file("C:\\newFolder_0\\newFile_1");
if (ret == 0)
{
printf("newFolder_0\\newFile_1 刪除成功!\n");
}
ret = delete_file("C:\\newFolder_0\\newFile_2");
if (ret == 0)
{
printf("newFolder_0\\newFile_2 刪除成功!\n");
}
cd_folder("C:\\newFolder_0",1);
ret = delete_folder("C:\\newFolder_0");//成功
if (ret == 0)
{
printf("newFolder_0 刪除成功!\n\n");
}
else
printf("newFolder_0 刪除失敗!\n\n");
//獲取文件的訪問,建立,修改時間
create_file("test.txt");
if(get_file_attribute("test.txt", The_FILE, &ATTRIBUTE)== SUCC)
{
printf("\n文件:test.txt\naccess time: %d-%d-%d",ATTRIBUTE.access_time_year,ATTRIBUTE.access_time_month,ATTRIBUTE.access_time_day);
printf("\ncreate time: %d-%d-%d",ATTRIBUTE.create_time_year,ATTRIBUTE.create_time_month,ATTRIBUTE.create_time_day);
printf("\ncreate time: %d:%d:%d",ATTRIBUTE.create_time_hour,ATTRIBUTE.create_time_minute,ATTRIBUTE.create_time_second);
printf("\nmodify time: %d-%d-%d",ATTRIBUTE.modify_time_year,ATTRIBUTE.modify_time_month,ATTRIBUTE.modify_time_day);
printf("\nmodify time: %d:%d:%d",ATTRIBUTE.modify_time_hour,ATTRIBUTE.modify_time_minute,ATTRIBUTE.modify_time_second);
printf("\nattr=%x",ATTRIBUTE.attr);
}
else
{
printf("FAIL");
}
//獲取目錄的訪問,建立,修改時間
create_folder("test");
if(get_file_attribute("test", The_DIRECTORY, &ATTRIBUTE)== SUCC)
{
printf("\n目錄:test\naccess time: %d-%d-%d",ATTRIBUTE.access_time_year,ATTRIBUTE.access_time_month,ATTRIBUTE.access_time_day);
printf("\ncreate time: %d-%d-%d",ATTRIBUTE.create_time_year,ATTRIBUTE.create_time_month,ATTRIBUTE.create_time_day);
printf("\ncreate time: %d:%d:%d",ATTRIBUTE.create_time_hour,ATTRIBUTE.create_time_minute,ATTRIBUTE.create_time_second);
printf("\nmodify time: %d-%d-%d",ATTRIBUTE.modify_time_year,ATTRIBUTE.modify_time_month,ATTRIBUTE.modify_time_day);
printf("\nmodify time: %d:%d:%d",ATTRIBUTE.modify_time_hour,ATTRIBUTE.modify_time_minute,ATTRIBUTE.modify_time_second);
printf("\nattr=%x",ATTRIBUTE.attr);
}
else
{
printf("FAIL");
}
create_folder("-実現不能なことばは始終で美しい-");
create_file("人生で最も意義がある時間は、苦しんでいる時間だ。.txt");
ret = create_file("-実現不能なことばは始終で美しい-.txt");
handle = open_file("-実現不能なことばは始終で美しい-.txt");
write_file(handle,buffer,1024);
create_file("Локальный IP адрес.txt");
create_file("Endere?o do IP Local.txt");
close_file(handle);
create_file("FatFsは小規模な組み込みシステム向けの汎用FATファイルシステム?モジュールです。ANSI C準拠でハードウェア?アーキテクチャには依存しないので、必要なワーク?エリアが確保できれば、8051,.txt");
create_file("正普個人-楊文斌.txt");
create_folder("蘇州正普系統軟件有限公司");
create_folder("GetEntryFromDirectory()增加檢查CORE.offset==512目錄讀取結束的判斷");
create_file("測試中文文件名.txt");
create_file("蘇州正普系統軟件有限公司.txt");
create_file("GetEntryFromDirectory()增加檢查CORE.offset==512目錄讀取結束的判斷.txt");
scanf("%c",&ret);
#endif
}
/*
+FFTR--------------------------------------------------------------------
$Log: main.C,v $
-FFTR--------------------------------------------------------------------
*/
復制代碼
作者:
figureyang
時間:
2019-12-24 08:13
Cheap_Flash_FS(普通版)(SPI_Flash版)--嵌入式SPI_FLASH文件系統免費源碼,請下載
本代碼通過仿真了一個華邦SPI_FLASH的功能,仿真了一個SPI_FLASH的4K sector erase和256 bytes page program
和read data(512 byte)的華幫SPI_FLASH(型號W25Q128BV 16MB)
向上層提供一個扇區讀寫的轉換驅動接口函數.
支持SPI_FLASH片上預分配功能(就是擦一次,寫多個扇區的功能)加快了FLASH的寫速度,且能降低內耗占用量.
其上面可以運行FAT文件系統(支持多扇區操作).
用戶使用本代碼,需要自己在SPI_flash_drv.c寫SPI FLASH的相關驅動,就可以實現移植,實現自己所需的扇區讀寫功能.
本代碼生成的spi_flash.bin是SPI_FLASH的仿真IMG,因為沒有壞塊,可直接用WIN IMG打開查看里面的文件.
本代碼可以用在U盤使用SPI_FLASH作存儲的項目上,以及其它SPI_FLASH需要扇區讀寫功能上.
用戶如果需要技術支持,請與我們聯系.
qq:292942278 e-mail:tony_yang123@sina.com.cn
Cheap_Flash_FS(普通版)(SPI_Flash版).rar
(2.68 MB, 下載次數: 5)
2019-12-24 08:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产乱码久久久久久一区二区
|
亚洲精品片
|
在线综合视频
|
美女黄网站
|
亚洲国产精品一区二区三区
|
成人精品鲁一区一区二区
|
99色综合
|
久久久精品一区二区三区四季av
|
黑人精品欧美一区二区蜜桃
|
亚洲v区
|
99精品免费久久久久久久久日本
|
免费在线观看黄视频
|
日韩网站在线观看
|
日韩成人一区
|
婷婷成人在线
|
国产91色在线 | 亚洲
|
日韩中文字幕在线视频观看
|
992tv人人草
|
看特级黄色片
|
96国产精品久久久久aⅴ四区
|
欧美一级观看
|
性生生活大片免费看视频
|
国产午夜亚洲精品不卡
|
欧美xxxx黑人又粗又长
|
久久99网站
|
男人天堂99
|
激情五月婷婷综合
|
欧美一级黄色片免费观看
|
成人国产在线视频
|
伊人久久精品
|
91免费视频观看
|
日韩免费av
|
玖玖操
|
久久精品国内
|
欧美一区成人
|
超碰在线免费公开
|
在线免费观看视频黄
|
超碰在线播
|
九九热精品在线
|
亚洲九九
|
金莲网
|