2025年5月17日人生中第一次面試
緊張是藏不住的。但是不應該的。
目錄
0.準備一份合適的自我介紹
1.結構體內存對齊問題
2.變量在內存中的存儲模式
3.嵌入式中程序框架有哪些
4.程序代碼設計要遵循什原則
5.版本號書寫
6.單片機最小系統板有哪些組成
必須:
非必須:
7.復位方式有哪些
硬件復位
軟件復位
其他復位類型
8.hex文件和bin文件有什么區別
9.如何導出bin文件,如何在bin文件中添加第三方的校驗或者序列號
導出bin文件
添加校驗
序列號管理
10.嵌入式中階梯形狀的波形可以用哪些實現
11.12位ADC中測到的數值為n對應的電壓是多少
12.采樣電阻作用是什么
1. 電流與電壓測量
2. 系統保護與安全控制——監控電壓電流
3. 功率計算與能效分析
13.一個GPIO如何控制一個多個按鍵
二極管擴展法
大概就是電阻配合二極管配合電路網絡生成不同邏輯電平(數字輸入)或者電壓(ADC)
電阻分壓法(ADC方案)
充放電時間檢測法(GPIO+RC方案)
14.按鍵LED有哪些模式
15.PA0和PB0引腳能不能一起作為外部中斷信號輸入
16.STM32中起始地址是多少,每次讀取寫入數據的長度大小是多少,他的擦除方式有哪些
Flash起始地址——0x0800 0000 結束地址取決于芯片型號
讀寫數據長度
擦除方式
17.如何獲取芯片序列號
18.如何降低單片機功耗
低功耗模式
降低頻率
關閉未使用的外設
減少CPU的計算負載
使用DMA
19.如何快速PID調參
20.一個完整的產品設計開發需要導出哪些設計文件
一、需求分析階段
二、硬件設計階段
三、軟件開發階段
四、測試驗證階段
五、生產制造階段
六、認證與合規
七、產品交付文件
八、維護與迭代
21.如何快速掌握單片機應用
0.準備一份合適的自我介紹
1.結構體內存對齊問題
數據地址是數據類型大小的整數倍,則觸發單周期訪問。未對齊訪問會觸發總線錯誤(HardFault)或產生多次內存操作。
2.變量在內存中的存儲模式
小端序
3.嵌入式中程序框架有哪些
框架類型 | 資源占用 | 實時性 | 開發復雜度 | 適用場景 |
---|---|---|---|---|
順序執行的前后臺系統 | 低 | 差 | 簡單 | 簡單MCU控制 |
時間片輪詢系統 | 中 | 一般 | 中等 | 中等復雜度任務輪詢 |
RTOS | 高 | 高 | 復雜 | 高實時性、多任務系統 |
Linux嵌入式架構 | 高 | 一般 | 復雜 | 復雜功能設備(如網關、服務器) |
硬件抽象層框架 | 中 | 一般 | 中等 | 跨平臺開發、快速原型 |
狀態機
4.程序代碼設計要遵循什原則
1、簡單、明了、清晰:
2、精簡
3、保持第三方代碼風格
4、減少封裝
5.注釋信息:文件信息注釋(文件開頭)、函數的注釋、代碼注釋
作用域標識
- 全局變量:以
g_
前綴標識(如g_system_state
),避免濫用全局變量。 - 靜態變量:以
s_
前綴標識(如s_counter
),提升模塊封裝性。 - 結構體變量:以
st_
前綴標識(如st_date
),區分普通變量。 - 指針:以
p_
前綴標識(如p_data
),明確指針類型
場景 | 規范命名 | 不規范命名 | 說明 |
全局變量、文件名 | g_sensor_value | value | 明確作用域和用途。 |
結構體成員 | st_time.year | year | 區分結構體內外變量。 |
局部變量 | sensor_value (小寫,無須作用域) | value | 明確數據來源和類型。 |
函數 | App_InitMotor(首字母大寫) | InitMotor | 明確模塊歸屬 |
函數指針 | p_callback_func | func | 明確指針類型。 |
常量宏定義 | MAX_BUFFER_SIZE | maxsize | 全大寫+下劃線,區分變量與常量。 |
5.版本號書寫
參考金典的:V1.2.3.20240518_rc
(主版本1,次版本2,修訂3,2024年5月18日構建,候選版本)
HAL_LABL_V2.1.1.20250518_rc
6.單片機最小系統板有哪些組成
必須:
主芯片(單片機核心)
電源電路
時鐘電路(晶振)
復位電路
需啟動電路
程序下載電路
非必須:
指示與擴展電路
7.復位方式有哪些
硬件復位
- 外部復位:通過外部信號觸發,低電平復位信號。通常連接到單片機的復位引腳(如NRST)
- 電源復位:當系統上電或電源不穩定時,由電源管理電路自動觸發的復位
- 看門狗復位:看門狗定時器未在規定時間內被刷新,系統認為程序運行異常,自動觸發復位
軟件復位
- 指令復位:通過執行特定的非法指令或訪問非法地址,強制觸發硬件復位
- 寄存器復位:通過向特定的控制寄存器寫入復位命令,實現軟件控制的復位
其他復位類型
- 上電復位(POR):系統首次上電時觸發的復位,確保系統從已知的初始狀態開始運行
- 系統復位:影響整個系統,包括CPU、外設和內存等,恢復到默認狀態
- 模塊復位:僅對特定模塊或外設進行復位,不影響其他部分
- 備份域復位:針對備份區域(如RTC和備份寄存器)的復位,通常用于低功耗模式
- 低功耗復位:在系統進入低功耗狀態時觸發的復位,確保系統正確退出低功耗模式
8.hex文件和bin文件有什么區別
- HEX文件:適合需要地址信息和校驗的復雜場景,如ISP燒錄和調試。
- BIN文件:適合簡單燒錄或地址固定的系統,文件更緊湊且燒錄效率更高
屬性 | HEX文件 | BIN文件 |
---|---|---|
格式 | ASCII文本(帶元數據) | 純二進制數據 |
地址信息 | 包含起始地址,支持分段映射 | 無地址信息,需手動指定起始地址 |
校驗機制 | 每行校驗和確保數據完整性 | 無校驗,需額外處理數據完整性 |
文件大小 | 較大(含元數據) | 較小(僅數據) |
可讀性 | 可讀(適合調試) | 不可讀(需工具解析) |
典型用途 | 復雜場景(多段地址映射、ISP燒錄) | 簡單任務(Bootloader升級、固定地址) |
9.如何導出bin文件,如何在bin文件中添加第三方的校驗或者序列號
導出bin文件
1.調用工具鏈,Keil mdk中添加生成語句:fromelf --bin --output=@L.bin !L
2.GCC工具鏈生成:arm-none-eabi-objcopy -O binary -S ${ProjName}.elf ${ProjName}.bin
添加校驗
方案1:CRC尾部校驗(校驗