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

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

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

Arduino預(yù)處理器指令教程

李歡 ? 來源:醉狼工作室 ? 作者:醉狼工作室 ? 2023-02-24 09:51 ? 次閱讀

這篇文章來源于DevicePlus.com英語網(wǎng)站的翻譯稿。

poYBAGPzFk-AMyEfAASJRZLy_C0605.jpg

適用于ROHM傳感器評(píng)估套件的輕量級(jí)Arduino庫(kù)中,我介紹了RohmMultiSensor——幫您輕松連接ROHM傳感器評(píng)估套件多個(gè)傳感器的Arduino庫(kù)。該庫(kù)的核心特征之一就是通過僅編譯與所需傳感器相關(guān)的庫(kù)部分,顯著減小程序的大小。這意味著當(dāng)您使用較少的傳感器時(shí),整體程序大小和內(nèi)存使用量會(huì)減小。但是,這究竟是如何實(shí)現(xiàn)的呢?當(dāng)您#include一個(gè)庫(kù)然后按下“Upload”(上傳)按鈕之后,幕后究竟會(huì)發(fā)生什么?

硬件

Arduino UNO

軟件

Arduino IDE

幾乎所有用過Arduino的人都使用過庫(kù)。這就是Arduino編程對(duì)初學(xué)者來說如此簡(jiǎn)單的原因之一——您無需深入了解傳感器的工作原理;庫(kù)會(huì)替您完成大部分工作。將代碼分成單獨(dú)的文件也是一種很好的編程習(xí)慣。組織、調(diào)試和維護(hù)單個(gè)文件要比處理一大堆代碼容易得多。

想必Arduino初學(xué)者都已經(jīng)熟悉了將庫(kù)添加到主程序中的#include命令。要了解這是如何實(shí)現(xiàn)的,我們首先應(yīng)快速了解C/C++源代碼如何編譯成程序。別擔(dān)心,這聽起來比較復(fù)雜,其實(shí)很簡(jiǎn)單。我們來看一下編譯的工作原理。

按“上傳”之后

我們先做一個(gè)快速實(shí)驗(yàn):?jiǎn)?dòng)Arduino IDE,打開其中一個(gè)示例代碼(比如“Blink”),然后按“Verify”按鈕。假設(shè)程序中沒有語法錯(cuò)誤,底部的控制臺(tái)應(yīng)該會(huì)打印出有關(guān)程序大小和內(nèi)存的一些信息。嗯,剛才我們成功地將C++源代碼編譯成了二進(jìn)制文件。在編譯過程中發(fā)生了以下幾件事:

Arduino IDE執(zhí)行了一種名為“語法檢查”的操作,以確保您編寫的程序是真正的C/C++源代碼。此時(shí),如果發(fā)生函數(shù)拼寫錯(cuò)誤或忘記分號(hào),那么編譯就會(huì)停止。

語法檢查之后,Arduino IDE會(huì)啟動(dòng)另一個(gè)名為preprocessor(預(yù)處理器)的程序。這是一個(gè)非常簡(jiǎn)單的程序,如果文件是C/C++源代碼,它不會(huì)怎么樣。我們稍后會(huì)詳細(xì)討論這一步驟。那么現(xiàn)在我們假設(shè)結(jié)果是一個(gè)名為“擴(kuò)展源代碼”的文件——一個(gè)文本文件。

然后,該擴(kuò)展源代碼被移交給另一個(gè)名為compiler(編譯器)的程序。該編譯器(在Arduino IDE中是avr-gcc)接收文本源,并生成匯編文件。匯編一種人類可讀的低級(jí)編程語言,但是更接近機(jī)器代碼——適用于特定處理器的指令。這里就是您編寫程序之前必須選擇正確Arduino板的原因——不同的開發(fā)板具有不同的處理器,而處理器又具有不同的指令集。

處理您Arduino程序下一個(gè)的系統(tǒng)程序叫做assembler(匯編程序)。該程序會(huì)生成一個(gè)“目標(biāo)文件”。該文件主要是機(jī)器代碼,但也可以包含針對(duì)其他目標(biāo)文件對(duì)象的“引用”。這允許Arduino IDE“預(yù)編譯”一些編寫Arduino程序時(shí)會(huì)始終用到的庫(kù),從而使整個(gè)過程更快。

最后一個(gè)階段稱為鏈接,由另一個(gè)名為linker(鏈接器,顯而易見)的程序完成。鏈接器獲取目標(biāo)文件并添加缺少的內(nèi)容——主要是來自其他目標(biāo)文件的符號(hào),以生產(chǎn)可執(zhí)行文件。在此之后,程序完全轉(zhuǎn)換為機(jī)器代碼,并可以上傳到電路板。

poYBAGPzFlCAP8kHAADv1ACnGVg466.jpg

現(xiàn)在,我們對(duì)Arduino程序編譯有了一個(gè)基本的了解。但是在上述所有編譯階段中,我們將只關(guān)注第二個(gè)階段:預(yù)處理器。

預(yù)處理器基本知識(shí)

在上本中,我提到預(yù)處理器本質(zhì)上非常簡(jiǎn)單:接收文本輸入,搜索關(guān)鍵字,根據(jù)找到的內(nèi)容進(jìn)行一些操作,然后輸出不同的文本。它非常簡(jiǎn)單,同時(shí)也非常強(qiáng)大,因?yàn)樗试S你用普通C/C++語言完成一些本來會(huì)非常復(fù)雜的事情(如果可能)。

預(yù)處理器會(huì)搜索以井號(hào)(#)開頭且后面有文本的行。這種語句叫做預(yù)處理器指令,是預(yù)處理器的一種“命令”。預(yù)處理器指令的完整列表以及詳細(xì)文檔的地址如下所示:

https://gcc.gnu.org/onlinedocs/cpp/Index-of-Directives.html#Index-of-Directives。

接下來,我將主要關(guān)注#include、#define和條件指令,因?yàn)檫@是Arduino最有用的指令。如果您想了解一些更“奇異”的指令,比如#assert 或 #pragma, 請(qǐng)參閱上述地址,以獲取官方信息。

添加額外代碼:#include 指令

這可能是最著名的預(yù)處理器指令,不僅Arduino愛好者都知道,而且C/C++編程人員也都了解。原因很簡(jiǎn)單:該指令的作用是包含庫(kù)。但是,這究竟是如何實(shí)現(xiàn)的呢?確切的語法如下所示:

#include 

#include "file"

兩者的區(qū)別比較小,主要在于預(yù)處理器搜索file(文件)的確切位置。如果是第一句,預(yù)處理器僅搜索IDE指定的目錄。如果是第二句,預(yù)處理器首先查看包含源文件的文件夾,且僅當(dāng)沒有在該目錄下找到file(文件) 時(shí), 它才會(huì)搜索第一句的搜索目錄。由于包含庫(kù)的文件夾是在Arduino IDE中指定的,因此在包含庫(kù)時(shí)兩者之間沒有重大區(qū)別。

當(dāng)預(yù)處理器找到文件時(shí),它只是將其內(nèi)容復(fù)制粘貼到源代碼中,以替代程序中的#include指令。但是,如果在任何目錄中都找不到此文件,就會(huì)引發(fā)致命錯(cuò)誤,編譯停止。

要記住,預(yù)處理器只處理文本——無法理解那些特殊字母和數(shù)字的含義。最重要的是,它對(duì)所包含的內(nèi)容和包含次數(shù)絕對(duì)不會(huì)進(jìn)行更高級(jí)別的檢查。讓我們來看一下使用編寫不正確的庫(kù)會(huì)發(fā)生什么。

#include 

void setup() {

}

#include 

void loop() {

}

這個(gè)Arduino程序中沒有多少內(nèi)容。請(qǐng)注意我們包含了一個(gè)名為“ExampleLibrary.h”的文件,而且我們包含了兩次。

//This is an example library

int a = 0;

//End of example library

“ExampleLibrary.h”的內(nèi)容如下所示。同樣,除了一個(gè)整數(shù)變量之外,沒有多少內(nèi)容。那么當(dāng)我們編譯這個(gè)Arduino程序時(shí)會(huì)發(fā)生什么呢?

pYYBAGPzFlKABQHUAAJzvAUPScQ446.jpg

錯(cuò)誤信息顯示變量a聲明了兩次,這導(dǎo)致編譯失敗。這是預(yù)處理器完成后源代碼的樣子。

//This is an example  library

int a = 0;

//End of example library

void setup() {

}

//This is an example  library

int a = 0;

//End of example library

void loop() {

}

顯而易見,不應(yīng)該多次包含庫(kù),但是如何在不依賴用戶的情況下實(shí)現(xiàn)這一目標(biāo)?標(biāo)準(zhǔn)解決方案是將整個(gè)庫(kù)包含在以下結(jié)構(gòu)中:

#ifndef _EXAMPLE_LIBRARY_H
#define _EXAMPLE_LIBRARY_H

//This is an example  library

int a = 0;

//End of example library

#endif

現(xiàn)在,第一次包含庫(kù)時(shí),預(yù)處理器會(huì)檢查是否存在用“_EXAMPLE_LIBRARY_H”定義的內(nèi)容。由于沒有類似的東西存在,預(yù)處理器繼續(xù)下一行并定義一個(gè)名為“_EXAMPLE_LIBRARY_H”的常量。然后,庫(kù)代碼被復(fù)制到程序中。

當(dāng)?shù)诙伟瑤?kù)時(shí),預(yù)處理器會(huì)再次檢查是否存在名為“_EXAMPLE_LIBRARY_H”的常量。這次,由于上一個(gè)#include命令已經(jīng)定義了該常量,所以預(yù)處理器不會(huì)向程序中添加任何內(nèi)容。于是,編譯成功完成。#ifdef 和 #endif是條件指令,我們稍后將對(duì)此進(jìn)行討論。

定義事物:#define 指令

在上一個(gè)例子中,我們用#define指令創(chuàng)建了一個(gè)常量,以決定是否包含一個(gè)庫(kù)。在官方文檔中,任何由#define指令定義的東西都被稱為macro(宏), 因此本文中我會(huì)一直沿用這個(gè)術(shù)語。該指令的語法如下:

#define macro_name macro_body

大多數(shù)Arduino初學(xué)者可能會(huì)對(duì)宏感到困惑。如果我定義一個(gè)宏:

#define X 10

那么這與以下變量聲明有什么區(qū)別呢?

int Y = 10;

同樣,這一切都?xì)w結(jié)為預(yù)處理器僅處理文本。遇到#define指令時(shí),預(yù)處理器會(huì)搜索其余的源代碼并將所有出現(xiàn)的“X”替換為“10”。這意味著與變量不同,宏的值永遠(yuǎn)不會(huì)改變。此外,您必須牢記預(yù)處理器只搜索以#define開頭的源代碼。讓我們看一下使用尚未定義的宏會(huì)發(fā)生什么情況。

int Y = X;
#define X 10
int Z = X;

void setup() {
 
}

void loop() {
 
}

編譯上述代碼會(huì)發(fā)生以下錯(cuò)誤:

pYYBAGPzFlWAbpBYAAGCLzCzabE068.jpg

預(yù)處理后的代碼如下所示:

int Y = X;
int Z = 10;

void setup() {

}

void loop() {
 
}

第一行包含X,它被看作一個(gè)變量。但是,該變量從未聲明,因此編譯停止。

盡管#define指令最常見的用途是創(chuàng)建帶名稱的常量,但是它可以做的遠(yuǎn)不止這些。例如,假設(shè)您想知道兩個(gè)給定數(shù)字中哪一個(gè)較小。您可以編寫一個(gè)實(shí)現(xiàn)此功能的函數(shù)。

int min(int a, int b) {
 if(a < b) {
   return(a);
 }
 return(b);
}

或者使用更簡(jiǎn)單的三元運(yùn)算符:

int min(int a, int b) {
 return((a < b) ? a : b);
}

但是,這兩個(gè)函數(shù)都將被編譯并占用寶貴的程序存儲(chǔ)空間。我們可以使用以下類似函數(shù)的宏來實(shí)現(xiàn)相同效果,但是占用的程序空間卻會(huì)變少。

#ifndef MIN
 #define MIN(A, B)     (((A) < (B)) ? (A) : (B))
#endif

現(xiàn)在,每個(gè)“MIN(A, B)”都會(huì)被替換為“(((A) < (B)) ? (A) : (B))”,其“A”和“B”可以是數(shù)字,也可以是變量。請(qǐng)注意,#define包含在相同的保護(hù)性結(jié)構(gòu)中,以防止用戶重復(fù)定義宏。

創(chuàng)建宏時(shí),您必須記住,系統(tǒng)將宏作為文本進(jìn)行處理。這就是為什么在上面的定義中,幾乎所有內(nèi)容都包含在括號(hào)中。請(qǐng)猜測(cè)以下運(yùn)算的結(jié)果。

#ifndef MULTIPLY
 #define MULTIPLY(A, B)     A * B
#endif

//some code...

int result = MULTIPLY(2 - 0, 3);

結(jié)果應(yīng)該是6,因?yàn)?–0=2,然后2x3=6,對(duì)吧?如果我告訴你結(jié)果是2呢?實(shí)際編譯的內(nèi)容如下:

int result = 2 - 0 * 3;

由于乘法優(yōu)先于減法,因此很明顯結(jié)果肯定是2,因?yàn)?x0=0,然后2-0=2。正確的版本如下所示:

#ifndef MULTIPLY
 #define MULTIPLY(A, B)     ((A) * (B))
#endif

條件編譯:#if指令

在前面的例子中,我使用了#ifndef指令,于是我可以檢查是否已經(jīng)包含了庫(kù)。該指令可用于實(shí)現(xiàn)僅用C/C++語言不可能實(shí)現(xiàn)的內(nèi)容:條件語句。這些指令的語法如下所示:

#if expression

  //compile this code

#elif different_expression
 
 //compile this different code

#else
 
 //compile this entirely different code

#endif

條件語句的常用功能是檢查一個(gè)宏是否已定義。為此,您可以使用幾個(gè)專門的指令:

#ifndef macro_name

  //compile this code if macro_name does not exist

#endif

我們已經(jīng)熟悉了上述內(nèi)容,因?yàn)槲覀冎笆褂么酥噶顏頇z查是否已包含庫(kù)。您也可以使用這個(gè)條件:

#ifdef macro_name

  //compile this code if macro_name exists

#endif

以上語句只是#if defined的簡(jiǎn)寫,可根據(jù)單個(gè)條件測(cè)試多個(gè)宏。請(qǐng)注意,每個(gè)條件都必須用#endif 指令結(jié)束,從而指定代碼的哪些部分受條件影響,哪些部分不受條件影響。

我們來看一個(gè)實(shí)際的例子。假設(shè)您編寫了一個(gè)庫(kù),并且希望它在Arduino UNO和Arduino Mega上都能正常工作。這主意不錯(cuò),對(duì)吧?便攜代碼總比為另一塊電路板修改庫(kù)更容易。但是,如果您的庫(kù)使用了SPI總線呢?該總線在Arduino UNO上用的是11-13引腳,但是在Mega上卻是50-52引腳。

那么您如何告訴編譯器根據(jù)不同開發(fā)板使用相應(yīng)的引腳呢?您猜對(duì)了——條件語法!根據(jù)您在Arduino IDE中選擇(“Tools” > “Board”菜單)的開發(fā)板,IDE將定義不同的宏,從而僅編譯與所選開發(fā)板相關(guān)的代碼部分!這非常強(qiáng)大,因?yàn)槟梢詫?shí)現(xiàn)以下功能:

#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
 
 //this will compile for Arduino UNO, Pro and older boards
 int _sck = 13;
 int _miso = 12;
 int _mosi = 11;

#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
 
 //this will compile for Arduino Mega
 int _sck = 52;
 int _miso = 50;
 int _mosi = 51;

#endif

怎么樣,漂亮吧??jī)H用三行代碼,我們就制作了一個(gè)多平臺(tái)便攜庫(kù)!另外,這正是RohmMultiSensor庫(kù)(適用于ROHM傳感器評(píng)估套件的輕量級(jí)Arduino庫(kù))如何知道應(yīng)該為所選傳感器編譯哪些代碼。如果您看一下頭文件RohmMultiSensor.h里面的內(nèi)容,您只會(huì)看到幾個(gè)#ifdef和幾個(gè)#include指令。由于所有特定傳感器代碼都存儲(chǔ)在單獨(dú)的.cpp文件中,因此將新傳感器添加到庫(kù)中很容易——只需創(chuàng)建另一個(gè)文件,然后創(chuàng)建與其他傳感器相同的#ifdef – #include – #endif結(jié)構(gòu)即可。完成!

提供反饋:#warning 和 #error 指令

我們最后要介紹的指令是#warning#error。兩者但是不言自明,語法如下:

#warning "message"

#error "message"

預(yù)處理器遇到這些指令時(shí),它會(huì)將message打印到Arduino IDE控制臺(tái)中。兩者之間的區(qū)別在于,發(fā)生#warning之后,編譯正常進(jìn)行,而#error則會(huì)完全停止編譯。

我們可以在前文的例子中使用這兩個(gè)語句:

#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)

  //this will compile for Arduino UNO, Pro and older boards
 int _sck = 13;
 int _miso = 12;
 int _mosi = 11;
 
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)

 //this will compile for Arduino Mega
 int _sck = 52;
 int _miso = 50;
 int _mosi = 51;
 
#else

 #error “Unsupported board selected!”

#endif

這樣,當(dāng)用戶嘗試為其他Arduino開發(fā)板(比如Yún、LilyPad等)編譯該庫(kù)時(shí),編譯會(huì)失敗,與沒有定義SPI引腳沒有任何關(guān)系。

結(jié)論

在本文中,我們介紹了C/C++預(yù)處理器的相關(guān)知識(shí)。希望您看過本文之后,就不會(huì)再害怕編譯、預(yù)處理器、或指令等術(shù)語了。我總結(jié)一下本文描述的最重要的幾點(diǎn)內(nèi)容:

編寫庫(kù)時(shí),請(qǐng)務(wù)必將其放在 #ifndef – #define – #endif結(jié)構(gòu)中。這個(gè)結(jié)構(gòu)我們已經(jīng)見過多次了。這可能會(huì)為您省去一些麻煩。定義類似函數(shù)的宏時(shí)同樣應(yīng)該這樣做。

編寫代碼時(shí),應(yīng)確保程序易于移植到其他Arduino板上。相信我,未雨綢繆要比出現(xiàn)不兼容問題之后再想法解決要容易得多。

分而治之!幾個(gè)較小的文件總比一個(gè)1000多行的大文件要好得多。

審核編輯:湯梓紅

聲明:本文內(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)投訴
  • 指令
    +關(guān)注

    關(guān)注

    1

    文章

    606

    瀏覽量

    35617
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6458

    瀏覽量

    186504
  • 預(yù)處理器
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    2216
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問如何使用預(yù)處理指令#pragma禁止優(yōu)化某段代碼?哪里有c2000編譯預(yù)處理指令的說明資料?

    本帖最后由 一只耳朵怪 于 2018-6-13 16:51 編輯 如何使用預(yù)處理指令#pragma禁止優(yōu)化某段代碼?哪里有c2000編譯預(yù)處理
    發(fā)表于 06-13 04:57

    Intel 8051兼容預(yù)處理器接口

    Intel 8051兼容預(yù)處理器接口
    發(fā)表于 02-12 12:12

    預(yù)處理器在Build Settings中定義錯(cuò)誤

    這個(gè)問題用PSoC Creator 3.3(3.3.0.410)進(jìn)行。你好社區(qū)我問你關(guān)于一個(gè)問題的幫助(Bug?)在PSoC Creator。我想要的是:在編譯環(huán)境中定義一個(gè)帶有處理器值的預(yù)處理器
    發(fā)表于 02-22 06:25

    怎么使用預(yù)處理程序指令

    你好, 我想使用預(yù)處理器指令進(jìn)行條件編譯。我有一段代碼,我想在定義預(yù)處理器指令時(shí)包含這些代碼。在SPC5Studio中定義它的位置?這需要哪些設(shè)置? 在此先感謝您的回復(fù)。 麥克風(fēng)。以
    發(fā)表于 06-21 07:21

    怎么使用#assert預(yù)處理程序指令?

    大家好。在我的源代碼中,我使用“assert”預(yù)處理器指令來檢查常量值的一致性。如果我以簡(jiǎn)單的方式使用它,通過直接賦值,一切如預(yù)期:define ABC 0x7Fassert ABC
    發(fā)表于 04-15 09:41

    STM32CubeIDE暗模式預(yù)處理器突出顯示錯(cuò)誤怎么解決?

    我在 Ubuntu 18.04 系統(tǒng)上運(yùn)行 STM32CubeIDE。我已將其切換為暗模式進(jìn)行編程,但代碼中的任何“ #if ”預(yù)處理器指令都有淺色背景。這使得無法閱讀。我已經(jīng)查看了語法著色的所有
    發(fā)表于 12-01 07:39

    處理器指令集設(shè)計(jì)

    處理器指令集設(shè)計(jì)垂直指令格式指令類型及其使用頻度CISC指令集特點(diǎn) RISC指令集特點(diǎn)
    發(fā)表于 10-29 17:13 ?64次下載
    微<b class='flag-5'>處理器</b><b class='flag-5'>指令</b>集設(shè)計(jì)

    預(yù)處理器的工作原理作用

    預(yù)處理器的工作原理作用,希望對(duì)學(xué)者們有幫助。
    發(fā)表于 10-29 11:40 ?0次下載

    基于FPGA的傳像光纖束圖像預(yù)處理器

    基于FPGA的傳像光纖束圖像預(yù)處理器,下來看看
    發(fā)表于 08-30 15:10 ?12次下載

    C語言預(yù)處理命令的分類和工作原理詳細(xì)說明

    C 語言編程過程中,經(jīng)常會(huì)用到如 #include、#define 等指令,這些標(biāo)識(shí)開頭的指令被稱為預(yù)處理指令,預(yù)處理
    發(fā)表于 11-25 10:34 ?18次下載
    C語言<b class='flag-5'>預(yù)處理</b>命令的分類和工作原理詳細(xì)說明

    C語言預(yù)處理指令及分類

    C/C++ 程序中的源代碼中包含以 # 開頭的各種編譯指令,這些指令稱為預(yù)處理指令。預(yù)處理指令
    的頭像 發(fā)表于 11-29 10:14 ?2222次閱讀

    嵌入式C預(yù)處理器的基本概念和常用指令

    在嵌入式系統(tǒng)開發(fā)中,C預(yù)處理器是非常重要的一部分,可以在編譯之前對(duì)源代碼進(jìn)行宏替換、條件編譯和包含等處理。在本文中,我們將介紹嵌入式C預(yù)處理器的基本概念和常用指令。
    的頭像 發(fā)表于 04-13 16:11 ?862次閱讀

    C語言有哪些預(yù)處理操作?

    C語言的預(yù)處理是在編譯之前對(duì)源代碼進(jìn)行處理的階段,它主要由預(yù)處理器完成。預(yù)處理器是一個(gè)獨(dú)立的程序,它負(fù)責(zé)對(duì)源代碼進(jìn)行一些文本替換和處理,生成
    的頭像 發(fā)表于 12-08 15:40 ?570次閱讀
    C語言有哪些<b class='flag-5'>預(yù)處理</b>操作?

    C語言中的預(yù)處理器

    所有的預(yù)處理器命令都是以井號(hào)(#)開頭。它必須是第一個(gè)非空字符,為了增強(qiáng)可讀性,預(yù)處理器指令應(yīng)從第一列開始。
    發(fā)表于 03-01 12:16 ?791次閱讀
    C語言中的<b class='flag-5'>預(yù)處理器</b>

    處理器指令的獲取過程

    處理器指令的獲取是計(jì)算機(jī)執(zhí)行程序過程中的關(guān)鍵環(huán)節(jié),它決定了微處理器如何對(duì)數(shù)據(jù)和指令進(jìn)行處理。以下將詳細(xì)闡述微
    的頭像 發(fā)表于 10-05 15:16 ?185次閱讀