新闻中心

EEPW首页 > 嵌入式系统 > 牛人业话 > ARM学习进阶(2)-SMARTARM2200调试初体验

ARM学习进阶(2)-SMARTARM2200调试初体验

作者:时间:2016-08-05来源:网络收藏

  去年8月购买了ZLG的Smart2000,因为工作的原因,一直没能抽空学习,到了春节前后终于可以抽空学习了。我在互动出版社购买了一批书籍,希望能快速入门并尽快提高。

本文引用地址:http://www.eepw.com.cn/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

评论


相关推荐

技术专区

关闭