|
大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是i.MXRT1xxx里SystemReset不復(fù)位的GPR寄存器的小妙用。
, F3 m# k) {, \+ A2 j L我們知道稍大規(guī)模的項目代碼設(shè)計一般都是多人協(xié)作完成的,在項目開始階段的總體設(shè)計時,項目組長通常會將代碼按功能進行劃分,每個功能塊代碼之間盡量做到耦合度低、互不依賴、互不影響,這樣各功能可以獨立進行單元測試,項目得以并行開發(fā),后期通過事先定義好的接口/協(xié)議進行功能塊集成即可。
! n2 q4 R" [6 k. ^但上述方法在嵌入式軟件項目里有時候會遇到功能塊集成后互相干擾的問題,因為嵌入式項目很多時候并不是純軟件設(shè)計,也會跟片內(nèi)外設(shè)資源打交道,而片內(nèi)外設(shè)屬于硬件范疇,硬件模塊的工作是有前后狀態(tài)依賴的(這點在片內(nèi)時鐘的配置上體現(xiàn)得尤其明顯),出了問題傳統(tǒng)方法是具體分析具體解決,來一個就解決一個,但任何代碼的改動或者后期新特性的增加都可能會帶來新的潛在干擾問題。+ }9 ~( u& F5 W8 E$ ?9 H+ d9 f4 ^
那么對于上述困境,有沒有一個一勞永逸的解決方法?其實是有的!那就是每個功能塊在設(shè)計時都不要依賴芯片初始狀態(tài),按照進入時先清理系統(tǒng)環(huán)境,然后做功能設(shè)計,退出時做一下系統(tǒng)恢復(fù)。這種方法雖然保險,但是會引入集成后項目整體運行低效的問題。今天痞子衡要在具體項目實戰(zhàn)中介紹一種利用i.MXRT芯片內(nèi)System Reset后不復(fù)位的GPR寄存器來解決屬性上互斥的功能代碼塊集成互相干擾問題的方法。
- e* E$ B" D5 V$ v+ z! I2 z0 I; M( }一、SBL項目中的痛點恩智浦MCU SE團隊近期一直在加班加點趕一個大項目,這個項目是為客戶產(chǎn)品OTA需求而生的。我們知道在線升級是每個智能產(chǎn)品都不可繞開的話題,恩智浦SE團隊為了方便客戶在基于i.MXRT/LPC的產(chǎn)品上做在線升級,特別推出OTA參考設(shè)計,下面是功能架構(gòu)簡圖:項目分為SBL + SFW兩部分,SBL負(fù)責(zé)ISP本地更新(UART/USB)以及App切換管理;SFW是一個示例App,其除了客戶項目業(yè)務(wù)功能外,也集成了遠(yuǎn)程更新功能(WiFi、以太、U盤、SD卡四種升級方式)。 |
|