ucos在s3c2410上运行过程整体剖析-从main函数到UCOS初始化完毕
- UID
- 1029342
- 性别
- 男
|
ucos在s3c2410上运行过程整体剖析-从main函数到UCOS初始化完毕
下面要讲解的内容基本上都是c语言编写的了,还有一部分代码是用汇编写的。以下我就以这个系统移植的实验源码为例做详细讲解。讲解的方式是根据程序执行的顺序进行,如果感觉有什么难理解的地方,会做一个宏观讲解和分析。
好了废话不多说,进入main()函数之后做的事情有:
对硬件平台做进一步的初始化操作
对ucos操作系统做初始化操作
对硬件的初始化主要包括:
初始化时钟总线
初始化串口
初始化中断结构体的相关内容
初始化定时器
关于以上的时钟的,串口的,还有定时器的等硬件的具体初始化和使用我不想一一详细阐述,这些你都可以通过查看datasheet自己弄明白的。毕竟我想详细讲解的是UCOS这个操作系统,只不过有些硬件知识是不得不讲的。我这里只是做一个你查资料的一个索引。
关于时钟频率初始化的相关知识:一,你可以查看datasheet的第七章CLOCK & POWER MANAGEMENT的内容,也可以参考S3C-2410--2440完全开发流程的第十二个实验的相关知识和内容。
关于串口的你查看datasheet的第十一章uart的相关内容。
关于定时器的你查看datasheet的第十章PWM Timer。
关于中断结构体,这是ucos响应中断的统一接口。就是定义了一个结构体,里面包含了中断服务函数的指针,屏蔽和开启相应中断请求的函数指针等。整个中断的详细机制,我想在ARM平台的中断机制和ucos如何挂接的时候详细讲解。
现把main()函数的代码贴出来:
int main(void)
{
ARMTargetInit(); // do target (uHAL based ARM system) initialisation //
//初始化硬件平台
OSInit(); // needed by uC/OS-II //
//对ucos进行初始化
OSTaskCreate(Task1, (void *)0, (OS_STK *)&task1_Stack[STACKSIZE-1], Task1_Prio);
OSTaskCreate(Task2, (void *)0, (OS_STK *)&task2_Stack[STACKSIZE-1], Task2_Prio);
OSAddTask_Init(0);
OSStart(); // start the OS //
// never reached //
return 0;
}//main
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Task1(void *Id)
{
for(;;){
printf("run task1\n");
OSTimeDly(1000);
}
}
void Task2(void *Id)
{
for(;;){
printf("run task2\n");
OSTimeDly(3000);
}
} |
|
|
|
|
|