上一年8月购买了ZLG的SmartARM2000,由于作业的原因,一向没能抽暇学习,到了新年前后总算能够抽暇学习ARM了。我在互动出版社购买了一批书本,期望能ARM快速入门并赶快前进。
开端进行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的中间件挺不错的,能够调用和学习。