0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通過一些附加信息和有用的實現(xiàn)技術(shù)對C函數(shù)的探索

multisim ? 來源:multisim ? 作者:multisim ? 2020-09-27 11:11 ? 次閱讀

在本文中,我們將通過一些附加信息和一些有用的實現(xiàn)技術(shù)來結(jié)束對C函數(shù)的探索。

基本的C函數(shù)(例如,一個或兩個參數(shù)和一個返回值)并不復(fù)雜。但是,C函數(shù)非常靈活,通過超越基礎(chǔ)知識,您可以更輕松地編寫代碼,并將一些有益的特性引入固件。

1.將函數(shù)原型放入頭文件中

有時我想知道一個人是否必須是計算機科學(xué)專業(yè)才能完全理解C語言功能原型。這確實是一個相當(dāng)復(fù)雜的問題。我認為固件工程師可以放心地忽略這些細節(jié),而只需采取以下標(biāo)準(zhǔn)操作:始終為您的功能提供一個原型,并將這些原型放置在頭文件中。

函數(shù)原型是一行代碼,為編譯器提供函數(shù)自變量和返回值的數(shù)據(jù)類型。例如:

float ArithmeticMean(char Value1,char Value2,char Value3);

復(fù)制代碼

實際上,不必包含輸入?yún)?shù)的名稱,因為此時編譯器希望知道的只是數(shù)據(jù)類型。因此,您也可以按如下方式編寫原型:

float ArithmeticMean(char,char,char);

復(fù)制代碼

我更喜歡包含參數(shù)名稱,這可能是因為它允許我通過從函數(shù)定義中復(fù)制和粘貼來創(chuàng)建函數(shù)原型。
當(dāng)函數(shù)原型被遺漏或放錯位置時,可能會發(fā)生奇怪的事情,而根據(jù)我的經(jīng)驗,消除這些問題的最簡單方法是將所有函數(shù)原型放置在項目的所有源文件中包含的頭文件中。這樣可以確保您可以安全地在任何源文件中使用任何函數(shù),因為在調(diào)用每個函數(shù)之前,總是會對其進行聲明(即,在頭文件中)。

例如,以下代碼段摘自一個名為“ Project_DefsVarsFuncs.h”的文件。

//function prototypes

void Delay_us(unsigned int DelayCount);

void Delay_10ms(unsigned int DelayCount);

void Delay_seconds(unsigned int DelayCount);

void Update_LCD(unsigned char SensorNumber, unsigned longdisplayValue);

void LCD_Clear_All();

復(fù)制代碼

此頭文件包含在我的源文件中,如下所示:

//-----------------------------------------------------------------------------

// Includes

//-----------------------------------------------------------------------------

#include "Project_DefsVarsFuncs.h"

復(fù)制代碼

2.將函數(shù)聲明為靜態(tài)以避免命名沖突
隨著固件項目變得越來越大和越來越復(fù)雜,您可能會發(fā)現(xiàn)要在不同的源文件中重用相同的功能名稱。您可以使用“ static”關(guān)鍵字來完成此操作。如上所述,在這種情況下,您不會將函數(shù)原型放置在頭文件中。
“ static”關(guān)鍵字將功能范圍限制為一個源文件。這使您可以對不同源文件中的不同功能使用相同的功能名稱。在下面顯示的示例中,該項目需要三個不同的ProcessData()函數(shù)-一個用于分析ADC數(shù)據(jù),一個用于響應(yīng)UART命令,另一個用于處理I 2 C消息。

我將“ static”關(guān)鍵字放在函數(shù)原型的前面,然后函數(shù)原型移到源文件的頂部(即,在由函數(shù)體內(nèi)的處理器指令組成的“正?!贝a之前)。
當(dāng)多個工程師將要從事同一固件項目時,“ static”關(guān)鍵字也很方便。如果兩個工程師正在不同的源文件中工作,則使用靜態(tài)功能可以使工程師A選擇功能名稱,而不必擔(dān)心工程師B將為不同功能選擇相同名稱的可能性。

3.使用指針將數(shù)組傳遞給函數(shù)
嵌入式應(yīng)用程序經(jīng)常使用數(shù)組-傳感器讀數(shù),ADC值,短ASCII消息等序列。在這種開發(fā)環(huán)境中,函數(shù)似乎有點尷尬,因為您無法將數(shù)組傳遞給C函數(shù)。確實,您不能像傳遞單個變量那樣傳遞數(shù)組,但是可以使用指針為函數(shù)提供對數(shù)組數(shù)據(jù)的訪問權(quán)限。
如果將指針作為參數(shù)之一,然后在調(diào)用函數(shù)時傳遞數(shù)組標(biāo)識符,則函數(shù)主體中的語句可以使用該指針讀取和修改數(shù)組的內(nèi)容。如果您對此概念感到有些困惑,建議您先閱讀有關(guān)C語言中數(shù)組的文章 ,然后閱讀有關(guān)指針的第一篇文章。

4.您可以使用指針調(diào)用函數(shù)
指針是保存內(nèi)存地址的變量。該地址通常標(biāo)識變量或數(shù)組第零個元素的位置。但是,指針也可以指向函數(shù)。

如果您已經(jīng)閱讀了有關(guān)C函數(shù)的第一篇文章,您就會知道函數(shù)存儲在代碼存儲器的特定位置,就像變量存儲在數(shù)據(jù)存儲器的特定位置一樣。如果存儲在指針中的值是函數(shù)的起始地址,則可以使用指針來調(diào)用該函數(shù)。如果更改指針的值使其等于不同函數(shù)的起始地址,則可以使用同一指針來調(diào)用該不同函數(shù)。
以下代碼段顯示了如何聲明可與具有三個char參數(shù)和返回類型float的函數(shù)一起使用的函數(shù)指針。

float(* Ptr_to_Function)(char,char,char);

復(fù)制代碼

數(shù)組標(biāo)識符本質(zhì)上是指向數(shù)組第零個元素的指針。同樣,功能名稱被解釋為功能的起始地址(在代碼存儲器中)。因此,可以將函數(shù)分配給函數(shù)指針,如下所示:

Ptr_to_Function = ArithmeticMean;

復(fù)制代碼

現(xiàn)在,您可以使用Ptr_to_Function調(diào)用函數(shù)ArithmeticMean()。以下兩個語句是等效的:

Average = ArithmeticMean(Temperature1, Temperature2, Temperature3);

Average = (*Ptr_to_Function)(Temperature1, Temperature2, Temperature3);

復(fù)制代碼

5.盡可能使用局部變量
我認為,在許多情況下,我們的本能是在源文件的頂部定義所有變量,然后將其保留在該位置。但是,養(yǎng)成在函數(shù)中使用局部變量的習(xí)慣是很好的。局部變量的范圍僅限于定義它的功能。換句話說,變量是在調(diào)用函數(shù)時創(chuàng)建的,并在函數(shù)完成其任務(wù)后消失。
推薦局部變量有兩個原因。首先,它們允許您在不同的函數(shù)中重用相同的變量名。復(fù)雜的項目可能包含許多需要基本變量的功能,例如循環(huán)計數(shù)器。我喜歡對循環(huán)計數(shù)器重復(fù)使用“ n”,而不是逐步遍歷字母表中的所有字母。
其次,使用局部變量可能會導(dǎo)致更快的代碼。我不是編譯器專家,但是我認為局部變量很可能放在寄存器中而不是存儲位置,并且訪問寄存器要比訪問內(nèi)存快。

寄存器是處理器的組成部分,可以快速讀取和寫入數(shù)據(jù)。

結(jié)論

責(zé)任編輯:xj

原文標(biāo)題:在C語言固件中使用功能的五個技巧

文章出處:【微信公眾號:multisim】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7595

    瀏覽量

    135869
  • 固件
    +關(guān)注

    關(guān)注

    10

    文章

    550

    瀏覽量

    22929

原文標(biāo)題:在C語言固件中使用功能的五個技巧

文章出處:【微信號:A1411464185,微信公眾號:multisim】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何優(yōu)化SUMIF函數(shù)的效率

    在Excel中, SUMIF 函數(shù)個非常有用的工具,它可以根據(jù)指定的條件對數(shù)據(jù)進行求和。然而,在處理大量數(shù)據(jù)時, SUMIF 函數(shù)可能會變得效率低下。以下是
    的頭像 發(fā)表于 11-11 09:20 ?123次閱讀

    使用C語言實現(xiàn)函數(shù)模板

      用C語言能不能實現(xiàn)個通用的函數(shù),既能完成整數(shù)的相加,又能完成浮點數(shù)的相加?
    的頭像 發(fā)表于 11-09 11:38 ?100次閱讀

    二進制處理中的一些技巧

    在二進制和十進制的處理中,有時候一些小技巧是很有用的。 1、把十進制數(shù)轉(zhuǎn)換成二進制數(shù) (1)在MATLAB中有函數(shù)dec2bin,可以把正整數(shù)轉(zhuǎn)換為2進制 (2)
    的頭像 發(fā)表于 07-05 11:51 ?486次閱讀

    IIoT可以通過多種方式實現(xiàn)智能工廠(還有一些挑戰(zhàn))

    )集成以創(chuàng)建智能工廠,制造商可以實現(xiàn)這種“工業(yè)物聯(lián)網(wǎng)”(IIoT)的全部好處,推動其行業(yè)向前發(fā)展。 IIoT可以通過多種方式實現(xiàn)智能工廠(還有一些挑戰(zhàn))。然而,在
    的頭像 發(fā)表于 04-29 11:15 ?553次閱讀

    有關(guān)射頻技術(shù)無線傳輸?shù)?b class='flag-5'>一些問題

    實際生活中無線信息傳播應(yīng)用極為廣泛,有一些在無線傳輸方面應(yīng)用的問題想請教。想了解了解。 1、在有線電路中傳輸?shù)?b class='flag-5'>信息是怎么傳發(fā)送到空間的,這個發(fā)送的電路的原理是什么? 2、生活中應(yīng)用到多種頻率的波段
    發(fā)表于 02-03 14:42

    一些無功補償裝置SVG的資料

    一些SVG電路原理和功能碼相關(guān)的技術(shù)說明書,想了解一些SVG的工作原理和工作過程
    發(fā)表于 02-03 10:13

    【飛凌 OK113i-C 全志T113-i開發(fā)板】一些有用的常用的命令測試

    一些有用的常用的命令測試、系統(tǒng)信息查詢 可以查詢板子的內(nèi)核信息、CPU處理器信息、環(huán)境變量等
    發(fā)表于 12-22 10:05

    if函數(shù)excel公式怎么用

    Excel中的IF函數(shù)種邏輯函數(shù),它可以根據(jù)特定的條件返回不同的結(jié)果。這個函數(shù)非常有用,可以在大量的情況下幫助我們進行判斷和計算。在本文
    的頭像 發(fā)表于 11-30 17:05 ?1379次閱讀

    如何在AOSP12中查看binder調(diào)用信息呢?

    部分APP不會使用常規(guī)的framework api調(diào)用系統(tǒng)的一些函數(shù)獲取信息,但是如果他自己構(gòu)建binder調(diào)用的信息獲取,最后都會跑到這個函數(shù)
    的頭像 發(fā)表于 11-27 09:40 ?794次閱讀

    c語言gets函數(shù)可以輸入數(shù)字嗎

    來了解一些與輸入有關(guān)的C語言函數(shù)。C語言提供了許多函數(shù)來從用戶獲取輸入,包括scanf、fgets和gets等。 scanf
    的頭像 發(fā)表于 11-24 10:00 ?1376次閱讀

    我們?yōu)槭裁葱枰私?b class='flag-5'>一些先進封裝?

    我們?yōu)槭裁葱枰私?b class='flag-5'>一些先進封裝?
    的頭像 發(fā)表于 11-23 16:32 ?538次閱讀
    我們?yōu)槭裁葱枰私?b class='flag-5'>一些</b>先進封裝?

    c語言max函數(shù)在哪個庫

    C語言的max函數(shù)并不屬于標(biāo)準(zhǔn)C庫,它通常是由程序員自己編寫的個宏定義。max函數(shù)用于比較兩個數(shù)的大小,返回較大的數(shù)值。 為了提供更多詳實
    的頭像 發(fā)表于 11-22 10:18 ?3226次閱讀

    c語言max函數(shù)的使用方法

    C語言是門廣泛使用的編程語言,提供了許多內(nèi)置的函數(shù)來執(zhí)行各種任務(wù)。其中個非常有用函數(shù)是ma
    的頭像 發(fā)表于 11-22 10:15 ?1.3w次閱讀

    分享一些SystemVerilog的coding guideline

    本文分享一些SystemVerilog的coding guideline。
    的頭像 發(fā)表于 11-22 09:17 ?664次閱讀
    分享<b class='flag-5'>一些</b>SystemVerilog的coding  guideline

    探索C++的編程習(xí)慣與編程要點

    C++的類可以分為帶指針數(shù)據(jù)成員與不帶指針數(shù)據(jù)成員兩類,complex就屬于不帶指針成員的類。而這里要說的字符串類String,般的實現(xiàn)會帶有個char *指針。帶指針數(shù)據(jù)成員的類
    的頭像 發(fā)表于 11-14 09:25 ?372次閱讀
    <b class='flag-5'>探索</b><b class='flag-5'>C</b>++的編程習(xí)慣與編程要點