UART,IIC,SPI總線(通信協議)

嵌 入 式 軟 件 筆 試 題

要求:閉卷考不能翻書、不能開電腦);作答時間50分鐘共10道題目。

  1. volatile的作用有哪些

volatile: 防止編譯器對代碼進行優化,直接從內存中取最新的值 應用場景: 1、多線程使用同一資源時 2、單片機開發中

volatile 的作用:

1. 核心功能:告知編譯器變量的值可能被當前代碼塊外的因素(如中斷服務程序、硬件寄存器、其他線程)異步修改,禁止編譯器對該變量進行 “將內存值緩存到寄存器” 的優化,確保每次訪問都直接讀取內存最新值。

應用場景:

1. 多線程 / 多任務環境中,共享變量(如線程間標志位);

2. 嵌入式硬件寄存器訪問(如單片機的 GPIO 數據寄存器、定時器計數寄存器);

3. 中斷服務程序(ISR)與主程序共享的全局變量。

  1. 關鍵字const 和static有什么含意

Const :“只讀屬性”,限制變量 / 指針 / 參數的值不可被修改,編譯時會檢查寫操作并報錯,

Static:靜態函數,可以延長生命周期和限定作用域

1. const 關鍵字含義
用于定義 “只讀屬性”,限制變量 / 指針 / 參數的值不可被修改,編譯時會檢查寫操作并報錯,常見場景:
- 修飾變量:const int a = 10;(a 的值不可修改);
- 修飾指針:
-?const int* p(指針指向的不可改);
-?int* const p(指針本身地址不可改);
- 修飾函數參數:void func(const int x)(函數內不可修改 x);
- 修飾函數返回值:const int func()(返回值不可被賦值修改)。

2. static 關鍵字含義
用于 “延長生命周期” 和 “限定作用域”,分三類場景:
- 局部靜態變量:void func(){ static int a = 0; a++; }(生命周期延長至程序結束,作用域僅在函數內,初始化僅 1 次);
- 全局靜態變量:static int g_a = 10;(作用域限定在當前.c 文件,避免外部文件通過extern調用);
- 靜態函數:static void func(){}(作用域限定在當前.c 文件,防止與外部文件函數重名沖突)。

  1. 用變量a給出下面的定義
    1)?一個整型數 ????????int a
    2)一個指向整型數的指針 ?int *a
    3)一個指向指針的的指針,它指向的指針是指向一個整型數 int **a;
  2. 下面的代碼輸出是什么,為什么?(printf為打印函數)

void foo(void)
{
unsigned int a = 6;
int b = -20;
(a+b > 6) ? printf("> 6") : printf("<= 6");
}

輸出是>6,因為不同無符號 / 有符號整型運算時,會觸發 “隱式類型轉換”—— 將int(有符號)轉換為unsigned int(無符號):

C 語言中,不同無符號 / 有符號整型運算時,會觸發 “隱式類型轉換”—— 將int(有符號)轉換為unsigned int(無符號):
1. 變量值:a = 6(unsigned int,二進制為000...000110),b = -20(int,32 位補碼為111...1101100);
2. 轉換后:b作為 unsigned int 時,值為2^32 - 20 = 4294967276
3. 計算:a + b = 6 + 4294967276 = 4294967282(遠大于 6),故執行printf("> 6")

  1. 中斷是嵌入式系統中重要的組成部分,這導致了許多編譯開發商提供一種擴展:讓標準C支持中斷,產生了一個新的關鍵字__interrupt。下面的代碼就使用了__interrupt關鍵字去定義了一個中斷服務子程序,請指出以下這段代碼錯誤的地方。
    __interrupt double compute_area(double radius)
    {
    double area = PI * radius *radius;
    printf("nArea = %f", area);
    return area;
    } ???該中斷服務子程序(ISR)存在 5 處核心錯誤
    1.?返回值錯誤:ISR 是異步觸發的 “被動執行函數”,沒有調用者接收返回值,必須定義為void,不能返回double
    2.?參數錯誤:中斷觸發時無法傳遞參數(無調用上下文),ISR 不能帶參數(如double radius);
    3.?調用非可重入函數printf是標準庫函數,內部包含浮點運算、全局緩沖區操作,且可能依賴中斷使能,屬于 “非可重入函數”;ISR 要求 “快進快出”,禁止調用非可重入、耗時函數;
    4.?浮點運算風險:嵌入式系統中,double浮點運算需硬件 FPU 支持,且運算耗時較長,不符合 ISR “短延遲” 要求;
    5.?PI 未定義:若未通過#define PI 3.14159宏定義 PI,編譯會報 “未聲明標識符” 錯誤(非核心,但需修正)。
  2. 嵌入式系統中經常要用到無限循環,用C語言編寫死循環的代碼

?????While(1)1.?while(1){}(最常用,明確循環體為空);
2.?for(;;){}for循環的初始化、條件、增量均可省略,條件省略視為 “永真”);
3.?do{}while(1);(先執行一次循環體,再判斷永真條件)。

  1. 給定一個整型變量a,寫兩段代碼,第一個設置a的bit 3,第二個清除a?的bit 3。在以上兩個操作中,要保持其它位不變。

?????設置: aI=(0x3<<偏移量) ?設置 a&= ~(0x3<<偏移量)

  1. 已知?int 數組a[1000],需要將數組的后 100 個數據移動到前面,前面的數據依次后退。例如,若數組初始存入的數據是?1、2、3……1000,移動后的數據結果是?901、902……1000、1、2……900。用代碼實現。

使用memcoy

#include <string.h>

void move_array(int a[], int n, int m) {

????int t[100];

????memcpy(t, a + n - m, m * sizeof(int));

????for(int i = n - 1; i >= m; i--)

????????a[i] = a[i - m];

????memcpy(a, t, m * sizeof(int));

}

int main() {

????int a[1000];

????for(int i = 0; i < 1000; i++)

????????a[i] = i + 1;

????move_array(a, 1000, 100);

????return 0;

}

  1. ?簡述SPI的傳輸特點、方式并畫出工作時序

傳輸特點:

1.通信屬性:串行(數據逐位傳),同步(依賴sclk(spi)時鐘同步),全雙工(同一時鐘周期內,主機經mosi發、從機經miso發,雙向同時傳);

  1. 速率與數據::“高速 3.4Mbps” 是 HS-mode,需區分 “標準模式(100Kbps)、快速模式(400Kbps)、高速模式(3.4Mbps)速率達mbps級;最小單位為字節(8/16位),1時鐘周期傳1位,1字節需8時鐘周期;
  2. 主從模式:支持主從機,常用“單主機多從機”,主機控制sck時鐘和nss片選,從機被動響應
  3. 從機選擇:通過專屬的nss/ncs片選線,主機拉低目標從機nss電平建立通信,其他從機nss保持高電平不響應

傳輸方式:

  1. 主從邏輯:主機輸出sck和nss,經mosi發數據;從機按sck節奏收mosi數據,經miso回傳數據
  2. 全雙工實現:如主機發 0xFF、從機發 0x00,SCK 上升沿時二者分別經 MOSI/MISO 發 1 位,下降沿時分別讀對方數據;8 時鐘周期后,雙方均完成 “發 + 收”;
  3. 多從機傳輸:四線制連接(sck、mosi、miso共線,各從機獨立接主機nss),主機拉低對應從機nss實現“一對一”通信,避免沖突。

工作時序圖:

  1. 簡述I2C的傳輸特點、方式并畫出工作時序(從機地址、寄存器地址、數據自定義)

一、I2C 傳輸特點

  1. 傳輸類型:串行(逐位傳)、同步(依賴 SCL 時鐘同步)、半雙工(同一時間單向傳);
  2. 硬件結構:僅 2 根雙向線(SCL 時鐘、SDA 數據),均需外接上拉電阻(空閑時保高電平、穩電路);
  3. 速率分級:低速 100Kbps、中速 400Kbps、高速 3.4Mbps;
  4. 主從架構:支持單 / 多主機多從機,主機主動發起 / 結束通信,從機被動響應;
  5. 唯一尋址:從機均有唯一 7 位地址(如 SHT20 為 0x40),主機通過地址定位從機;
  6. 應答機制:每傳 1 字節(8 位),接收器第 9 時鐘周期回 ACK(0,成功)或 NACK(1,失敗 / 停止)。

二、I2C 傳輸方式

1. 主機→從機(寫傳輸)

  1. 主機發起始信號(S),占總線;
  2. 發 “7 位從機地址 + W(0)”(如 SHT20 寫地址 0x80);
  3. 從機回 ACK;
  4. 發目標寄存器地址(如 SHT20 溫度寄存器 0xE3);
  5. 從機回 ACK;
  6. 發自定義數據(如配置值 0x55);
  7. 從機回 ACK;
  8. 主機發終止信號(P),釋總線。

2. 主機←從機(讀傳輸,先寫后讀)

  1. 主機發起始信號(S);
  2. 發 “7 位從機地址 + W”(如 0x80),從機回 ACK;
  3. 發目標寄存器地址(如 SHT20 濕度寄存器 0xE5),從機回 ACK;
  4. 主機發重復起始信號(S);
  5. 發 “7 位從機地址 + R(1)”(如 SHT20 讀地址 0x81),從機回 ACK;
  6. 從機發自定義數據(如 2 字節濕度值 0x1234),每字節主機回 ACK;
  7. 主機收完回 NACK(停傳);
  8. 主機發終止信號(P)。

三、I2C 工作時序(以 SHT20 讀溫度為例)

1. 時序參數

  • 從機地址:7 位 0x40;
  • 寄存器地址:0xE3(溫度寄存器);
  • 自定義數據:2 字節溫度值(0x1A、0x5B);
  • 時鐘周期:1 個高 + 低電平,傳 1 位需 1 周期。

2. 時序文字示意

信號

時序(高電平 “┌───┐”,低電平 “───”)

階段說明

SCL

──┐ ┌───┐×8 ┌───┐ ┌───┐×8 ┌───┐×2 ┌───┐

時鐘同步

SDA

──┼───┼───┼×8───┼───┼───┼×8───┼───┼───┼×2───┼───┘

數據 / 控制信號

階段

S → 寫尋址(0x80)→ ACK → 寄存器(0xE3)→ ACK → 重復 S → 讀尋址(0x81)→ ACK → 數據(0x1A→ACK→0x5B→NACK)→ P

傳輸流程

3. 時序步驟

  1. S(起始):SCL 高時,SDA 高→低(下降沿);
  2. 寫尋址:SCL 高時,SDA 傳 0x80(8 位),從機回 ACK;
  3. 寄存器地址:SCL 高時傳 0xE3,從機回 ACK;
  4. 重復 S:SCL 高時,SDA 高→低;
  5. 讀尋址:SCL 高時傳 0x81,從機回 ACK;
  6. 傳數據:SCL 高時從機傳 0x1A(高 8 位),主機回 ACK;再傳 0x5B(低 8 位),主機回 NACK;
  7. P(終止):SCL 高時,SDA 低→高(上升沿)。

答題區:

答題要求:閉卷考試(不能翻書、不能開電腦);作答時間50分鐘;共10道題目。

(請保留第原題目,答題區請備注好做題序號;只能寫在答題紙上拍照粘貼到文檔里-答題區,請保證照片清晰)

發送時請將文檔命名更改為:本人姓名_軟件筆試題

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/923584.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/923584.shtml
英文地址,請注明出處:http://en.pswp.cn/news/923584.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通信模組性能調優

通信模組性能調優 1 背景 2 高通平臺軟硬加速 2.1 NSS 2.2 SFE 2.3 PPE 3 CPU 負載均衡設置 3.1 啟用內核 RPS&RFS 功能 3.2 網卡隊列修改建議 3.3 調整負載前后的 CPU 使用對比 3.4 網卡中斷均衡 3.4.1 netdev_max_backlog 3.4.2 中斷綁核 3.5 CPU性能模式 3.6 熱管理 3.7…

消息隊列kafka的事務特性

kafka的java客戶端producer也支持事務消息嗎&#xff1f;具體是啥事務呢&#xff1f; 是的&#xff0c;Kafka的Java客戶端Producer確實支持事務消息。讓我詳細解釋Kafka事務的概念和使用方法。 Kafka事務的主要特點&#xff1a; Producer Transactions&#xff1a;確保多個消息…

用Python實現自動化的Web測試(Selenium)

Python作為數據科學和自動化領域的主流語言&#xff0c;在網絡爬蟲開發中占據著重要地位。本文將全面介紹Python爬蟲的技術棧、實現方法和最佳實踐。爬蟲技術概述網絡爬蟲&#xff08;Web Crawler&#xff09;是一種按照特定規則自動抓取互聯網信息的程序。它可以自動化地瀏覽網…

「Memene 摸魚日報 2025.9.17」上海張江人工智能創新小鎮正式啟動,華為 DCP 技術獲網絡頂會獎項

theme: condensed-night-purple 以下內容包括「人工智能生成內容」 上海張江人工智能創新小鎮正式啟動&#xff0c;華為 DCP 技術獲網絡頂會獎項 &#x1f44f;在昨天&#xff08;2025.9.16&#xff09;&#xff0c;AI領域有這些內容可能值得你關注&#xff1a; 上海張江人工智…

Vehiclehal的VehicleService.cpp

VehicleService.cpp 是 Android Automotive OS 中負責車輛相關功能的核心服務組件&#xff0c;主要處理車身信息獲取及狀態設置接口&#xff0c;通過 HIDL&#xff08;Hardware Interface Definition Language&#xff09;接口與系統框架層交互。 ?12核心功能VehicleService.c…

《LINUX系統編程》筆記p11

公共資源也稱為共享資源&#xff0c;是指可以被多個并發進程或線程共同訪問&#xff08;讀取或寫入&#xff09;的系統資源。臨界資源是公共資源的一個子集。特指那些一次僅允許一個進程或線程訪問的公共資源。如果一個進程正在使用它&#xff0c;其他試圖訪問該資源的進程必須…

spring-kafka消費異常處理

默認的消費異常處理 默認情況下&#xff0c;如果程序沒有顯式做任何的異常處理&#xff0c;spring-kafka會提供一個默認的DefaultErrorHandler, 它會使用FixedBackOff做重試&#xff0c;會不間斷的連續重試最多9次&#xff0c;也就是說一個消息最多會被消費10次。如果重試次數耗…

leecode73 矩陣置零

我的思路 這個題目不難&#xff0c;就是一句話&#xff0c;遍歷這個矩陣的時候&#xff0c;當遇到0的時候就把該行該列改為0&#xff0c;同時為了不影響后續的遍歷&#xff0c;我們可以將這個遍歷和修改分為兩個數組。使用mn的輔助空間 class Solution {public void setZeroe…

Spring Boot 與前端文件上傳跨域問題:Multipart、CORS 與網關配置

前言在前后端分離架構下&#xff0c;文件上傳是一個常見功能。但在 Spring Boot 項目中&#xff0c;我們經常會遇到前端調用接口上傳文件時出現 跨域問題&#xff0c;表現為&#xff1a;瀏覽器控制臺報錯&#xff1a;Access-Control-Allow-Origin 缺失或不匹配。使用 FormData …

快速解決云服務器的數據庫PhpMyAdmin登錄問題

打開PhpMyAdmin數據庫管理器登錄頁面賬號密碼就是你的用戶名&#xff08;如YiXun&#xff09;和密碼注意&#xff1a;root賬戶的密碼&#xff0c;點擊下面的“root密碼”即能看到或修改PhpMyAdmin無法打開如果打不開&#xff1a;在數據庫&#xff0c;點擊PHPMyAdmin&#xff0c…

vite+vue3中使用FFmpeg@0.12.15實現視頻編輯功能,不依賴SharedArrayBuffer!!!

FFmpeg0.12.15完全不依賴SharedArrayBuffer!!!強烈推薦使用 本文章主要是在vitevue3項目中使用FFmpeg&#xff0c;只展示了如何在項目中引入和基礎的使用 更多詳細參數可參照 ffmpeg官網https://ffmpeg.org/ 一、安裝FFmpeg 可通過npm直接安裝 npm install ffmpeg/core0.12.10…

構網型5MW中壓儲能變流升壓一體機技術方案

1 構網型儲能背景概述1.1 新型電力系統亟需構網支撐眾所周知&#xff0c;新型電力系統具有兩高特征&#xff1a;高比例新能源大規模并網、高比例電力電子大范圍接入。近年來風光裝機占比越來越高&#xff0c;而傳統火電裝機占比越來越低&#xff0c;并在2023年首次降至50%以下…

SRE 系列(七)| 從技術架構到團隊組織

目錄SRE落地與組織架構實踐技術架構與組織架構的匹配技術架構示例運維職責分工技術保障體系SRE 多角色團隊總結SRE落地與組織架構實踐 在落地 SRE 時&#xff0c;很多團隊最關心的問題之一就是組織架構&#xff1a;我們究竟需要怎樣的團隊形態&#xff0c;才能支撐微服務和分…

香港期權市場的主要參與者有哪些?

本文主要介紹香港期權市場的主要參與者有哪些&#xff1f;香港期權市場作為全球重要的金融衍生品市場&#xff0c;其參與者結構呈現多元化、專業化的特征&#xff0c;主要涵蓋以下核心群體。香港期權市場的主要參與者有哪些&#xff1f;1. 機構投資者&#xff08;主導力量&…

搜維爾科技:全身可穿戴Teslasuit動捕服的功能,自立式FES裝置

功能性電刺激 (FES) 設備廣泛應用于康復和醫療實踐。其底層技術利用低能量電脈沖&#xff0c;在中風、脊髓損傷、多發性硬化癥、腦癱等各種疾病患者中人工產生身體運動。一般來說&#xff0c;FES系統可以分為三類&#xff1a;開環、有限狀態控制和閉環方法。這三種方法描述了 F…

【深度學習新浪潮】MoE是什么技術?

混合專家模型(Mixture of Experts,MoE)是大模型時代提升計算效率與模型能力的核心技術之一。其核心思想是將復雜任務分解為多個子任務,通過動態路由機制激活特定專家網絡處理輸入數據,從而在保持模型容量的同時大幅降低計算成本。以下是技術細節與實際應用的深度解析: 一…

Java進階教程,全面剖析Java多線程編程,實現Callable接口實現多線程,筆記05

Java進階教程&#xff0c;全面剖析Java多線程編程&#xff0c;實現Callable接口實現多線程&#xff0c;筆記05 參考資料 多線程&JUC-05-多線程的第三種實現方式一、實現Callable接口實現多線程 二、三種方式對比 優點缺點繼承Thread類編程比較簡單&#xff0c;可以直接使…

軌道交通絕緣監測—軌道交通安全的隱形防線

軌道交通絕緣監測作為保障行車安全的核心環節&#xff0c;正面臨多重技術與環境挑戰。復雜運營環境是首要痛點&#xff0c;隧道內高濕度&#xff08;月均濕度達95%&#xff09;會增大鋼軌表面電導率&#xff0c;霧氣中的鹽分更會加速扣件絕緣性能下降&#xff0c;導致過渡電阻驟…

tar-符號連接(軟連接)

1.符號連接是什么符號鏈接&#xff08;symbolic link&#xff0c;也叫軟鏈接&#xff09;本質上是一個 指向路徑的特殊文件。例如&#xff1a;ln -s /etc/passwd passwd_link這會創建一個叫 passwd_link 的文件&#xff0c;但它本身不存放 /etc/passwd 的內容&#xff0c;而是存…

ffmpeg切割音頻

ffmpeg切割音頻 我希望對指定音頻切割&#xff0c;按照開始時間&#xff0c;結束時間&#xff0c;切割成新文件&#xff0c;自動保存&#xff0c;非常好用 step1: from pydub import AudioSegment import os# 配置FFmpeg路徑&#xff08;確保路徑正確&#xff09; ffmpeg_path …