單片機中工程的文件結構分析

一直以來都是在原有的工程上直接新建自己的模塊文件,現在一到自己新建工程的時候就出現了各種的鏈接錯誤(當然我這裏說的是多文件的工程,單文件工程不會出現鏈接錯誤的),平常接觸的51,32,飛思卡爾K66等芯片都的工程都有自己的工程結構。簡單的51來說一般都是單文件的工程,畢竟本身的資源不多,引腳定義也少。如果你的工程在各模塊編譯沒有錯的情況下,link時出現錯誤或警告,一定是文件結構有問題。通俗來講就是亂定義。

這裏以51爲例提供一種常用的工程結構定義,絕對不會出錯。

/*新建工程後,建立一個總的.h文件可以,暫且命名爲include.h。include.h下包含工程下所有的.h文件(包括所需的C庫.h和各模塊的.h)關於寄存器的定義,#define啥的都可以放在這裏面。當然這裏面都是一些定義,最好不要有變量的定義。

每個模塊呢,原則上必須對應一個.c一個.h文件。.h包含 include.h或本身還要用到的其他C庫 還有 只有本模塊用到的寄存器和變量定義,這樣.c呢就可以只包含本模塊的.h

如果想用全局變量,就在主函數所在的文件,進行定義,然後其他模塊要用的話在模塊的.c使用extern盡心變量的跨文件引用。

這裏有個概念原來不太瞭解。在編譯時,先是各模塊自己獨立編譯產生中間代碼。所以各模塊都要包含相應的要用到的定義。(原來的誤解是程序從主函數所在的文件進行編譯,其他模塊是直接複製到主函數文件的,誤解挺大!!!)明白了這一點就很好理解爲什麼全局變量不定義在include.h下。而是在主函數上面定義了。因爲include.h下都是各模塊都要用到的定義,相當於每個模塊都有一份include.h裏面的內容。而全局變量是要整個工程只存在一份的!*/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章