Step 1:学会使用开发板跑简单程序
熟读对应开发板上的ARM芯片的datasheet,之后就尽可能的在开发板上逐个实现芯片对应的每个功能,像GPIO实验,UART通讯,I2C,ADC,DAC,PWM,RTC,SPI等等。当每个功能模块都实现以后,再实现多个功能复合的编程,比如用UART打印出ADC的值什么的。
Step 2:搞懂uCOS等简单OS
建议购买《嵌入式实时操作系统μCOS-II(第二版)》,
1.重点搞清楚什么是任务,什么是前后台,为什么要在系统中加入嵌入式操作系统;
2.详细了解他的TCB(Task Control Block)和ECB(Event Control Block)的数据结构,搞清楚整个uCOS的实现机制;
3.详细了解信号量,互斥信号量、消息队列、邮箱和时间标志组。
Step 3:建立对uCOS的初步认识
下载对应你的开发板ARM芯片移植好了文件OS_CPU_C.c,OS_CPU.H,OS_CPU_A.asm(当然有的开发板已经提供了这样的基础实验)
在你的开发板上跑跑uCOS,建立起自己对于uCOS在开发板上的认识。在你的开发板上编写一个自己跑uCOS的简单任务。
Step 4:熟悉ARM体系结构
可参考《ARM体系结构与编程》或《ARM+Architecture+Reference+Manual(2nd+Edition)》
了解以下几个方面的知识:
1、ARM模式下的指令集
2、Thumd模式下的指令集
3、异常模式及进入异常时ARM如何处理
4、一定能熟悉ARM中的汇编指令
5、熟悉CPSR,R0-R7,R8-R14,R15及在各个模式下,这些寄存器的映射。
熟悉以后,再来自己做uCOS的移植了。
Step 5:自己动手移植uCOS
对于uCOS的移植,我们只需要编写关键的三个文件,文件如下:
1、OS_CPU_C.c(堆栈初始化操作OSTaskStkInit函数)
2、OS_CPU.H:完成在该芯片下的数据定义,比如什么unsigned char 之类的,注意一下OS_STK和OS_CPU_SR的定义,定义下关中断和开中断的方式,有三个只能选择1个,ARM芯片一般是定义为第三种方式
3、OS_CPU_A.asm(这个是MDK环境下的汇编文件)或OS_CPU_A.a(这个是IAR开发环境下的汇编),这个文件的内容就多了,要做以下几个函数的重写:
a、OSStartHighRdy函数
b、任务级的任务切换函数OSCtxSw,
c、中断级的任务切换OSIntCtxSw,其实只要写好了OSCtxSw,OSIntCtxSw自然就copy一下就完了(copy的时候记者要把保存当前任务的寄存器去掉就可以了。
网友评论