久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8880|回復: 5
打印 上一主題 下一主題
收起左側

C語言的模塊化編程的再次總結

  [復制鏈接]
跳轉到指定樓層
樓主
ID:72008 發表于 2015-1-12 19:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
假如要設計一個系統,包含多個功能模塊,比如,數碼管顯示,射頻模塊,或是液晶屏顯示模塊、按鍵、溫度檢測模塊、超聲波測距模塊、紅外線收發模塊,而單片機又涉及到,端口定義,定時器,PWMEEPROM,軟件延時,相信代碼量肯定小不了。當把這些功能代碼放在一起是,你就會發現程序的調試查錯將會是一件多么頭疼的事,自己都會把自己搞暈。怎么辦,按照功能劃分成不同的模塊。進行模塊化編程是很好的解決辦法。
可以一個模塊一個模塊的進行加載,加載一個編譯一次,這樣就很容易進行查錯。同時要修改的位置也很好確定。但是在進行模塊化編程的常出現錯誤的地方是數據類型的定義和程序段之間的數據的傳遞與調用。下面就這個問題重點的說一下。
1、根據不同的模塊制作頭文件
防重復包含
#ifndef    __XXX_H__
#define    __XXX_H__
   #endif
在編寫頭文件時,可能要定義一些數據,如果是使用unsigned int unsigned char這樣定義的,編譯時不會出現什么問題。
如果是使用已經進行過宏定義的uint uchar 進行定義,那么編譯的結果就會出現錯誤,常見的錯誤如下:
error C129: missing ';' before 'txData'
也就是在你定義的第一個變量前缺少了分號。這樣的報錯常讓人覺得莫名其妙。
即使是對應的C文件中進行了#define uint  unsigned int   #define uchar unsigned char這樣的宏定義了,依然會報錯。
如果在不同的H文件中,都進行了如下的宏定義,
#define uint  unsigned int   #define uchar unsigned char
那么程序不會報錯。
如果將數據類型的宏定義設置成一個頭文件。比如
#ifndef __TYPEDEF_H
#define __TYPEDEF_H
typedef unsigned char   uchar;
typedef unsigned int    uint;
#endif
那么,如果這個頭文件無論是包含在H文件中,還是包含在C文件中,都一樣不會報錯。
并且無論包含在哪里對編譯后的文件大小均無影響。
對于數據類型的定義,無論在那個C文件模塊中都有可能要用到,那么最好的辦法是將數據類型的宏定義,制作成一個頭文件。如上所示。然后在不同的模塊中包含這個頭文件即可。
推薦包含在不同的.H文件中。
對于要在不同的模塊中都使用的變量,推薦的處理方式是:
H文件中使用extern 聲明成外部變量,只進行聲明不進行定義,否則報錯。如:
extern uchar txData[32] ;
extern uchar rxData[32] ;
extern uchar  TX_ADDRESS[5];
extern uchar  RX_ADDRESS[5];
在要使用這些變量的C文件中,進行定義。如
uchar txData[32]={0x00} ;
uchar rxData[32]={0x00} ;
uchar  TX_ADDRESS[5]={0x00};
uchar  RX_ADDRESS[5]={0x000};
2、制作相應的.C文件,注意和頭文件的名稱相同,然后包含上面定義的頭文件即可。
#include”xxx.h”;
注意,模塊中用到的頭文件,既可以放在.H文件中也可以放在.C文件中編譯時不會因位置的不同而報錯。推薦還是包含在.H文件中。
在不同的C文件中,只要是包含了申明為外部變量的H文件,都可以對變量進行賦值,當然這個值可以是數據類型內的任何不同值。
比如先在XXX.H文件中聲明外部變量,
extern uchar txData[32] ;
extern uchar rxData[32] ;
extern uchar  TX_ADDRESS[5];
extern uchar  RX_ADDRESS[5];
可以再xxx.c文件中進行初始化
uchar txData[32]={0x00} ;
uchar rxData[32]={0x00} ;
uchar  TX_ADDRESS[5]={0x00}; // Define a static TX address
uchar  RX_ADDRESS[5]={0x000};
而在主函數中進行真正的賦值
        if (KEY1==0)
                                {
                                 txData[0] = 0;//清零
                                 txData[0] = 0xAA; // 如果按下K1  則將數據置為0xAA
                                 keycnt++ ;//按鍵計數加1
                                 if(keycnt>5)
                                 {keycnt=1;}
                                TX_ADDRESS[0] =keycnt;
                                RX_ADDRESS[0] =keycnt;
                }
前段時間遇到了這個問題,一發現有編譯錯誤就將程序放在一起然后再查錯,沒有錯誤了也就那樣了,少了以前那種韌勁,得過且過了。有些問題并不會因為退讓,而自然解決。它一直在哪里,一次次的遇到它,在真正解決它之前,不得不一次次的繞道而行。
回頭一想十年一揮間。最近一年突然感覺老了,一下子變空了。如果說10年前是一個激情的水手,駕駛著小舢板不斷的找尋下一塊陸地。無論中間經歷著什么,小舢板還是倔強的航向下一個目標。而今小舢板換成了渡輪,卻靠不了岸,動力不足也不知道岸在哪里,水手把舵交給了上天。船大了承載了更多的東西,事情不在那么單純,有些刻在心上的,歲月似乎也難以磨平。水手在甲板上靜靜的躺著,只是靜靜的躺著,什么也沒想,隨波飄蕩,期待找到曾經的激情和力量再次揚帆啟航。
借用別人的一段話,自勉一下。
如果你不能飛,就奔跑,如果你不能奔跑,就走,如果你不能走,就爬,但無論你做什么,你得一直前行。千萬不要放縱自己,給自己的止步不前找借口。對自己嚴格一點兒,時間長了,自策自律便成為一種習慣,一種生活方式,你的人格和智慧會因此變得更加完美,你的事業家庭會因此變更加美滿。
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

評分

參與人數 2黑幣 +20 收起 理由
1109 + 8 贊一個!
紅塵有你 + 12 很給力!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發
ID:70736 發表于 2016-3-1 10:35 | 只看該作者
太好的總結資料了!!!
回復

使用道具 舉報

板凳
ID:58184 發表于 2016-11-25 22:33 | 只看該作者
學習中.................
回復

使用道具 舉報

地板
ID:165212 發表于 2017-9-18 20:29 | 只看該作者
今天再看老哥你的總結,突然有了一樣的心境。很多東西失去了以往的激情,變得生活少了期待。
回復

使用道具 舉報

5#
ID:564898 發表于 2019-6-20 14:26 來自手機 | 只看該作者
受教了,以前也用過模塊化編程老出錯,一些細節很重要。
回復

使用道具 舉報

6#
ID:71883 發表于 2019-8-24 14:04 | 只看該作者
總結的很好了!!!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区精品免费 | 一区二区三区国产好的精 | 国产亚洲日本精品 | 欧美久久久久 | 在线观看亚洲专区 | 色综合久久天天综合网 | 欧美日韩综合一区 | 超碰人人做| a看片| 性国产丰满麻豆videosex | 美女网站视频免费黄 | 麻豆视频在线免费看 | 高清亚洲 | www.4hu影院| 日韩h | 人人玩人人添人人澡欧美 | 精品国产高清一区二区三区 | 国产精品美女久久久久久久网站 | 国产激情网站 | 男人的天堂一级片 | 日韩精品一区二区三区四区 | 国产精品免费一区二区三区四区 | 久久精品一区二区视频 | 美女天天操 | 91精品国产色综合久久 | 日韩综合在线 | 理论片午午伦夜理片影院 | 亚洲成人免费观看 | 国产免费播放视频 | 五月槐花香 | 五月婷婷激情 | 午夜视频在线免费观看 | 中文字幕亚洲专区 | 人人澡视频 | 久久久久电影 | 4h影视 | 中文字幕精品一区久久久久 | 国产精品亚洲成在人线 | 久久久久成人精品 | 午夜国产在线 | 亚洲一区二区三区视频 |