?? flash.txt
字號(hào):
/*************************************************************************************************/
// flash的分配
//
// 編程日志 第 0 - 9 扇區(qū)(10)
// 報(bào)警日志 第 10 - 19 扇區(qū)(10)
// 操作日志 第 20 - 29 扇區(qū)(10)
// 任務(wù) 第 30 - 7069 扇區(qū)(64 *110 = 7040)
// 其它數(shù)據(jù) 第 7070 - 7679 扇區(qū)(用來(lái)存放別的數(shù)據(jù))
// 備份區(qū) 第 7680 - 8126 扇區(qū)(要是以上的扇區(qū)壞了就從這個(gè)備份區(qū)中找一個(gè)好的扇區(qū)映射過(guò)去)
// 文件索引區(qū) 第 8128 - 8191 扇區(qū)(64個(gè)扇區(qū), 主文件索引表8128 - 8159(32個(gè)扇區(qū)), 從文件索引表達(dá)式8160 - 8191(32個(gè)扇區(qū)), 只要文件索引區(qū)中有一個(gè)扇區(qū)是壞的就認(rèn)為這個(gè)flash不可用)
//
// 每個(gè)文件索引項(xiàng)是兩個(gè)字節(jié)的長(zhǎng)度.
//
// 文件索引表分為主文件索引表和從文件索引表,
// 如果主文件索引壞了,則用從文件索引表
//
// flash一共有8192個(gè)扇區(qū), 每個(gè)扇區(qū)對(duì)應(yīng)一個(gè)文件索引項(xiàng), 每個(gè)文件索引項(xiàng)占用兩個(gè)字節(jié), 而每個(gè)扇區(qū)最大的容量是512個(gè)字節(jié),
// 則文件索引表所在占用的扇區(qū)的個(gè)數(shù)為:
// 8192 * 2 / 512 = 32 個(gè)扇區(qū)
//
//
// 文件索引項(xiàng)描述符
// --------------------------------------------------
// | 15 | 14 | 13 - 0 |
// |----------|-------------|-----------------------|
// | 0 | 0 | 對(duì)應(yīng)扇區(qū)的編號(hào) |
// |----------|-------------|-----------------------|
//
//
// 備份區(qū)對(duì)應(yīng)的文件索引項(xiàng)描述符
// --------------------------------------------------
// | 15 | 14 | 13 - 0 |
// |----------|-------------|-----------------------|
// |使用標(biāo)志 | 好壞標(biāo)志 | 對(duì)應(yīng)扇區(qū)的編號(hào) |
// |----------|-------------|-----------------------|
// | 0:未用 |0 : 好 | |
// | 1:已用 |1 : 壞 | |
// --------------------------------------------------
//
//
/*************************************************************************************************/
1: unsigned int mk_fs_flash(void)
//建立文件系統(tǒng)
//剛開始時(shí)認(rèn)為每個(gè)扇區(qū)都是好的.
//因此將文件索引表中的每一項(xiàng)都指向每一個(gè)扇區(qū)(第i項(xiàng)指向第i個(gè)扇區(qū),如: 第0項(xiàng)的值為0x0, 第1項(xiàng)的值為0x1, 第2項(xiàng)的值為0x2)
//建立主從文件索引表, 主文件索引表從第8128 - 8159扇區(qū)(32個(gè)扇區(qū)), 從文件索引表從8160 - 8191個(gè)扇區(qū)(32個(gè)扇區(qū)),
//只要文件索引區(qū)(8128 - 8191)中有一個(gè)扇區(qū)是壞的就認(rèn)為這個(gè)flash不可用
//變量: file_index_startblock 表示文件系統(tǒng)的所在位置的起始扇區(qū)
//返回值如果為DATAFLASH_OK(0x1)就認(rèn)為是成功
//否則返回DATAFLASH_BUSY(0x0) 或 DATAFLASH_ERROR(0x2)
2: unsigned int check_mk_fs(void)
//這個(gè)函數(shù)是為了測(cè)試用的,為了測(cè)試mk_fs_flash()建立的文件索引表是不是真的寫對(duì)了.
//
//檢驗(yàn)建立的文件系統(tǒng)是否是正確的
//返回值如果不為DATAFLASH_OK就認(rèn)為是錯(cuò)的
3: unsigned int read_fs_index(unsigned char *fs_buf, unsigned int block_number)
//功能:
// 讀文件索引表中指定的扃區(qū)
//參數(shù):
// fs_buf: 將要讀出來(lái)的內(nèi)容存放在這個(gè)緩沖區(qū)中
// block_number: 是指要讀的文件索引表的扇區(qū)號(hào), block_number = 0 ,表示讀文件索引表的第0個(gè)扇區(qū),也就是讀第8128個(gè)扇區(qū).
// block_number = i ,表示讀文件索引表的第i個(gè)扇區(qū),也就是讀flash的第 8128 + i 個(gè)扇區(qū)
// 先從主文件索引表讀出當(dāng)前的扇區(qū)
// 如果讀出成功(能正常的讀出來(lái),并且算出的cs和它原來(lái)的cs相等),則返回 1
// 否則續(xù)繼讀從文件索引表相應(yīng)的扃區(qū)
// 如果讀出成功(能正常的讀出來(lái),并且算出的cs和它原來(lái)的cs相等),則返回 1
// 否則返回0
4: unsigned int write_fs_index(unsigned char *fs_buf,unsigned int block_number)
//功能:
// 寫文件索引表中的扇區(qū)
// block_number: 是指要寫的文件索引表的扇區(qū)號(hào), block_number = 0 ,表示寫文件索引表的第0個(gè)扇區(qū),也就是寫第8128個(gè)扇區(qū).
// block_number = i ,表示寫文件索引表的第i個(gè)扇區(qū),也就是寫flash的第 8128 + i 個(gè)扇區(qū)
// 先寫主文件索引表相應(yīng)的扇區(qū)
// 再寫從文件索引表相應(yīng)的扇區(qū)
// 如果有一個(gè)以上能寫成功則返回 1
// 否則返回0
5: unsigned int read_flash_block(unsigned char *buf, unsigned int block_number)
//讀flash的一個(gè)扇區(qū)
//buf: 將讀出來(lái)的內(nèi)容存放在這個(gè)緩沖區(qū)中
//block_number: 要讀的扇區(qū)號(hào)
//成功則返回DATAFLASH_OK (0x1)
//否則返回0x0 或 0x2
6: unsigned int write_flash_block(unsigned char *buf, unsigned int block_number)
//寫flash的一個(gè)扇區(qū)
//buf: 要寫的內(nèi)容
//block_number: 要寫到哪一個(gè)扇區(qū)中去
//成功則返回 DATAFLASH_OK (0x1)
//否則返回 DATAFLASH_BUSY(0x0) 或 DATAFLASH_ERROR(0x2) 或 0x3(寫時(shí)校驗(yàn)出錯(cuò))
//具體流程:
// 等待就緒,如果在一段的時(shí)間內(nèi)沒有就緒則錯(cuò)誤返回
// 寫flash.如果寫不成功,則返回
// 等待就緒,如果在一段的時(shí)間內(nèi)沒有就緒則錯(cuò)誤返回
// 發(fā)一個(gè)校驗(yàn)命令,如果不成功如果不一樣, 不成功則錯(cuò)誤返回
// 比較要寫的內(nèi)容和已寫的內(nèi)容是不是一樣, 不一樣則錯(cuò)誤返回
7: unsigned int find_empty_block(void)
/功能:
// 從備份區(qū)(7680 - 7679)中找出一塊好的未用的扇區(qū)
// 它對(duì)應(yīng)于文件索引表中的第30塊扇區(qū)所有的數(shù)據(jù)項(xiàng)(0 - 255)
// 和第31塊扇區(qū)中的第0 - 191項(xiàng)(192 - 255 這64項(xiàng)對(duì)應(yīng)于文件表所占用的扇區(qū))
//返回值:
// 如果能找到則將這個(gè)扇區(qū)置為已用,返回這個(gè)塊扇區(qū)的編號(hào)
// 否則返回0
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -