<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > LM3S系列單片機(jī),用BootLoader升級(jí)代碼應(yīng)用筆記

          LM3S系列單片機(jī),用BootLoader升級(jí)代碼應(yīng)用筆記

          作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏
          首先需要說(shuō)明的是.xcl和.icf的區(qū)別:

          .xcl和.icf都是IAR環(huán)境下外部鏈接器文件,.xcl是IAR 4.--版本的,.icf是5.--版本的,兩種文件格式有很大不同。

          本文引用地址:http://www.ex-cimer.com/article/201611/321177.htm

          周立功官網(wǎng)上的資料《LM3S系列單片機(jī)串行(UART)升級(jí)方案解決》里面的bootloader源碼以及相關(guān)的pdf都是針對(duì)IAR 4.--版本而言的,我用的是IAR V5.3,當(dāng)資料里講到“配置連接文件”一節(jié)時(shí),我就感覺(jué)相當(dāng)?shù)拿悦?,因?yàn)閷?duì)于IAR V5.3,連接文件是不支持4.--版本的.xcl文件的。.xcl和.icf都是告訴編譯器單片機(jī)內(nèi)存怎么分配的,全局變量放在哪里,局部變量放在哪里等等。

          對(duì)于使用了IAR 5.--版本連編寫(xiě)程序的用戶(hù)而言,解決的辦法可以做.icf和.xcl的版本遷移,或者上流明官網(wǎng)下最新的驅(qū)動(dòng)庫(kù),驅(qū)動(dòng)庫(kù)的bootloader源碼里有一個(gè).icf的連接文件 ,或者用最笨最簡(jiǎn)單的辦法:用IAR 4.--版本編譯bootloader源碼下載到目標(biāo)板,然后用IAR5.--編譯的代碼只需要更改那個(gè)LM3S.icf里面的define region FLASH = mem:[from 0x00000000 to 0x0003ffff]; ---可執(zhí)行程序的地址

          用bootloader通過(guò)UART(或者其他通訊口)來(lái)升級(jí)代碼的原理,就是因?yàn)閎ootloader的代碼里有一個(gè)判斷:指定一個(gè)管腳(默認(rèn)是PB4)為條件,檢測(cè)到這個(gè)管腳為低,則運(yùn)行升級(jí)代碼的功能,為高,就運(yùn)行用戶(hù)下載的程序的功能,總之,系統(tǒng)一上電,bootloader(就是一段代碼)都是最先執(zhí)行的。當(dāng)然升級(jí)代碼只是bootloader眾多功能之一。

          下載時(shí)操作流程:1.用IAR 4.--版本將原bootloader代碼燒入單片機(jī)中 2.更改目標(biāo)代碼的LM3S.icf(IAR5.--)文件,將FLASH的起始地址改為800,rebuild all3.拉低PB4,復(fù)位目標(biāo)板,用LM Programmer將上一步生成的.bin(在Debug->Exe里)燒入單片機(jī) 4.拉高PB4,復(fù)位目標(biāo)板,此時(shí)將執(zhí)行用戶(hù)代碼。




          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();