内核结构
1、 uc是怎样处理临界段代码的?
Uc/os在处理临界段代码时必须先关中断,等处理完毕后再开中断,关中断的时间是实时内核的重要指标。
进入和退出临界段宏指令为:
OS_ENTER_CRITICAL(); OS_EXIT_CRITICAL()
在不同的处理器在OS_CPU.H文件中进行了不同的定义,具体用哪种,取决于用户打算移植到的处理器性能及所用的c编译器,这两个函数是用汇编写的
OS_ENTER_CRITICAL(); OS_EXIT_CRITICAL()可以用不同的方法实现,通过CRICITAL_METHOD可以选择具体那种方法
CRITICAL_METHOD=1时,直接用处理器指令关中断和开中断
CRITICAL_METHOD=2时,在堆栈中保存中断的开关状态,然后再关中断,在执行OS_EXIT_CRITICAL()时,从堆栈中弹出原来中断的开关状态。
CRITICAL_METHOD=3时,利用扩展功能得到当前处理器状态的值,并保存在c函数的局部变量中。利用该变量恢复原先的中断状态。
2、 什么是任务?
一个任务是一个超循环,由三个部分组成:任务代码、任务控制块、任务堆栈
3、 Uc是怎样得知用户任务的?
通过任务控制块
4、 任务是怎样调度的?
uCOS II总是运行进入就绪态任务中优先级最高的那一个。确定哪个任务优先级最高,下面该哪个任务运行了的工作是由调度器(Scheduler)完成的。任务级的调度是由函数OSSched()完成的。中断级的调度是由另一个函数OSIntExt()完成的
Uc的任务调度分两步:
最高优先级的查找:在就绪表中查找
任务切换:将被挂起任务的微处理器寄存器推入堆栈,然后将较高优先级的任务的寄存器值从栈中恢复到寄存器中
5、 怎样写中断服务子程序?
中断服务子程序要用汇编,用于中断后的事件处理
6、 什么是时钟节拍,uc是怎样处理时钟节拍的?
时钟节拍是特定的周期性中断(时钟中断),这个中断可以看作是系统心脏的脉动。操作系统通过时钟中断来确定时间间隔,实现时间的延时及确定任务超时。中断之间的时间间隔取决于不同的应用,一般在10~200 ms之间。时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时提供等待超时的依据。时钟节拍频率越快,系统的额外开销就越大。系统定义了32位无符号整数OSTime来记录系统启动后时钟滴答的数目。用户必须在多任务系统启动以后再开启时钟节拍器,也就是在调用OSStart()之后。
μC/OSII中的时钟节拍服务是通过在中断服务子程序中调用OSTimeTick()实现的。
7、 Uc是怎样初始化的?
在调用任何其他服务之前,首先调用初始化函数OSInit(),建立空闲任务和统计任务
8、 怎样启动多任务的?
在初始化之后调用函数OSStart(),但是在启动uc之前,至少须建立一个应用任务