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