freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于arm與大容量nandflash的gnss數(shù)據(jù)采集系統(tǒng)設計與實現(xiàn)-資料下載頁

2024-11-12 15:37本頁面

【導讀】用相結(jié)合后的產(chǎn)物。它可以根據(jù)應用需求對軟硬件進行適當裁剪,以滿足應用系統(tǒng)對功。能、可靠性、成本、體積等的需求。作為一種新興的嵌入式RISC微處理器,ARM微處理。器目前已經(jīng)成為嵌入式系統(tǒng)中應用最為廣泛的微處理器。GPS定位導航技術與計算機技術的融合在近幾年來現(xiàn)代信息通信領域內(nèi)發(fā)展迅速。本文設計開發(fā)了一款基于ARM處理器與GPS接收模塊的GNSS數(shù)據(jù)采集系統(tǒng)。其次,設計實現(xiàn)了GPS模塊與ARM處理器的通信功能、人機交互的控制功能。各模塊的設計包括接口驅(qū)動程序和應用程序兩部分。GPS定位衛(wèi)星數(shù)據(jù),并通過RS-232接口向處理器傳輸數(shù)據(jù);處理器處理數(shù)據(jù)并進行存儲;統(tǒng)未來改進目標的設想。本系統(tǒng)采用的是現(xiàn)成的硬件平臺,所以要做的工作主要是軟件

  

【正文】 址、頁地址、和塊地址以及上下半頁地址實現(xiàn)的。只是實際讀寫時采用以頁為單位讀寫比較方便。 文件管理模塊 在軟件方案論證中已經(jīng)論述,本系統(tǒng)的文件管理系統(tǒng)是根據(jù)本課題需求和硬件特點 XXX 大學畢業(yè)設 計(論文)報告用紙 第 15 頁 共 43 頁 編寫的,沒有采用現(xiàn)有的文件系統(tǒng),如 FATFS, FAT16, FAT32, YAFF2 等。該文件系統(tǒng)的主要功能包括文件的 flash 格式化,文件系統(tǒng)的初始化,文件的 創(chuàng)建,讀,寫,刪除等基本操作,但沒有實現(xiàn)目錄的創(chuàng)建功能。它主要分為 3個模塊:驅(qū)動接口模塊,數(shù)據(jù)組織結(jié)構(gòu)模塊,應用層模塊。 ⑴ 驅(qū)動接口模塊 驅(qū)動接口模塊主要是由若干個 Nand Flash 讀、寫、擦除等基本驅(qū)動函數(shù)組成,這些驅(qū)動函數(shù)已經(jīng)在 NAND FLASH 模塊中分析過,這里不再累述。 ⑵ 數(shù)據(jù)組織結(jié)構(gòu)模塊 文件管理指的主要是以文件的形式管理 Nand Flash 內(nèi)部的數(shù)據(jù)信息。對于整個Flash 有個與之對應的文件信息結(jié)構(gòu)體,它包含文件的總數(shù),文件的總?cè)萘?,存儲介質(zhì)的剩余空間和一個文件結(jié)構(gòu)體數(shù)組。如下所 示: typedef __packed struct { u8 FileNum。//文件總數(shù) File FileIndex[FILECOUNT]。 u32 AllFileSize。 //所有文件大小 單位 BYTE u32 FreeSize。//剩余空間 單位 BYTE }FsInfo。 其中的結(jié)構(gòu)體數(shù)組 File FileIndex[FILECOUNT] 中的每一個元素是一個具體的文件, File 也是一種結(jié)構(gòu)體類型,包括每個文件的大小,創(chuàng)建時間,起始頁地址,塊地址等 如下: typedef __packed struct { u32 FileSize。 //文件大小 單位 BYTE Time FileTime。//文件創(chuàng)建時間 u16 block_begin。 //起始塊地址 u16 block_end。 //結(jié)束塊地址 u8 page_begin。 //起始頁地址 u8 page_end。 //結(jié)束頁地址 }File。 其中的 Time 是一個時間結(jié)構(gòu)體,用來指定該文件的創(chuàng)建時間: typedef __packed struct { u16 year。//年 XXX 大學畢業(yè)設 計(論文)報告用紙 第 16 頁 共 43 頁 u8 month。//月 u8 day。 //日 u8 hour。//小時 u8 minute。//分鐘 u8 second。//秒 }Time。 那么每次運行程序是怎么加載這些文件信息的呢?首先看一個文件系統(tǒng)的初始化函數(shù) u8 Fs_Init(void),該函數(shù)用來初始化文件系統(tǒng),得到 Flash 內(nèi)部的文件信息,代碼如下: u8 Fs_Init(void) { ReadPage(0,0,FsInfoCache)。 NandFileInfo = (FsInfo*)FsInfoCache。 return 0。 } 函數(shù)很簡單,但卻很有技巧性。 ReadPage(0,0,FsInfoCache)函數(shù)是從 Flash 的第 0塊,第 0 頁讀取上次程序運行時存儲的文件信息,不過讀取出來的信息是字符串格式的,怎樣將這些信息加載到 FsInfo 結(jié)構(gòu)體中呢?先看 FsInfoCache,該變量是一個全局型字符串變量,它的大小和 FsInfo 結(jié)構(gòu)體的大小相同,定義如下: u8 FsInfoCache[FsInfo_SIZE]。 當上一次保存的文件信息讀入 FsInfoCache后,通過一個類型強制轉(zhuǎn)換,將它轉(zhuǎn)換為 FsInfo* 類型并賦給一個 FsInfo* 型的指針變量 NandFileInfo,這樣 NandFileInfo中的結(jié)構(gòu)體信息就加載到了最新的文件系統(tǒng)的信息。 要得正確文件系統(tǒng)的信息離不開一個很重要的關鍵字: __packed。在上述 3個幾個體定義的時候都加上了這個關鍵字,它的作用主要是該屬性可以使得變量或者結(jié)構(gòu)體成員使用最小的對齊方式,即對變量是一字節(jié)對齊,使數(shù)據(jù)在內(nèi)存中連續(xù)存放。這樣在進行類型強制轉(zhuǎn)換的時候就不會出錯。 ⑶ 應用層模塊 應用層模塊主要是一些格式化文 件系統(tǒng)、初始化文件系統(tǒng)、創(chuàng)建文件、讀寫文件的函數(shù)接口。主要有 7個函數(shù),分別為: u8 Fs_Format(void)。 //格式化文件系統(tǒng) u8 Fs_Init(void)。 //文件系統(tǒng)初始化 u8 Fs_CreateFile(void)。 //創(chuàng)建一個新的文件 u8 Fs_Write(u8 filenumber,u8* Buffer,u16 WriteNum)。 //寫文件,參數(shù) 1為文件列號,參數(shù) 2為要寫入數(shù)據(jù)所在緩沖區(qū),參數(shù) 3 為要寫入 XXX 大學畢業(yè)設 計(論文)報告用紙 第 17 頁 共 43 頁 的字節(jié)數(shù); u8 Fs_Read(u8 FileName,u8* Buffer)。 //讀文件,參數(shù) 1 為文件序列號,參數(shù) 2 為要讀入數(shù)據(jù)所在緩沖區(qū),參數(shù) 3為要寫入的字節(jié)數(shù); u16 Fs_GetFileNum(void)。 //獲取總的文件數(shù) u32 Fs_GetFileSize(u32 number)。 //獲取指定文件的大小 下面分析幾個比較重要的函數(shù),文件系統(tǒng)第一次使用首先要進行格式化,首先對 flash 全部擦除,然后填充文件結(jié)構(gòu)體。格式化函數(shù) Fs_Format(void)代碼如下: u8 Fs_Format(void) { u16 i。 FsInfo *format = (FsInfo*)(FsInfoCache)。 for(i = 0。i1024。i++) //擦除整個 FLASH Erase_Cluster(i)。 formatFileNum = 0。 //文件總數(shù)為 0 formatAllFileSize = 0。 //文件總大小為 0 formatFreeSize = NAND_FREE_SIZE。 //文件當前空閑容量 for(i = 0。iFILECOUNT。i++) //初始化每一個文件,初始化起始地址,創(chuàng) 建時間 { formatFileIndex[i].block_begin = 1。 formatFileIndex[i].page_begin = 0。 formatFileIndex[i].block_end = 1。 formatFileIndex[i].page_end = 0。 formatFileIndex[i].FileSize = 0。 formatFileIndex[i]. = 0。 formatFileIndex[i]. = 0。 formatFileIndex[i]. = 0。 formatFileIndex[i]. = 0。 formatFileIndex[i]. = 0。 formatFileIndex[i]. = 0。 } WritePage(0,0,FsInfoCache)。 //更新文件信息 memset(FsInfoCache,0,FsInfoCache_SIZE)。 return 0。 } XXX 大學畢業(yè)設 計(論文)報告用紙 第 18 頁 共 43 頁 格式化以后就可以進行文件系統(tǒng)初始化了,然后就是創(chuàng)建文件: u8 Fs_CreateFile(void),創(chuàng)建文件主要要作的工作是分配新的文件號,并設置文件創(chuàng)建時間,這個時間采用的是 GPS時間。代碼如下: u8 Fs_CreateFile(void) { NandFileInfoFileNum += 1。//文件數(shù)加 1 CurrentFileNum = NandFileInfoFileNum。//當前操作的文件序列號 if(CurrentFileNum = 1) { NandFileInfoFileIndex[CurrentFileNum 1].block_begin =1。 //將文件的開始地址保存 NandFileInfoFileIndex[CurrentFileNum 1].page_begin = 0。 } else if(NandFileInfoFileIndex[CurrentFileNum 2].page_end != 31) { NandFileInfoFileIndex[CurrentFileNum1].block_begin=NandFileInfoFileIndex[CurrentFileNum 2].block_end。//將文件的開始地址保存 NandFileInfoFileIndex[CurrentFileNum1].page_begin=NandFileInfoFileIndex[CurrentFileNum 2].page_end + 1。 } else { NandFileInfoFileIndex[CurrentFileNum1].block_begin=NandFileInfoFileIndex[CurrentFileNum 2].block_end + 1。//將文件的開始地址保存 NandFileInfoFileIndex[CurrentFileNum 1].page_begin = 0。 } //設置文件的創(chuàng)建時間,采用的時間是 GPS 時間 NandFileInfoFileIndex[CurrentFileNum1].=2020+10*CharToInt([4]+CharToInt([5])。 NandFileInfoFileIndex[CurrentFileNum1].=10*CharToInt( [2]) + CharToInt([3])。 NandFileInfoFileIndex[CurrentFileNum1].=10*CharToInt( [0]) + CharToInt([1])。 NandFileInfoFileIndex[CurrentFileNum1].=10*CharToInt( [0]) + CharToInt([1])。 NandFileInfoFileIndex[CurrentFileNum1].=10*CharToInt( XXX 大學畢業(yè)設 計(論文)報告用紙 第 19 頁 共 43 頁 [2]) + CharToInt([3])。 NandFileInfoFileIndex[CurrentFileNum1].=10*CharToInt( [4]) + CharToInt([5])。 Erase_Cluster(0)。 WritePage(0,0,FsInfoCache)。//更新最新的文件系統(tǒng)信息 return 0。 } 當創(chuàng)建好文件以后就可以對文件進行寫了,寫之前先獲取文件的起始地址,即起始頁地址,起始塊地址。接著寫數(shù)據(jù),同時更新文件的相關信息,如總文件大小,被操作的文件的大小,結(jié)束地址等信息。下位機文件操作流程圖如圖 所示: 圖 文件管理程序流程圖 代碼如下: u8 Fs_Write(u8 filenumber,u8* Buffer,u16 WriteNum) 否否否判斷參數(shù)不合法否第一個文件 ?上一文件的結(jié)束頁地址是否為 31 ?是設置寫起始地址是設置寫起始地址該文件是否是新創(chuàng)建文件 ?是該文件的頁結(jié)束地址是否為 31 ?設置寫起始地址是設置寫起始地址是開始結(jié)束設置寫起始地址 XXX 大學畢業(yè)設 計(論文)報告用紙 第 20 頁 共 43 頁 { u16 block,page,Write。 u8 *p = Buffer。 if((Buffer == NULL) || WriteNum = 0 || filenumber1) return 1。 if(filenumber == 1) { block =1。//如果是第一個文件,則起始塊地址為 1,頁地址為 0 page = 0。 } else if((NandFileInfoFileIndex[filenumber 1].page_end) != 31) //如果上該
點擊復制文檔內(nèi)容
醫(yī)療健康相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1