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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

通過一些附加信息和有用的實現技術對C函數的探索

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

在本文中,我們將通過一些附加信息和一些有用的實現技術來結束對C函數的探索。

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

1.將函數原型放入頭文件中

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

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

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

復制代碼

實際上,不必包含輸入參數的名稱,因為此時編譯器希望知道的只是數據類型。因此,您也可以按如下方式編寫原型:

float ArithmeticMean(char,char,char);

復制代碼

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

例如,以下代碼段摘自一個名為“ 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();

復制代碼

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

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

// Includes

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

#include "Project_DefsVarsFuncs.h"

復制代碼

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

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

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

4.您可以使用指針調用函數
指針是保存內存地址的變量。該地址通常標識變量或數組第零個元素的位置。但是,指針也可以指向函數。

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

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

復制代碼

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

Ptr_to_Function = ArithmeticMean;

復制代碼

現在,您可以使用Ptr_to_Function調用函數ArithmeticMean()。以下兩個語句是等效的:

Average = ArithmeticMean(Temperature1, Temperature2, Temperature3);

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

復制代碼

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

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

結論

責任編輯:xj

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

文章出處:【微信公眾號:multisim】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7604

    瀏覽量

    136692
  • 固件
    +關注

    關注

    10

    文章

    555

    瀏覽量

    23016

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

文章出處:【微信號:A1411464185,微信公眾號:multisim】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    同樣是函數,在CC++中有什么區別

    同樣是函數,在 CC++ 中有什么區別? 第個返回值。 C語言的函數可以不寫返回值類型,
    的頭像 發表于 11-29 10:25 ?272次閱讀

    一些常見的動態電路

    無論是模電還是數電,理論知識相對來說還是比較枯燥,各種電路原理理解清楚不算容易,換種生動形象的方式或許會增加一些趣味性,也更容易理解這些知識。下面整理了一些常見的電路,以動態圖形的方式展示。 整流
    的頭像 發表于 11-16 09:26 ?320次閱讀
    <b class='flag-5'>一些</b>常見的動態電路

    分享一些常見的電路

    理解模電和數電的電路原理對于初學者來說可能比較困難,但通過一些生動的教學方法和資源,可以有效地提高學習興趣和理解能力。 下面整理了一些常見的電路,以動態圖形的方式展示。 整流電路 單相橋式整流
    的頭像 發表于 11-13 09:28 ?285次閱讀
    分享<b class='flag-5'>一些</b>常見的電路

    如何優化SUMIF函數的效率

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

    使用C語言實現函數模板

      用C語言能不能實現個通用的函數,既能完成整數的相加,又能完成浮點數的相加?
    的頭像 發表于 11-09 11:38 ?377次閱讀

    探索設計稿自動生成Flutter代碼的技術方案

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

    LED驅動器應用的一些指南和技巧

    電子發燒友網站提供《LED驅動器應用的一些指南和技巧.pdf》資料免費下載
    發表于 09-25 11:35 ?0次下載
    LED驅動器應用的<b class='flag-5'>一些</b>指南和技巧

    FPGA電路設計的一些技巧

    FPGA設計有別于DSP和ARM系統,相比之下較為靈活和自由。主要是設計構思好專用管腳的電路,通用I/O的連接可以自身定義。因而,FPGA電路設計中會有一些獨特的方法能夠參照。 FPGA管腳兼容性
    發表于 07-21 20:20

    二進制處理中的一些技巧

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

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

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

    Tekvpi探頭接口的一些好處是什么?

    Tekvpi探針接口的一些好處是什么? Tekvmi探針接口的最大好處是多功能性和易于使用。 示波器 使用Tekvmi接口支持范圍廣泛的 普羅布斯 包括Tekvmi探針,BMC
    的頭像 發表于 03-22 10:32 ?418次閱讀
    Tekvpi探頭接口的<b class='flag-5'>一些</b>好處是什么?

    有關射頻技術無線傳輸的一些問題

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

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

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

    TC397怎么添加標準C函數

    想使用一些標準的C函數,如math.h中的一些sin,cos等函數,但是不知道怎么添加,請問有人操作過這種嗎,請賜教。
    發表于 02-02 08:04

    Apache Doris聚合函數源碼解析

    筆者最近由于工作需要開始調研 Apache Doris,通過閱讀聚合函數代碼切入 Apache Doris 內核,同時也秉承著開源的精神,開發了 array_agg 函數并貢獻給社區。筆者通過
    的頭像 發表于 01-16 09:52 ?1006次閱讀
    Apache Doris聚合<b class='flag-5'>函數</b>源碼解析
    主站蜘蛛池模板: 欧美日韩北条麻妃一区二区| 花蝴蝶hd免费| 国产亚洲色婷婷久久精品99| 国产亚洲欧美高清在线| 久久999视频| 女人一级毛片免费视频观看| 轻点慢点1V2啊高H抽插| 色欲AV蜜臀AV在线观看麻豆| 亚洲 日韩 国产 制服 在线| 一级毛片两人添下面| jizzzz亚洲丰满xxxx| 国产二级一片内射视频播放| 精品久久中文字幕有码| 免费可以看黄的视频s色| 日日夜夜国产| 亚洲伊人久久大香线蕉综合图片| 91亚洲精品| 国产精品999| 久久怡红院国产精品| 日本免费xxx| 亚洲精品中文字幕制| 97草碰在线视频免费| 广东95后小情侣酒店自拍流出| 好爽别插了无码视频| 女教师二十三岁| 亚州天堂在线视频av| 91av成年影院在线播放| 国产精品免费大片| 邻家美姨在线观看全集免费| 涩涩免费网站| 最近的2019中文字幕国语版| 怪物高h粗暴无尽| 久久综合中文字幕无码| 十8禁用B站在线看漫画| 中文在线免费看视频| 成人免费一级毛片在线播放视频| 精品AV综合导航| 深喉吞精日本| 99精品电影| 狠狠狠狠狠狠干| 欧美特级特黄AAAAA片|