姓名:袁永輝? ? ? 學號:17101223423
轉載自:http://mp.weixin.qq.com/s/DNAWHRqcDfcggWYt8uVHrg
【嵌牛導讀】:我們大家應該都使用過mp3播放器 但大家了解它的軟件組織結構么 本文就通過分析給大家介紹一下它的軟件組織框架
【嵌牛鼻子】:開發流程 軟件架構 驅動程序? fatfs文件系統 操作函數
【嵌牛提問】:程序員需要給文件系統提供三個對底層硬件的操作函數是什么?
【嵌牛正文】:
做過一個簡單的MP3,可以放歌曲,顯示歌曲目錄、歌曲名和歌曲作者,還可以顯示溫度和時間,今天心血來潮,分享一下它的軟件組織形式,希望對MP3感興趣的朋友有所幫助。
先上一張MP3項目開發流程圖,讓大家有個框架。
這里的重點是軟件架構,所以在上一張程序樹狀圖:
里面的程序包括各個驅動設備的驅動程序和fatfs文件系統。
在上一張主函數中調用的資源圖:
主函數,也可以說是應用程序的資源就來自這些位置,也就是說我想建一座房子材料——什么水泥、沙子、磚頭。。。都是從這里面取的。第一張項目寬架圖告訴我們要做的是去準備這些材料,然后再去考慮那些材料不好找,這就是所謂的項目開發重點。
MP3的設備驅動程序包括SD卡的驅動程序,VS1003硬件解碼芯片的驅動程序,DS1302的驅動程序,sensor的驅動程序,顯示驅動程序等。這些驅動程序存儲的位置都是單片機的flash。
針對每個驅動程序我遵循的都是三文件形式——.c+.h+.config,源文件+資源輸出+源文件配置文件,這種規范在一些大公司里面所采用的,具有較好的可移植性。對于程序員我們應盡可能做到讓程序不帶“策略”,這是軟件設計的共同目標。(再以后我將談到機制和策略的編程思想)。這樣我們寫的驅動程序才具有更高的靈活性。
這里設計的技術難點還有一個FatFs文件系統的移植。文件系統是為了明確磁盤或分區上的文件的方法和數據結構。說起文件系統必須相對于存儲設備才有意義。這里是用來管理Sd卡上面的文件。
文件系統的層次叫驅動程序要高一層,為什么這么說呢,上一張圖你就明白了:
程序員需要給文件系統提供三個對底層硬件的操作函數,我們才能利用文件系統對硬盤(disk)上面的設備進行管理和使用。
這三個函數分別是:sd_read();sd_write();RTC();他們分別是SD讀扇區,SD卡寫扇區,系統時鐘。(可能還需要提供更多的函數接口,但是SD卡讀寫扇區是必須要有的)。
文件系統接受了這三個資源便可以對Sd卡進行管理了。
應用程序就是實現了吧SD卡上面的MP3文件或者wma文件通過文件系統提供的函數接口找出來,發送到數據流設備上,也就是解碼芯片上,解碼流程我們不需要知道,這是芯片內部集成的,無需人工參與。輸出到音頻輸出設備就行了。
說到這個里,我們的MP3就可以運行了——把程序下到單片機上面,上電,應用程序就開啟了!聽歌吧~~~
補充:
這里沒有使用到操作系統,不能實現多進程同時進行工作,每次只能實現一個硬件工作。如果加入操作系統,我們可以看到的效果就會是MP3一邊顯示歌詞,溫度、時間,一邊放歌曲,操作系統是個很好玩的東西,有興趣的可以移植uCOS II,這個比較小,AVRX也可以,在做這些之前,花點時間去了解軟件層面上的各個層之間的調度關系,少走彎路。