色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

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

multisim ? 來(lái)源:multisim ? 作者:multisim ? 2020-09-27 11:11 ? 次閱讀

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

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

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

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

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

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

復(fù)制代碼

實(shí)際上,不必包含輸入?yún)?shù)的名稱(chēng),因?yàn)榇藭r(shí)編譯器希望知道的只是數(shù)據(jù)類(lèi)型。因此,您也可以按如下方式編寫(xiě)原型:

float ArithmeticMean(char,char,char);

復(fù)制代碼

我更喜歡包含參數(shù)名稱(chēng),這可能是因?yàn)樗试S我通過(guò)從函數(shù)定義中復(fù)制和粘貼來(lái)創(chuàng)建函數(shù)原型。
當(dāng)函數(shù)原型被遺漏或放錯(cuò)位置時(shí),可能會(huì)發(fā)生奇怪的事情,而根據(jù)我的經(jīng)驗(yàn),消除這些問(wèn)題的最簡(jiǎn)單方法是將所有函數(shù)原型放置在項(xiàng)目的所有源文件中包含的頭文件中。這樣可以確保您可以安全地在任何源文件中使用任何函數(shù),因?yàn)樵谡{(diào)用每個(gè)函數(shù)之前,總是會(huì)對(duì)其進(jìn)行聲明(即,在頭文件中)。

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

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

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

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

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

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

復(fù)制代碼

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

Ptr_to_Function = ArithmeticMean;

復(fù)制代碼

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

Average = ArithmeticMean(Temperature1, Temperature2, Temperature3);

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

復(fù)制代碼

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

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

結(jié)論

責(zé)任編輯:xj

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

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

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

    關(guān)注

    180

    文章

    7626

    瀏覽量

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

    關(guān)注

    10

    文章

    561

    瀏覽量

    23562

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

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

收藏 0人收藏

    評(píng)論

    相關(guān)推薦

    S32K312通過(guò)UART口打印系統(tǒng)信息,是否有使用Printf () 函數(shù)打印信息的Demo例程?

    S32K312通過(guò)UART口打印系統(tǒng)信息,是否有使用Printf () 函數(shù)打印信息的Demo例程?
    發(fā)表于 04-11 07:21

    同樣是函數(shù),在CC++中有什么區(qū)別

    同樣是函數(shù),在 CC++ 中有什么區(qū)別? 第個(gè)返回值。 C語(yǔ)言的函數(shù)可以不寫(xiě)返回值類(lèi)型,
    的頭像 發(fā)表于 11-29 10:25 ?701次閱讀

    一些常見(jiàn)的動(dòng)態(tài)電路

    無(wú)論是模電還是數(shù)電,理論知識(shí)相對(duì)來(lái)說(shuō)還是比較枯燥,各種電路原理理解清楚不算容易,換種生動(dòng)形象的方式或許會(huì)增加一些趣味性,也更容易理解這些知識(shí)。下面整理了一些常見(jiàn)的電路,以動(dòng)態(tài)圖形的方式展示。 整流
    的頭像 發(fā)表于 11-16 09:26 ?836次閱讀
    <b class='flag-5'>一些</b>常見(jiàn)的動(dòng)態(tài)電路

    分享一些常見(jiàn)的電路

    理解模電和數(shù)電的電路原理對(duì)于初學(xué)者來(lái)說(shuō)可能比較困難,但通過(guò)一些生動(dòng)的教學(xué)方法和資源,可以有效地提高學(xué)習(xí)興趣和理解能力。 下面整理了一些常見(jiàn)的電路,以動(dòng)態(tài)圖形的方式展示。 整流電路 單相橋式整流
    的頭像 發(fā)表于 11-13 09:28 ?624次閱讀
    分享<b class='flag-5'>一些</b>常見(jiàn)的電路

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

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

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

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

    探索設(shè)計(jì)稿自動(dòng)生成Flutter代碼的技術(shù)方案

    作者:京東物流 冷先鋒 近年來(lái),隨著人工智能和大模型技術(shù)的發(fā)展,設(shè)計(jì)稿(UI視圖)自動(dòng)生成代碼的技術(shù)也在不斷進(jìn)步。本文將探討幾家知名企業(yè)在這領(lǐng)域的探索和實(shí)踐,包括美團(tuán)、京東、微軟等,
    的頭像 發(fā)表于 11-08 10:09 ?1460次閱讀
    <b class='flag-5'>探索</b>設(shè)計(jì)稿自動(dòng)生成Flutter代碼的<b class='flag-5'>技術(shù)</b>方案

    SUMIF函數(shù)與SUMIFS函數(shù)的區(qū)別

    SUMIF函數(shù)和SUMIFS函數(shù)都是Excel中用于條件求和的函數(shù),它們可以幫助用戶(hù)根據(jù)特定的條件對(duì)數(shù)據(jù)進(jìn)行求和。盡管它們的基本功能相似,但在使用場(chǎng)景和功能上存在一些差異。以下是對(duì)這兩
    的頭像 發(fā)表于 10-30 09:51 ?6705次閱讀

    GPIO Init函數(shù)結(jié)尾沒(méi)有begin end用戶(hù)編輯區(qū)域,為什么?

    MX_GPIO_Init初始換函數(shù)結(jié)尾沒(méi)有begin end用戶(hù)編輯區(qū)域,但是在其他初始化函數(shù)后有編輯區(qū)域,并且在main.c文件每個(gè)初始化后方也沒(méi)有用戶(hù)編輯界面,如果想要在初始化結(jié)尾
    發(fā)表于 09-26 06:08

    LED驅(qū)動(dòng)器應(yīng)用的一些指南和技巧

    電子發(fā)燒友網(wǎng)站提供《LED驅(qū)動(dòng)器應(yīng)用的一些指南和技巧.pdf》資料免費(fèi)下載
    發(fā)表于 09-25 11:35 ?0次下載
    LED驅(qū)動(dòng)器應(yīng)用的<b class='flag-5'>一些</b>指南和技巧

    FPGA電路設(shè)計(jì)的一些技巧

    FPGA設(shè)計(jì)有別于DSP和ARM系統(tǒng),相比之下較為靈活和自由。主要是設(shè)計(jì)構(gòu)思好專(zhuān)用管腳的電路,通用I/O的連接可以自身定義。因而,F(xiàn)PGA電路設(shè)計(jì)中會(huì)有一些獨(dú)特的方法能夠參照。 FPGA管腳兼容性
    發(fā)表于 07-21 20:20

    人工神經(jīng)元模型中常見(jiàn)的轉(zhuǎn)移函數(shù)有哪些

    人工神經(jīng)元模型是神經(jīng)網(wǎng)絡(luò)的基礎(chǔ),它模擬了生物神經(jīng)元的工作原理。在人工神經(jīng)元模型中,轉(zhuǎn)移函數(shù)起著至關(guān)重要的作用,它決定了神經(jīng)元的輸出。以下是一些常見(jiàn)的轉(zhuǎn)移函數(shù): 線(xiàn)性函數(shù) :這是最簡(jiǎn)單的
    的頭像 發(fā)表于 07-11 11:22 ?1541次閱讀

    二進(jìn)制處理中的一些技巧

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

    stm32使用workbench只生成了一些.h和.c文件,然后該如何使用它們?

    使用workbench只生成了一些.h和.c文件,然后該如何使用它們?還需要手動(dòng)在MDK中建立工程添加標(biāo)準(zhǔn)庫(kù)再把這些文件加進(jìn)去么?哪位有相關(guān)開(kāi)發(fā)經(jīng)驗(yàn),請(qǐng)賜教!
    發(fā)表于 05-15 07:29

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

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

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品
    主站蜘蛛池模板: 久久精品手机观看 | 果冻传媒在线播放 | 中文免费视频 | 美女动态图真人后进式 | 无码一区二区在线欧洲 | 国产成人永久免费视频 | 免费人成视频19674不收费 | 久久re热线视频精品99 | 久久免费精品国产72精品剧情 | 无人在线观看免费高清视频播放 | 亚洲国产中文在线视频免费 | 午夜影视不用充钱的免费 | 羞羞答答影院在线 | 免费的黄直播 | 国产亚洲免费观看 | 高H内射NP古文 | 欧美另类极品videosbest | 成人毛片一区二区三区 | 村妇偷人内射高潮迭起 | free俄罗斯性xxxxhd派对 | 天天操人人射 | 尤物yw193can入口 | 国产成人无码一区AV在线观看 | 亲胸揉胸膜下刺激视频在线观看 | 在线观看免费亚洲 | xxxxx69hd杨幂| 欧美三级aaa | 男女免费观看在线爽爽爽视频 | 8050午夜二级一片 | 午夜影院和视费x看 | 亚洲乱码AV久久久久久久 | 狠狠久久免费视频在线 | 欧美高清vivoesosexo18| 99精品热视频30在线热视频 | 国产精品A8198V久久A片 | 国产AV果冻传奇麻豆 | 被窝伦理午夜电影网 | 国产精品99久久久久久人韩国 | 依恋影院在线观看 | 强奸美女老师 | 亚洲午夜精品A片久久软件 亚洲午夜精品A片久久不卡蜜桃 |