亚洲综合图片区自拍_思思91精品国产综合在线观看_一区二区三区欧美_欧美黑人又粗又大_亚洲人成精品久久久久桥本

聊一聊MCU的軟件分層

2023-07-07 15:22:46 來源:火焰電子


(資料圖片)

一、MCU級軟件有必要分層嗎?

1.1 如果不分層會怎樣?

看下面這段示例代碼。

void main(){  sys_init()  while(1)  { //用PA1控制LED亮滅  GPIO_SetBits(GPIOA, GPIO_Pin_1);   delay_ms(1000);  GPIO_ResetBits(GPIOA, GPIO_Pin_1);  delay_ms(1000);  }}

在功能實(shí)現(xiàn)上這段代碼沒有問題。但如果硬件做變動呢?例如更換為其它品牌的mcu或者IO口更改呢?while(1)里面的代碼是不是都要發(fā)生變動呢?不同的mcu底層庫是有區(qū)別的。換一個(gè)MCU要通篇改動代碼非常惡心!工作量也巨大!非常有必要做分層!無論是裸機(jī)還是RTOS都要分層。

1.2 軟件分層的目的

1,提高對硬件的兼容性。上面已經(jīng)介紹過了。MCU的軟件開發(fā)與硬件強(qiáng)相關(guān)。在硬件設(shè)計(jì)時(shí)經(jīng)常會有一供、二供、三供等方案。每換一次硬件就要大改一次代碼開發(fā)效率低下。

2,增加代碼通用性。例如項(xiàng)目A的一部分功能在項(xiàng)目B上曾經(jīng)實(shí)現(xiàn)過,直接從項(xiàng)目B移植過來就行無須改動或者較少改動。

二、 代碼層次

2.1 代碼分層

可以按照下圖來分層

2.2 MCU庫層

這一層由MCU庫層,由MCU廠家提供。

2.3 MCU_HAL層

這一層是對mcu庫層的一個(gè)封裝。當(dāng)更換MCU時(shí)只需對這一層做修改,不會影響到其它層。如果完全將MCU的庫封裝一遍工作量將十分巨大,也沒必要,需要哪個(gè)就封裝哪個(gè)。例如用到uart了那就只把uart的封裝一下,像IIC、SPI等無關(guān)的可以不用封裝。

2.4 外設(shè)驅(qū)動層

這一層通過調(diào)用MCU_HAL層來實(shí)現(xiàn)對外設(shè)的驅(qū)動。例如,IIC控制電源芯片。驅(qū)動通過調(diào)用MCU_HAL層實(shí)現(xiàn)對電源芯片的操作。在這一層用來實(shí)現(xiàn)簡單的寄存器讀取。

2.5 外設(shè)功能層

這一層是對外設(shè)的基本功能進(jìn)行一個(gè)封裝。拿電源芯片舉例。當(dāng)更換電源芯片時(shí),基本功能不會發(fā)生變化,比如控制電壓電流等。把這些基礎(chǔ)功能封裝在此。示例代碼如下

void set_cur(uint16_t data)//APP層調(diào)用這個(gè)API API命名不體現(xiàn)任何芯片信息 {  xxx_set_cur();//對芯片進(jìn)行操作  ...........}

2.6 APP層

這一層主要寫應(yīng)用功能。通過調(diào)用外設(shè)功能HAL層實(shí)現(xiàn)。當(dāng)更換MCU或者某一個(gè)芯片時(shí)APP層無須改動。

標(biāo)簽:

上一篇:分享幾種常用的電平轉(zhuǎn)換電路
下一篇:最后一頁