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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2900|回復(fù): 2
收起左側(cè)

嵌入式C語言進(jìn)階之道(C語言實(shí)踐經(jīng)驗(yàn)總結(jié),詳解模塊化,代碼優(yōu)化等)

  [復(fù)制鏈接]
ID:866661 發(fā)表于 2021-2-25 11:51 | 顯示全部樓層 |閱讀模式
嵌入式C語言實(shí)踐經(jīng)驗(yàn)總結(jié)。對(duì)于在實(shí)際工作當(dāng)中, 你不再是獨(dú)自編寫程序,你要和小組內(nèi)的成員之間分工合作,你
要學(xué)會(huì)模塊化編程、要寫出更規(guī)范更安全的代碼、做更合理的優(yōu)化、減少更多的 bug。所有
的這些,都迫使你必須更徹底的理解嵌入式 C 的語法結(jié)構(gòu),數(shù)據(jù)細(xì)節(jié),與硬件打交道的特
性,使得你必須時(shí)時(shí)考慮硬件與 C 的對(duì)應(yīng)關(guān)系并養(yǎng)成良好的編程習(xí)慣。
51hei.png 51hei.png
二.模塊化編程
  當(dāng)你在一個(gè)項(xiàng)目小組做一個(gè)相對(duì)較復(fù)雜的工程時(shí),意味著你不再獨(dú)自單干。你需要和你的小組成員分工合作,一起完成項(xiàng)目,這就要求小組成員各自負(fù)責(zé)一部分工程。比如你可能只是負(fù)責(zé)通訊或者顯示這一塊。這個(gè)時(shí)候,你就應(yīng)該將自己的這一塊程序?qū)懗梢粋(gè)模塊,單獨(dú)調(diào)試, 留出接口供其它模塊調(diào)用。最后,小組成員都將自己負(fù)責(zé)的模塊寫完并調(diào)試無誤后,由項(xiàng)目組長(zhǎng)進(jìn)行組合調(diào)試。像這些場(chǎng)合就要求程序必須模塊化。模塊化的好處是很多的,不僅僅是便于分工,它還有助于程序的調(diào)試,有利于程序結(jié)構(gòu)的劃分,還能增加程序的可讀性和可移植性。
  初學(xué)者往往搞不懂如何模塊化編程,其實(shí)它是簡(jiǎn)單易學(xué),而且又是組織良好程序結(jié)構(gòu)行之有效的方法之一.
  本文將先大概講一下模塊化的方法和注意事項(xiàng),最后將以初學(xué)者使用最廣的keil c編譯器為例,給出模塊化編程的詳細(xì)步驟。
  模塊化程序設(shè)計(jì)應(yīng)該理解以下概述:
(1)  模塊即是一個(gè).c 文件和一個(gè).h 文件的結(jié)合,頭文件(.h)中是對(duì)于該模塊接口的聲明;  
  這一條概括了模塊化的實(shí)現(xiàn)方法和實(shí)質(zhì): 將一個(gè)功能模塊的代碼單獨(dú)編寫成一個(gè).c文件,然后把該模塊的接口函數(shù)放在.h文件中.舉例:假如你用到液晶顯示, 那么你可能會(huì)寫一個(gè)液晶驅(qū)動(dòng)模塊,以實(shí)現(xiàn)字符、漢字和圖像的現(xiàn)實(shí),命名為: led_device.c,該模塊的.c文件大
體可以寫成:
/*************************************************************************
*                       液晶驅(qū)動(dòng)模塊  
*
* 文    件: lcd_device.c
* 編 寫 人: 小瓶蓋
* 描    述:液晶串行顯示驅(qū)動(dòng)模塊,提供字符、漢字、和圖像的實(shí)現(xiàn)接口
* 編寫時(shí)間: 2009.07.03
* 版    本:1.2
*************************************************************************/
#include …

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

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

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

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

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

評(píng)分

參與人數(shù) 2黑幣 +60 收起 理由
pcbbb2024 + 10 很給力!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩成人在线播放 | 性天堂网| 精品视频国产 | 国产成人精品免费 | 免费在线看黄 | 91欧美精品成人综合在线观看 | 日韩精品一区中文字幕 | 午夜在线精品 | 欧美精品99 | 精品少妇v888av| 2020国产在线 | 欧美日韩综合一区 | 精国产品一区二区三区四季综 | 久久久久久久久久久国产 | 九九福利 | 亚洲精品乱码久久久久久蜜桃91 | 中文字幕亚洲欧美 | 性高朝久久久久久久3小时 av一区二区三区四区 | 一区二区在线 | 日韩精品一区二区久久 | 国产精品高潮呻吟久久av野狼 | 欧美视频免费 | 麻豆视频在线免费观看 | xxxxx黄色片 欧美一区免费 | 波多野结衣精品在线 | 日韩国产欧美一区 | 日本不卡免费新一二三区 | 在线播放亚洲 | 国产一区二区三区 | 久久精品国产一区二区三区 | 日日骚av| 91高清在线| 九色 在线 | 欧美在线一二三 | 91在线视频免费观看 | www.色.com| 日韩免费一区二区 | 天天操天天插天天干 | 国产黄色在线观看 | 看a级黄色毛片 | 欧美一级毛片免费观看 |