串口Bootloader兩個問題:
1.APP和Bootloader中對于串口的初始化以及中斷處理函數(shù)的定義是否需要保持一致,特別是有關接收和發(fā)送的緩沖區(qū)?
2.Bootloader中定義的變量和申請的內存,在Bootloader運行結束,進入APP程序之后是否還存在,并且依舊占據(jù)著內存空間?
最新回答
通常,我們做IAP設計時使用 兩個相對 獨立的工程,分別是BOOTLOADER和APPLICATION區(qū)。
前者重點是接收固件代碼、完成Flash編程。后者通常是實際的用戶功能性應用程序代碼。顯然,很多外設,比方UART/TIMER/GPIO以及核外設NVIC,可能在BOOT區(qū)和APP區(qū)都會用到。
但各用各的,配置及初始化也是根據(jù)當前工程需要具體配置,外設配置、變量定義跟在另外一個
運行區(qū)沒有關聯(lián)。具體點說,即使同一個UART,BOOT區(qū)可以配置8bit 115200,APP區(qū)可以配置為7位 9600。兩個代碼區(qū)的UART收發(fā)
緩沖定義其實也是各自定義、各不相干。一般來講,中斷矢量表位置也是各定義各的。即不同代碼區(qū)的中斷矢量入口地址都是相互獨立的。以UART中斷服務程序為例,
即使服務程序代碼一樣,發(fā)生中斷事件時,中斷服務程序的入口是不一樣 的。其中,Cortex-M0核芯片稍微特殊點,另當別論。Bootloader中的全局變量和靜態(tài)變量在跳轉到APP后不再有效,因為APP會重新初始化自己的全局變量和靜態(tài)變量。反之亦然。
不過,如果說在當前代碼區(qū)使用了動態(tài)內存分配(例如malloc),跳轉到另一代碼區(qū)后,這些內存估計仍然占據(jù)著內存
空間,我們可以在跳轉前先行釋放這些內存。
APP和Bootloader中對于串口的初始化以及中斷處理函數(shù)的定義通常需要保持一致。
在Bootloader運行結束后,進入APP程序之前,通常會進行一次內存的重新分配。這意味著Bootloader中定義的變量和申請的內存在APP啟動后通常不會繼續(xù)存在,除非APP明確地保留了這些變量或內存區(qū)域。