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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

嵌入式C語言進階之道(C語言實踐經驗總結,詳解模塊化,代碼優化等)

  [復制鏈接]
跳轉到指定樓層
樓主
嵌入式C語言實踐經驗總結。對于在實際工作當中, 你不再是獨自編寫程序,你要和小組內的成員之間分工合作,你
要學會模塊化編程、要寫出更規范更安全的代碼、做更合理的優化、減少更多的 bug。所有
的這些,都迫使你必須更徹底的理解嵌入式 C 的語法結構,數據細節,與硬件打交道的特
性,使得你必須時時考慮硬件與 C 的對應關系并養成良好的編程習慣。

二.模塊化編程
  當你在一個項目小組做一個相對較復雜的工程時,意味著你不再獨自單干。你需要和你的小組成員分工合作,一起完成項目,這就要求小組成員各自負責一部分工程。比如你可能只是負責通訊或者顯示這一塊。這個時候,你就應該將自己的這一塊程序寫成一個模塊,單獨調試, 留出接口供其它模塊調用。最后,小組成員都將自己負責的模塊寫完并調試無誤后,由項目組長進行組合調試。像這些場合就要求程序必須模塊化。模塊化的好處是很多的,不僅僅是便于分工,它還有助于程序的調試,有利于程序結構的劃分,還能增加程序的可讀性和可移植性。
  初學者往往搞不懂如何模塊化編程,其實它是簡單易學,而且又是組織良好程序結構行之有效的方法之一.
  本文將先大概講一下模塊化的方法和注意事項,最后將以初學者使用最廣的keil c編譯器為例,給出模塊化編程的詳細步驟。
  模塊化程序設計應該理解以下概述:
(1)  模塊即是一個.c 文件和一個.h 文件的結合,頭文件(.h)中是對于該模塊接口的聲明;  
  這一條概括了模塊化的實現方法和實質: 將一個功能模塊的代碼單獨編寫成一個.c文件,然后把該模塊的接口函數放在.h文件中.舉例:假如你用到液晶顯示, 那么你可能會寫一個液晶驅動模塊,以實現字符、漢字和圖像的現實,命名為: led_device.c,該模塊的.c文件大
體可以寫成:
/*************************************************************************
*                       液晶驅動模塊  
*
* 文    件: lcd_device.c
* 編 寫 人: 小瓶蓋
* 描    述:液晶串行顯示驅動模塊,提供字符、漢字、和圖像的實現接口
* 編寫時間: 2009.07.03
* 版    本:1.2
*************************************************************************/
#include …

//定義變量
unsigned char flag;  //局部變量
static unsigned char value;//全局變量

//定義函數
//這是本模塊第一個函數,起到延時作用,只供本模塊的函數調用,所以用到static關鍵字
修飾
/********************延時子程序************************/
static void delay (uint us)   //delay time
{}
//這是本模塊的第二個函數,要在其他模塊中調用
/*********************寫字符程序**************************
** 功能:向LCD寫入字符
** 參數:dat_comm 為1寫入的是數據,為0寫入的是指令
         content 為寫入的數字或指令
******************************************************/
void wr_lcd (uchar dat_comm,uchar content)
{}
……
……
/***************************** END Files***********************************/
注:此處只寫出這兩個函數,第一個延時函數的作用范圍是模塊內,第二個,它是其它模塊需要的。為了簡化,此處并沒有寫出函數體.

  .h文件中給出模塊的接口.在上面的例子中, 向LCD寫入字符函數:wr_lcd (uchar dat_comm,uchar content)就是一個接口函數,因為其它模塊會調用它,那么.h文件中就必須將這個函數聲明為外部函數(使用extrun關鍵字修飾),另一個延時函數:void delay (uint us)只是在本模塊中使用(本地函數,用static關鍵字修飾),因此它是不需要放到.h文件中的。
  .h文件格式如下:
/*****************************************************************************
*                    液晶驅動模塊 頭文件
*
* 文    件: lcd_device.h
* 編 寫 人: 小瓶蓋
* 編寫時間: 2010.07.03
* 版    本:1.0
******************************************************************************
***/
//聲明全局變量
extern unsigned char value;
//聲明接口函數
extern void wr_lcd (uchar dat_comm,uchar content);      //向LCD寫入字符
……
/***************************** END Files***********************************/
這里注意三點:
  1. 在keil 編譯器中,extern這個關鍵字即使不聲明,編譯器也不會報錯,且程序運行良好,但不保證使用其它編譯器也如此。強烈建議加上,養成良好的編程規范。
  2. .c文件中的函數只有其它模塊使用時才會出現在.h文件中,像本地延時函數static
void delay (uint us)即使出現在.h文件中也是在做無用功,因為其它模塊根本不去調用它,實際上也調用不了它(static關鍵字的限制作用)。
  3.注意本句最后一定要加分號”;”,相信有不少師兄遇到過這個奇怪的編譯器報錯:
error C132: 'xxxx': not in formal parameter list,這個錯誤其實是.h的函數聲明的最后少了分號的緣故。

模塊的應用:假如需要在LCD菜單模塊lcd_menu.c中使用液晶驅動模塊lcd_device.c中的函數void wr_lcd (uchar dat_comm,uchar content),只需在LCD菜單模塊的lcd_menu.c文件中加入液晶驅動模塊的頭文件lcd_device.h即可.

完整的pdf格式文檔51黑下載地址:
嵌入式C語言進階之道.pdf (815.14 KB, 下載次數: 98)


評分

參與人數 2黑幣 +60 收起 理由
pcbbb2024 + 10 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:883031 發表于 2021-2-26 10:58 | 只看該作者
樓主用心了。我就不客氣了,拿了。
回復

使用道具 舉報

板凳
ID:29702 發表于 2024-5-10 13:25 | 只看該作者
謝謝樓主的分享!下載學習ix
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲在线一区 | 爱草在线 | 日本超碰| 韩国理论电影在线 | 天天综合久久 | 亚洲第一天堂 | 亚洲36d大奶网 | 国产一级片 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 欧美a在线 | 成人啊啊啊 | 欧美综合在线视频 | 欧美阿v| 99国产精品久久久久老师 | 久久黄视频 | 狠狠干美女 | 男女羞羞视频在线观看 | 精品国产一区探花在线观看 | 91视频进入 | 天天看天天摸天天操 | 伊人久久在线观看 | 午夜激情影院 | 午夜激情一区 | 午夜小电影 | 一二三区在线 | 久久久久久国产精品免费免费男同 | 91小视频 | 日韩不卡一区二区 | 在线不卡av | 中文一级片 | 国产综合久久久 | 日韩欧美国产一区二区三区 | 久久精品国产99国产 | www国产成人免费观看视频,深夜成人网 | 日韩成人一区 | 91国在线视频 | 久久成人午夜 | 国产成人精品综合 | 99九色| 91精品国产综合久久婷婷香蕉 | 成人在线视频免费看 |