在短短的两周内,我们集中学习了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(); } }
细节的讨论还会补充。