chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

multisim ? 來源:multisim ? 作者:multisim ? 2020-09-27 11:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

復(fù)制代碼

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

float ArithmeticMean(char,char,char);

復(fù)制代碼

我更喜歡包含參數(shù)名稱,這可能是因?yàn)樗试S我通過從函數(shù)定義中復(fù)制和粘貼來創(chuàng)建函數(shù)原型。
當(dāng)函數(shù)原型被遺漏或放錯(cuò)位置時(shí),可能會(huì)發(fā)生奇怪的事情,而根據(jù)我的經(jīng)驗(yà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)目變得越來越大和越來越復(fù)雜,您可能會(huì)發(fā)現(xiàn)要在不同的源文件中重用相同的功能名稱。您可以使用“ static”關(guān)鍵字來完成此操作。如上所述,在這種情況下,您不會(huì)將函數(shù)原型放置在頭文件中。
“ static”關(guān)鍵字將功能范圍限制為一個(gè)源文件。這使您可以對(duì)不同源文件中的不同功能使用相同的功能名稱。在下面顯示的示例中,該項(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選擇功能名稱,而不必?fù)?dān)心工程師B將為不同功能選擇相同名稱的可能性。

3.使用指針將數(shù)組傳遞給函數(shù)
嵌入式應(yīng)用程序經(jīng)常使用數(shù)組-傳感器讀數(shù),ADC值,短ASCII消息等序列。在這種開發(fā)環(huán)境中,函數(shù)似乎有點(diǎn)尷尬,因?yàn)槟鸁o法將數(shù)組傳遞給C函數(shù)。確實(shí),您不能像傳遞單個(gè)變量那樣傳遞數(shù)組,但是可以使用指針為函數(shù)提供對(duì)數(shù)組數(shù)據(jù)的訪問權(quán)限。
如果將指針作為參數(shù)之一,然后在調(diào)用函數(shù)時(shí)傳遞數(shù)組標(biāo)識(shí)符,則函數(shù)主體中的語句可以使用該指針讀取和修改數(shù)組的內(nèi)容。如果您對(duì)此概念感到有些困惑,建議您先閱讀有關(guān)C語言中數(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ù)的起始地址,則可以使用指針來調(diào)用該函數(shù)。如果更改指針的值使其等于不同函數(shù)的起始地址,則可以使用同一指針來調(diào)用該不同函數(shù)。
以下代碼段顯示了如何聲明可與具有三個(gè)char參數(shù)和返回類型float的函數(shù)一起使用的函數(shù)指針。

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

復(fù)制代碼

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

Ptr_to_Function = ArithmeticMean;

復(fù)制代碼

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

Average = ArithmeticMean(Temperature1, Temperature2, Temperature3);

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

復(fù)制代碼

5.盡可能使用局部變量
我認(rèn)為,在許多情況下,我們的本能是在源文件的頂部定義所有變量,然后將其保留在該位置。但是,養(yǎng)成在函數(shù)中使用局部變量的習(xí)慣是很好的。局部變量的范圍僅限于定義它的功能。換句話說,變量是在調(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)致更快的代碼。我不是編譯器專家,但是我認(rèn)為局部變量很可能放在寄存器中而不是存儲(chǔ)位置,并且訪問寄存器要比訪問內(nèi)存快。

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

結(jié)論

責(zé)任編輯:xj

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

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

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

    關(guān)注

    183

    文章

    7642

    瀏覽量

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

    關(guān)注

    11

    文章

    569

    瀏覽量

    24743

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語言中一些令人震驚的結(jié)構(gòu)介紹

    C語言同意一些令人震驚的結(jié)構(gòu),下面的結(jié)構(gòu)是合法的嗎,如果是它做些什么? int a = 5, b = 7, c; c = a+++b; 考察點(diǎn): 這個(gè)問題將作為這個(gè)測(cè)驗(yàn)的
    發(fā)表于 12-23 08:15

    復(fù)雜的軟件算法硬件IP核的實(shí)現(xiàn)

    實(shí)現(xiàn)技術(shù)細(xì)節(jié),知道這些技術(shù)細(xì)節(jié)將有利于在使用 C 語言編寫算法時(shí)實(shí)現(xiàn)一些有針對(duì)性的優(yōu)化。
    發(fā)表于 10-30 07:02

    蜂鳥E203的浮點(diǎn)指令集F的一些實(shí)現(xiàn)細(xì)節(jié)

    蜂鳥E203的浮點(diǎn)指令集F的一些實(shí)現(xiàn)細(xì)節(jié) 既然E203不是多發(fā)射,且為了節(jié)省面積,一些指令使用FPU內(nèi)的同個(gè)子模塊來執(zhí)行,即FPU同時(shí)只能進(jìn)行
    發(fā)表于 10-24 08:57

    ?WINCS02附加技術(shù)解析與開發(fā)指南

    Microchip Technology WINCS02附加板是款高效、低成本的開發(fā)平臺(tái),用于評(píng)估和演示Microchip低功耗Wi-Fi^?^ WINCS02PC模塊的特性和功能。該附加板符合
    的頭像 發(fā)表于 09-30 09:45 ?577次閱讀
    ?WINCS02<b class='flag-5'>附加</b>板<b class='flag-5'>技術(shù)</b>解析與開發(fā)指南

    ?RNWF02附加技術(shù)解析與開發(fā)指南

    ,而且包含個(gè)板載MCP2200 USB轉(zhuǎn)UART轉(zhuǎn)換器,可實(shí)現(xiàn)開箱即用評(píng)估。控制接口所需的信號(hào)連接到附加板的板載連接器,以實(shí)現(xiàn)靈活性和快速原型設(shè)計(jì)。該
    的頭像 發(fā)表于 09-30 09:33 ?552次閱讀
    ?RNWF02<b class='flag-5'>附加</b>板<b class='flag-5'>技術(shù)</b>解析與開發(fā)指南

    請(qǐng)問gcc編譯是怎么實(shí)現(xiàn)個(gè)未被調(diào)用的函數(shù)最終不被鏈接到固件中的?

    如題,平時(shí)在一些項(xiàng)目中,看到我寫的一些未發(fā)生調(diào)用的函數(shù),在固件里面找不到,初步斷定是gcc編譯處理了,但不知道它是怎么實(shí)現(xiàn)的,想了解下其原理是什么。 有了解這塊的大佬,歡迎指點(diǎn)指點(diǎn)。謝
    發(fā)表于 09-28 11:40

    【原創(chuàng)】TDMS設(shè)置下個(gè)寫入位置函數(shù)的摸索

    初始位置,循環(huán)覆蓋寫入,但是長(zhǎng)時(shí)間都沒成功實(shí)現(xiàn)。隨后勉強(qiáng)實(shí)現(xiàn)此功能,但還是理解不了,把一些關(guān)鍵信息記錄下來,以備用,有人熟悉函數(shù)的應(yīng)用,感謝
    發(fā)表于 08-11 20:54

    【「DeepSeek 核心技術(shù)揭秘」閱讀體驗(yàn)】第三章:探索 DeepSeek - V3 技術(shù)架構(gòu)的奧秘

    存在資源利用率不高的問題,但它是基礎(chǔ)探索,讓 我看到將模型分段處理以實(shí)現(xiàn)流水線作業(yè)的初步嘗試。 而 GPipe 方法的改進(jìn),通過微批次處理減少并行氣泡,如同給流水線 “疏通血管”,讓計(jì)算設(shè)備的閑置
    發(fā)表于 07-20 15:07

    Debian和Ubuntu哪個(gè)好一些

    兼容性對(duì)比Debian和Ubuntu哪個(gè)好一些,并為您揭示如何通過RAKsmart服務(wù)器釋放Linux系統(tǒng)的最大潛能。
    的頭像 發(fā)表于 05-07 10:58 ?1020次閱讀

    如何添加一些網(wǎng)絡(luò)上的庫到mpy固件的說明或手冊(cè)教程?

    下有沒有關(guān)于如何添加一些網(wǎng)絡(luò)上的庫到mpy固件的說明或手冊(cè)教程? 問題2: 關(guān)于mpy的image庫在哪里能了解學(xué)習(xí)內(nèi)部代碼,只了解一些python,想知道怎么從c轉(zhuǎn)換成mpy能調(diào)用的,自己寫的
    發(fā)表于 04-29 08:16

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

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

    使用RTD5.0.0的s32k312,C40_Ip擦除pflash存在一些問題求解決

    我正在使用 RTD5.0.0 的 s32k312,C40_Ip擦除 pflash 存在一些問題: Erase block0(0x420000-0x500000) failed
    發(fā)表于 04-11 06:53

    收藏的一些庫存,直流無刷技術(shù)+源碼+論文(建議打包)

    這也是我網(wǎng)絡(luò)上淘過來收藏的一些資料,免費(fèi)跟大家起分享下,建議下載哦,收藏不易
    發(fā)表于 03-17 20:17

    關(guān)于stm32,u8g2菜單之間切換(三)寫u8g2的一些必要函數(shù)

    byte_cb這個(gè)參數(shù)直接使用自帶的 u8x8_byte_sw_i2c即可,我們只要實(shí)現(xiàn) u8x8_msg_cb gpio_and_delay_cb這個(gè)參數(shù)寫個(gè)函數(shù): ? uint
    的頭像 發(fā)表于 03-07 12:53 ?1169次閱讀
    關(guān)于stm32,u8g2菜單之間切換(三)寫u8g2的<b class='flag-5'>一些</b>必要<b class='flag-5'>函數(shù)</b>

    深入探索GCC的attribute屬性

    如果經(jīng)??碙inux源碼,定會(huì)見過 attribute 屬性,他在 Linux 里面出現(xiàn)的很多。 attribute 是 gcc 的擴(kuò)展功能,它不屬于標(biāo)準(zhǔn)C語言。 使用 attribute 可以
    的頭像 發(fā)表于 02-13 10:05 ?887次閱讀