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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > ARM學(xué)習(xí)進(jìn)階(2)-SMARTARM2200調(diào)試初體驗(yàn)

          ARM學(xué)習(xí)進(jìn)階(2)-SMARTARM2200調(diào)試初體驗(yàn)

          作者: 時(shí)間:2016-08-05 來源:網(wǎng)絡(luò) 收藏

            去年8月購買了ZLG的Smart2000,因?yàn)楣ぷ鞯脑颍恢睕]能抽空學(xué)習(xí),到了春節(jié)前后終于可以抽空學(xué)習(xí)了。我在互動(dòng)出版社購買了一批書籍,希望能快速入門并盡快提高。

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

            開始進(jìn)行ARM理論學(xué)習(xí),我是參考ZLG的《ARM嵌入式系統(tǒng)基礎(chǔ)教程》,同時(shí)我又溫習(xí)了下C51的知識,希望在ARM中學(xué)習(xí)中能把C51也靈活掌握。

            接著就是用SmartARM2000開發(fā)板做實(shí)驗(yàn),需要安裝ARM開發(fā)環(huán)境,具體步驟可參見本人的《ARM學(xué)習(xí)進(jìn)階(1)-ARM開發(fā)環(huán)境的配置》。按配套實(shí)驗(yàn)教程《ARM嵌入式系統(tǒng)實(shí)驗(yàn)教程(二)》的要求完成了第二章的基礎(chǔ)實(shí)驗(yàn),由于是直接運(yùn)行配套光盤的DEMO源程序,每個(gè)實(shí)驗(yàn)都是針對某個(gè)功能部件,所以都比較順利。后來試著自己編了幾個(gè)程序來同時(shí)實(shí)現(xiàn)幾個(gè)不同部件功能,結(jié)果也還滿意。

            為了在SmartARM2000上做基于UC/OS-II的實(shí)驗(yàn),還需要UC/OS-II 2.52的源代碼。我找出2002年買的《嵌入式實(shí)時(shí)操作系統(tǒng)UC/OS-II(邵貝貝譯)》配套光盤,里面正好有UC/OS-II 2.52的源代碼,這樣開發(fā)環(huán)境也具備了。按實(shí)驗(yàn)教程運(yùn)行DEMO源程序,運(yùn)行正常。自己也試著編寫OS系統(tǒng),運(yùn)行基本達(dá)到預(yù)期。

            用SmartARM2000開發(fā)板我進(jìn)行了配套教程第2~4章的實(shí)驗(yàn)內(nèi)容,也按自己的設(shè)想完成了多個(gè)實(shí)驗(yàn),對ARM的性能有了進(jìn)步的了解。但是實(shí)驗(yàn)中也遇到些莫名的問題至此仍然不解,ZLG的技術(shù)支持也沒能給出滿意的答復(fù),希望能解惑的大俠能抽空給予解答:

            (1)JP1-ISP、JP9-OUTSIDE/INSIDE、JP10-BANK0/1設(shè)置都正確的情況下,以前在外部RAM調(diào)試方式下能正常運(yùn)行的程序突然不能運(yùn)行了,可這程序在外部FLASH調(diào)試方式下正常運(yùn)行,用LPC2294進(jìn)行內(nèi)部FLASH脫機(jī)運(yùn)行也正常;然后某天再用SmartARM2000開發(fā)板調(diào)試時(shí),即使在外部RAM調(diào)試方式下也能正常運(yùn)行了。這樣我折騰了半個(gè)多月都沒弄明白,后來也是莫明其妙的恢復(fù)正常的。

            (2)UC/OS-II 操作系統(tǒng)實(shí)驗(yàn)時(shí),連續(xù)創(chuàng)建4個(gè)任務(wù)就運(yùn)行不正常,將其中一個(gè)任務(wù)放在另一個(gè)任務(wù)中創(chuàng)建就都正常了。

            出錯(cuò)的程序

            :

            OSTaskCreate(Task1,(void *)0, &TaskStk1[TaskStkLength-1],1);

            OSTaskCreate(Task2,(void *)0, &TaskStk2[TaskStkLength-1],2);

            OSTaskCreate(Task3,(void *)0, &TaskStk3[TaskStkLength-1],3);

            OSTaskCreate(Task4,(void *)0, &TaskStk4[TaskStkLength-1],4);

            :

            正確的程序

            :

            OSTaskCreate(Task2,(void *)0, &TaskStk2[TaskStkLength-1],2);

            OSTaskCreate(Task3,(void *)0, &TaskStk3[TaskStkLength-1],3);

            OSTaskCreate(Task4,(void *)0, &TaskStk4[TaskStkLength-1],4);

            :

            void Task2(void *pdata)

            { :

            OSTaskCreate(Task1,(void *)0, &TaskStk1[TaskStkLength-1],1);

            :

            }

            在用SmartARM2000開發(fā)板陸續(xù)進(jìn)行的調(diào)試中,我也有些心得和體會,特記錄與此供大家分享:

            (1)需定義向量表,配置總線(特別是PINSEL2),初始化堆棧;

            (2)通訊波特率計(jì)算 UxDLM,UxDLL=Fplk/(16*baud),設(shè)置波特率時(shí)需將UxLCR的D7位-DLAB置位,退出中斷前必須讀取UxIIR來清除中斷;

            (3)外部中斷有高/低電平觸發(fā)和上升/下降邊沿觸發(fā)等不同方式,退出外部中斷前要清除標(biāo)識EXINT;

            (4)利用工程模板建立工程后,需修改設(shè)置系統(tǒng)模式堆棧處的代碼為“MSR CPSR_C,#0x5F”才能使能中斷;

            (5)ISP前需先編譯生成*.HEX文件;

            (6)WDT需在外部FLASH或內(nèi)部FLASH下脫機(jī)運(yùn)行方可啟用;

            (7)重映射的效果只有當(dāng)MEMMAP=0x02時(shí)才能觀察到;

            (8)PWM在某些場合可以作為DAC使用;

            (9)UC/OS-II 要合理分配任務(wù)的優(yōu)先級;

            (10)ZLG的中間件挺不錯(cuò)的,可以調(diào)用和學(xué)習(xí)。



          關(guān)鍵詞: ARM SMARTARM2200

          評論


          相關(guān)推薦

          技術(shù)專區(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); })();