新聞中心

        EEPW首頁 > 嵌入式系統 > 牛人業話 > ARM學習進階(2)-SMARTARM2200調試初體驗

        ARM學習進階(2)-SMARTARM2200調試初體驗

        作者: 時間:2016-08-05 來源:網絡 收藏

          去年8月購買了ZLG的Smart2000,因為工作的原因,一直沒能抽空學習,到了春節前后終于可以抽空學習了。我在互動出版社購買了一批書籍,希望能快速入門并盡快提高。

        本文引用地址:http://www.104case.com/article/201608/295112.htm

          開始進行ARM理論學習,我是參考ZLG的《ARM嵌入式系統基礎教程》,同時我又溫習了下C51的知識,希望在ARM中學習中能把C51也靈活掌握。

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

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

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

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

          (2)UC/OS-II 操作系統實驗時,連續創建4個任務就運行不正常,將其中一個任務放在另一個任務中創建就都正常了。

          出錯的程序

          :

          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開發板陸續進行的調試中,我也有些心得和體會,特記錄與此供大家分享:

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

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

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

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

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

          (6)WDT需在外部FLASH或內部FLASH下脫機運行方可啟用;

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

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

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

          (10)ZLG的中間件挺不錯的,可以調用和學習。



        關鍵詞: ARM SMARTARM2200

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 武威市| 钟山县| 襄城县| 都江堰市| 龙州县| 闸北区| 鹤庆县| 龙口市| 海丰县| 德令哈市| 寿宁县| 西华县| 奉节县| 韶关市| 大关县| 察隅县| 石河子市| 晋中市| 治多县| 江津市| 上蔡县| 柳河县| 抚宁县| 三原县| 永丰县| 漾濞| 株洲市| 东宁县| 永善县| 涿鹿县| 眉山市| 阿克苏市| 烟台市| 攀枝花市| 鄂托克旗| 犍为县| 皋兰县| 望都县| 喀喇沁旗| 南平市| 东台市|