单片机/嵌入式软件架构分层思想
以STM32裸機開發(fā)為例。
| 應(yīng)用層 |
| 驅(qū)動層 |
| 硬件層 |
| 固件層 |
①最底層為固件層,Firmware
這一層通常是官方給的庫,庫函數(shù)對寄存器進(jìn)行操作,例如:
②往上一層為硬件層,Hardware。
這一層的函數(shù)是在庫函數(shù)的基礎(chǔ)上進(jìn)一步封裝,比如根據(jù)STM32 SPI的特性,SPI讀寫一個數(shù)據(jù)我們封裝為一個函數(shù),例如:
這個函數(shù)的也只讀寫送一個數(shù)據(jù),我們通常不會只讀寫一個數(shù)據(jù),而是連續(xù)讀寫送N個數(shù)據(jù),所以在這個函數(shù)的基礎(chǔ)上再封裝出一個函數(shù),例如:
void SPI2_ReadWriteData(u8 *sendData, u8 *recvData, u32 length) {u32 i = 0;for(i = 0; i < length; i++){recvData[i] = SPI2_ReadWriteByte(sendData[i]);} }③再往上一層是驅(qū)動層,drive。
前面兩層都是對STM32進(jìn)行操作,而這一層是對與STM32連接的元器件、模塊、模組進(jìn)行操作,通常稱為調(diào)試驅(qū)動,比如調(diào)試STM32和外部FLASH W25Q128的SPI驅(qū)動。
這一層的函數(shù)通常是對W25Q128進(jìn)行操作,例如:
④再往上一層是應(yīng)用層,APP。
有很多人往往在main.c里面做功能應(yīng)用,導(dǎo)致main.c內(nèi)容又多又長,main函數(shù)又長又臭,大多數(shù)公司的代碼規(guī)范要求是不允許的。最好把功能應(yīng)用剝離出來,單獨放在應(yīng)用層,讓main函數(shù)簡潔清晰。
例如:
總結(jié):
用分層思想不僅提高代碼閱讀性(方便新員工接手辭職員工代碼,而不是一團糟讓人一頭霧水),還提高可移植性,如果項目需要換一顆MCU,替換固件層,替換硬件層幾個庫函數(shù)即可,其他層不需要動。
總結(jié)
以上是生活随笔為你收集整理的单片机/嵌入式软件架构分层思想的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 串口不通或乱码,排查方法
- 下一篇: visual studio 2019 未