大家好,我是專注分享職業(yè)規(guī)劃/技術(shù)科普/智能生活有關(guān)原創(chuàng)文章的allen康哥。
今天介紹下嵌入式系統(tǒng)中常見的基礎(chǔ)數(shù)學(xué)算法。嵌入式數(shù)學(xué)的核心在于將理論抽象轉(zhuǎn)化為資源受限環(huán)境下的高效實現(xiàn)。
一、位運算與布爾代數(shù)
應(yīng)用場景:寄存器配置、通信協(xié)議解析、硬件狀態(tài)管理
數(shù)學(xué)原理:通過邏輯與(&)、或(|)、異或(^)及位移(<< / >>)實現(xiàn)位級操作,屬于布爾代數(shù)的實際應(yīng)用。源碼實例:
//?位反轉(zhuǎn)函數(shù)
unsigned?int?reverse_bits(unsigned?int?num)?{
????unsigned?int?numOfBits?=?sizeof(num)?*?8;
????unsigned?int?reverseNum?=?0;
????for?(unsigned?int?i?=?0;?i?<?numOfBits;?i++)?{
????????if?(num?&?(1?<<?i))?
????????????reverseNum?|=?(1?<<?((numOfBits?-?1)?-?i));
????}
????return?reverseNum;
}
此函數(shù)通過遍歷每一位實現(xiàn)二進制逆序,常用于數(shù)據(jù)編碼(如CRC校驗)或特殊外設(shè)(如LED矩陣驅(qū)動)。
二、定點數(shù)運算
應(yīng)用場景:無浮點單元(FPU)的MCU中實現(xiàn)小數(shù)運算(如電機控制、傳感器校準(zhǔn))
數(shù)學(xué)原理:將浮點數(shù)映射到整數(shù)空間,通過縮放因子(如Q格式)保留精度,本質(zhì)是線性變換。
源碼實例:
//?定點數(shù)乘法
typedef?int16_t?fixed_t;
#define?FIXED_SHIFT?8
fixed_t?fixed_multiply(fixed_t?a,?fixed_t?b)?{
????return?(fixed_t)(((int32_t)a?*?(int32_t)b)?>>?FIXED_SHIFT);
}
該代碼通過32位中間結(jié)果避免溢出,適用于溫度補償、PID控制器等需高效計算的場景。
三、模運算與環(huán)形緩沖區(qū)
應(yīng)用場景:串口數(shù)據(jù)緩存、循環(huán)任務(wù)調(diào)度
數(shù)學(xué)原理:利用取模(%)操作實現(xiàn)索引循環(huán),避免緩沖區(qū)越界。
源碼實例:
#define?BUFFER_SIZE?64
uint8_t?buffer[BUFFER_SIZE];
uint8_t?read_ptr?=?0,?write_ptr?=?0;
void?push_data(uint8_t?data)?{
????buffer[write_ptr?%?BUFFER_SIZE]?=?data;
????write_ptr++;
}
uint8_t?pop_data()?{
????uint8_t?val?=?buffer[read_ptr?%?BUFFER_SIZE];
????read_ptr++;
????return?val;
}
此結(jié)構(gòu)在UART接收中斷服務(wù)程序中廣泛使用,確保數(shù)據(jù)流的連續(xù)性。
四、線性代數(shù)與濾波算法
數(shù)學(xué)原理:滑動平均濾波、卡爾曼濾波等均基于矩陣運算和統(tǒng)計學(xué)原理。
源碼實例:
//?滑動平均濾波
#define?WINDOW_SIZE?5
float?moving_average(float?new_sample)?{
????static?float?samples[WINDOW_SIZE]?=?{0};
????static?uint8_t?index?=?0;
????samples[index]?=?new_sample;
????index?=?(index?+?1)?%?WINDOW_SIZE;
????
????float?sum?=?0;
????for?(uint8_t?i?=?0;?i?<?WINDOW_SIZE;?i++)?
????????sum?+=?samples[i];
????return?sum?/?WINDOW_SIZE;
}
此算法通過窗口內(nèi)數(shù)據(jù)均值抑制高頻噪聲,常見于ADC采樣后處理。
五、數(shù)值分析與控制算法
應(yīng)用場景:電機調(diào)速、溫度閉環(huán)控制
數(shù)學(xué)原理:PID控制器依賴積分(誤差累積)、微分(誤差變化率)的離散化計算。
源碼實例:
typedef?struct?{
????float?Kp,?Ki,?Kd;
????float?integral;
????float?prev_error;
}?PIDController;
float?pid_update(PIDController?*pid,?float?setpoint,?float?actual)?{
????float?error?=?setpoint?-?actual;
????pid->integral?+=?error;
????float?derivative?=?error?-?pid->prev_error;
????pid->prev_error?=?error;
????return?pid->Kp?*?error?+?pid->Ki?*?pid->integral?+?pid->Kd?*?derivative;
}
該實現(xiàn)通過離散化公式將連續(xù)系統(tǒng)轉(zhuǎn)化為嵌入式可執(zhí)行的迭代算法。
你好,我是Allen,CSDN博客專家,博客訪問超千萬?,F(xiàn)任世界500強外企高級開發(fā)工程師,有多年國企和外企工作經(jīng)驗,擅長電子及嵌入式方向?qū)W習(xí)規(guī)劃,簡歷優(yōu)化及offer咨詢,高考/考研咨詢等,歡迎留言與我交流!