在短短的两周内,我们集中学习了ARM体系结构相关课程和ucos基础课程,并第一次深入一个操作系统的内部进行详细的学习探究。
在学习了ucos和相关工具下的demo之后,我终于将汇编、hex、c等底层代码和硬件联系在了一起。一直做web、桌面应用开发,我这次算是体验到了另外的世界和开发思路。
关注于:
- 代码计数用大小k
- 关注效率
- 关注空间
- 注意赋值--掩码赋值
- 学会看芯片时序图
- 看清引脚
- 等等
下面开始我们的Hello world之旅吧。
在实验室写blog,没有linux环境,所以在描述windows相关操作和技巧时会有疏漏,如果疑问敬请斧正。
点灯和闪亮的基本原理:对于一个发光二极管(流水灯的显示器),其发光是电流可正向通过,也就是说两边一边高电压一边低电压。如下图所示,如果上面是高电压,下面是低电压则这个发光二极管就可以亮。
    
     
  
首先需要建立一个工程,在这里使用的是一个强大的嵌入式IDE:Keil uVision3. Project->New u...Project->choose a file-> select device -> NXP(LPC2124)->确定拷贝数据
    
     
  
然后,让这个工程在编译完文件后输出hex(用于电路板的二进制文件)文件.
Project-> Options about... -> Output -> Create HEX File
最后编码并生成。
绘制电路图,并导入HEX文件。
    
     
    
      电路图的关键:左下方电源的配置连接,发光二极管的电阻连接。
  
代码结构:
    #include <LPC21xx.h>
//多用宏,不论是迁移还是使用都很方便,而且方便阅读
#define ALL 0x3;//用于灯连接的端口 P0.0 P0.1
unsigned long i;//用于延时计数的变量
int j;
void delay(){
  i=0x000FFFFF;
  while(i)i--;
}
int main(){
  //所有的芯片默认状态时GPIO,输入输出数据口
  IO0DIR = ALL;//对应的二进制数是:0000 0000 0000 0011 ,
               //即对应的P0.0, P0.1口为数据输出口
  j = 0;
  while(1){
    IO0SET = ALL;//导致二极管的两极都为高电位,从而不亮
    j++;
    j%=2;//奇偶计数
    if(j){
      IO0CLR = 0x1; //让P0.0低电压 
    }else{
      IO0CLR = 0x2; //让P0.1低电压  
    }
    delay();
  }
}
  
  细节的讨论还会补充。


 
					 
					