99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

嵌入式工程師去面試可能被問到的問題集錦

大家好,很高興和各位一起分享我的文章,喜歡和支持我的工程師,一定記得給我點贊、收藏、分享。

加微信[xyzn3333]與作者溝通交流,免費獲取更多單片機與嵌入式的海量電子資料。

Q:什么是ISR?

A:ISR 是指中斷服務程序。 這些是存儲在特定內存地址的函數,當發生某種類型的中斷時會調用這些函數。 Cortex-M 處理器系列具有管理中斷執行的 NVIC

Q:我們可以給ISP傳遞參數或從ISR返回一個值嗎?為什么?

A:ISR 不返回任何內容并且不允許傳遞任何參數。 

當硬件或軟件中斷發生時會調用 ISR,它不會被任何代碼調用,所以這就是沒有參數傳遞到 ISR 的原因。因為它不會被任何代碼調用,所以它不會有返回值。

Q:什么是 volatile 關鍵字?

A:volatile 關鍵字是一個類型限定符,可防止對象進行編譯器優化。根據 C 標準,具有 volatile 限定類型的對象可能會以實現未知的方式進行修改或具有其他未知的副作用。您也可以說 volatile 限定對象的值可以隨時更改,而無需代碼采取任何操作。如果對象由 volatile 限定符限定,則每次程序訪問該對象時,編譯器都會從內存中重新加載該值,這意味著它可以防止將變量緩存到寄存器中。從內存中讀取值是檢查值不可預測變化的唯一方法。

Q:標準C語言和嵌入式C語言有什么區別?

A:C語言:是一種通用編程語言,廣泛用于設計任何類型的基于桌面的應用程序。 它是一種用于開發操作系統的系統編程語言。 C 語言的主要特點包括對內存的低級訪問、一組簡單的關鍵字和干凈的風格,這些特點使 C 語言適用于操作系統或編譯器開發等系統編程。 本質上它采用原生平臺開發方案,即它開發的應用程序是平臺相關的,只能在單一平臺上使用。嵌入式 C:是標準C的擴展,而不能說是標準C的一部分。嵌入式C語言用于開發基于微控制器的應用程序。 嵌入式C語言對標準C的擴展是I/O硬件尋址、定點算術運算、訪問地址空間等。

Q:C 中的 const 和 volatile 限定符有什么區別?

A:const 關鍵字是編譯器強制執行的,它表示程序無法更改對象的值,這意味著它使對象成為不可修改的類型。 讓我們看一個例子,

const int a = 0;

如果我們嘗試修改“a”的值,我們將得到編譯器錯誤,因為“a”用 const 關鍵字限定,防止更改“a”(整數變量)的值。

volatile 會阻止任何編譯器優化,并表示對象的值可以被程序控制之外的東西更改,因此編譯器不會對對象做出任何假設。 看個例子,

    volatile int a;

    當編譯器看到上面的聲明時,它會避免對“a”做出任何假設,并在每次迭代中從分配給“a”的地址讀取值。

    Q:C中的變量可以既是const又是volatile嗎?

    A:是的,可以同時使用 const 和 volatile。

    將 volatile 和 const 關鍵字一起使用的一個重要用途是在訪問 GPIO 寄存器時。在 GPIO被配置為輸入的情況下,讀取到的值將取決于外部因素(如開關或其他設備的輸出信號)的改變。在這種情況下, volatile 發揮著重要作用,并確保編譯器始終從 GPIO 地址讀取值并避免做出任何優化。使用 volatile 關鍵字后,無論何時訪問端口,您都會獲得正確的值,但仍然存在另一個問題,因為指針不是 const 類型,當您的程序更改了指針的指向地址時,所獲取的數值就是錯誤的,這樣我們就必須創建一個帶有 volatile 關鍵字的常量指針。

    定義的用法為:

    int volatile * const PortRegister;

    理解:

    Q:常用的使用volatile的場合?

    A:1、訪問內存映射外設寄存器或硬件狀態寄存器。

    #define COM_STATUS_BIT  0x00000006
    
    uint32_t const volatile * const pStatusReg = (uint32_t*)0x00020000;
    
    unit32_t GetRecvData()
    {
        unit32_t RecvData;
        
        //Code to receive data
        while (((*pStatusReg)  & COM_STATUS_BIT) == 0)
        {
            // Wait until flag does not set
            //Received data in RecvData
    
        }
        return RecvData;
    }

    2、在多個線程之間共享全局變量或緩沖區

    3、在中斷例程或信號處理程序中訪問全局變量

    volatile int giFlag = 0;
    
    ISR(void)
    {
        giFlag = 1;
    }
    
    int main(void)
    {
    
        while (!giFlag)
        {
            //do some work
        }
    
        return 0;
    }

    Q:什么是中斷延遲?

    A:中斷延遲是處理器響應中斷請求所用的時鐘周期數。 這個時鐘周期數是在中斷請求的發生和中斷處理程序的第一條指令之間計數。

    Cortex-M 處理器的中斷延遲非常低。 在下表中列出了 Cortex-M 處理器的中斷延遲。

    Q:如何減少中斷延遲?

    A:中斷延遲取決于許多因素,我在下面的陳述中提到了一些因素。

    • 平臺和中斷控制器。
    • CPU 時鐘速度。
    • 定時器頻率
    • 緩存配置。
    • 應用程序。

    因此,通過正確選擇平臺和處理器,我們可以輕松減少中斷延遲。 我們還可以通過縮短 ISR 并避免在 ISR 內調用函數來減少中斷延遲。

    Q:在中斷服務程序(ISR) 中調用printf() 是否安全?

    A:不建議在接ISR中調用printf()

    Q:可以在 ISR 中放置斷點嗎?

    A:可以設置斷點,但是不建議這么做。

    Q:在ISR中可以調用任何函數嗎?

    A:是的,但是不建議在中斷中直接調用函數;建議在中斷中先設置相關標志或執行數據準備,在主循環中進行數據處理。

    Q:什么是中斷嵌套?

    A:在嵌套中斷系統中,即使正在執行中斷服務函數,也可以隨時隨地進行中斷。 但是,只有最高優先級的 ISR 會立即執行。 優先級次高的 ISR 將在最高優先級的 ISR 完成后執行。

    嵌套中斷系統的規則是:

    • 所有中斷都必須被設定中斷優先級。
    • 初始化后,任何中斷都可以隨時隨地發生。
    • 如果低優先級 ISR 被高優先級中斷中斷,則執行高優先級 ISR。
    • 如果高優先級 ISR 被低優先級中斷中斷,則高優先級 ISR 繼續執行。
    • 必須按時間順序執行相同優先級的 ISR

    Q:ARM Cortex 中的NVIC是什么?

    A:Cortex-M 處理器系列中的嵌套向量中斷控制器 (NVIC) 是具有極其靈活的中斷優先級管理的中斷控制器的一個示例。 它支持可編程優先級、自動嵌套中斷支持以及對多個中斷屏蔽的支持,同時仍然非常易于程序員使用。NVIC 的 Cortex-M3 和 Cortex-M4 處理器支持多達 240 個中斷輸入,具有 8 個多達 256 個可編程優先級。

    Q:可以更改 Cortex-M 處理器系列的中斷優先級嗎?

    A:可以。

    Q:什么是啟動代碼,在進入main函數前芯片都做了什么工作?

    A:芯片上電后,進入 main 函數之前調用的代碼是啟動代碼,一般是用匯編語言編寫的一小段代碼。啟動代碼至少包括以下部分

    • 堆棧區的聲明
    • 堆區的聲明
    • 矢量表
    • 重置處理程序代碼
    • 其他異常處理程序代碼

    Q:如何訪問內存的固定地址?

    A:

    //Memory address, you want to access
    #define RW_FLAG 0x1FFF7800
    
    //Pointer to access the Memory address
    volatile uint32_t *flagAddress = NULL;
    
    //variable to stored the read value
    uint32_t readData = 0;
    
    //Assign addres to the pointer
    flagAddress = (volatile uint32_t *)RW_FLAG;
    
    //Read value from memory
    * flagAddress = 12; // Write
    
    //Write value to the memory
    readData = * flagAddress;

    Q:什么是堆棧溢出?

    A:如果您的程序嘗試訪問超出可用堆棧內存的限制,則會發生堆棧溢出。換句話說,如果調用堆棧指針超出堆棧邊界,則可以說發生堆棧溢出。如果發生堆棧溢出,程序可能會崩潰,或者可以說是堆棧溢出導致的分段錯誤。

    Q:I2C和SPI的區別是什么?

    A:在嵌入式系統中,I2C和SPI都扮演著重要的角色。這兩種通信協議都是同步通信的例子,但仍然有一些重要的區別。I2C 和 SPI 通信協議之間的重要區別。

    • I2C 支持半雙工,而 SPI 是全雙工通信。
    • I2C 只需要兩線進行通信,而 SPI 需要三線或四線進行通信(取決于要求)。
    • 與 SPI 通信相比,I2C 速度較慢。
    • I2C 比 SPI 消耗更多功率。
    • I2C 比 SPI 更不易受噪聲影響。
    • 與 SPI 通信協議相比,I2C 的實現成本更低。
    • I2C 工作在線路和邏輯上,它有一個上拉電阻,而在 SPI 的情況下不需要上拉電阻。
    • 在 I2C 通信中,我們在每個字節后獲得確認位,SPI 通信協議不需要。
    • I2C 確保從設備接收發送的數據,而 SPI 不驗證數據是否正確接收。
    • I2C 支持多主機通信,而 SPI 不支持多主機通信。
    • I2C 和 SPI 之間的一大區別在于,I2C 支持同一總線上的多個設備,而無需任何額外的選擇線(基于設備地址工作),而 SPI 需要額外的信號(從選擇線)線來管理同一總線上的多個設備。
    • I2C 支持仲裁,而 SPI 不支持仲裁。
    • I2C 支持時鐘延長,而 SPI 不支持時鐘延長。
    • I2C 可以被一個未能釋放通信總線的設備鎖定。
    • 由于起始位和停止位,I2C 有一些額外的開銷。
    • I2C 更適合長距離,而 SPI 更適合短距離。

    Q:RS232和RS485有什么區別?

    A:RS232 和 RS485 之間的一些重要區別

    聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
    覺得內容不錯的朋友,別忘了一鍵三連哦!
    贊 3
    收藏 4
    關注 51
    成為作者 賺取收益
    全部留言
    0/200
    成為第一個和作者交流的人吧
    主站蜘蛛池模板: 色窝窝无码精品一区二区 | 日本片成人在线观看 | 久久蜜桃资源一区二区老牛 | 国产欧美性 | 国产精品5c5c5c | 亚洲午夜精品一区二区三区 | 中国丰满大乳乳液 | 久久午夜激情视频 | 久久久护士 | 天天舔日日操 | 视频在线在亚洲 | www日本tv| 欧美日韩亚洲天堂 | 国产熟睡乱子伦视频在线播放 | 亚洲精品视频在线观看网站 | 国产成在线观看免费视频成本人 | 中文字幕第25页 | 精品国产一区二区三区麻豆小说 | 国产高清一区二区三区 | 亚洲国产精品日韩AV专区 | h片在线免费观看 | 欧美亚洲精品一区二区在线观看 | 国产精品一区二区三区99 | 日本在线综合 | 精品国产丝袜自在线拍国语 | 成人一区在线观看 | 人伦人与牲囗免费观看 | 色影天堂 | 久久久久国色AⅤ免费看 | 成在人线AV无码免费高潮喷水 | 国产aⅴ夜夜欢一区二区三区 | 日韩欧美毛片免费观看 | 337P亚洲日本中国大胆69 | 国产免费人成视频网站在线18 | 欧美日韩视频在线播放 | 青涩av | 麻豆av免费网站 | 久久久久久久久艹 | 浪荡艳妇爆乳JUFD汗だく肉感 | 91av一二三区 | 玖玖精品国产 |