一、uc/os怎样处理临界段代码
临界段(critical section)
Uc/os在处理临界段代码时必须先关中断,等处理完毕后再开中断
进入和退出临界段宏指令为:
OS_ENTER_CRITICAL(); OS_EXIT_CRITICAL()
在不同的处理器在OS_CPU.H文件中进行不同的定义
OS_ENTER_CRITICAL(); OS_EXIT_CRITICAL()可以用不同的方法实现,通过CRICITAL_METHOD可以选择具体那种方法
CRITICAL_METHOD=1时,直接用处理器指令关中断和开中断
CRITICAL_METHOD=2时,在堆栈中保存中断的开关状态,然后再关中断,在执行OS_EXIT_CRITICAL()时,从堆栈中弹出原来中断的开关状态。
CRITICAL_METHOD=3时,利用扩展功能得到当前处理器状态的值,并保存在c函数的局部变量中。利用该变量恢复原先的中断状态。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
二、任务状态
睡眠态:指任务驻留在程序空间,没有交由uc/osII管理。
就绪态:通过调用OSTaskCreate()或OSTaskCreateExt()建立任务,建立后的任务即进入就绪态
运行态:优先级最高的就绪态的任务将进入运行态,就绪的任务只有当所有优先级高于这个任务的任务转为等待状态或者被删除时,才能进入运行态。
等待状态:正在运行的任务通过调用OSTimeDly()或OSTimeDlyHMSM()使自身进入等待状态,让下一个进入就绪态的优先级最高的任务进入运行状态,等待的时间过去以后,系统服务函数OSTimeTick()使延迟了的任务进入就绪态。
中断服务态:被中断的任务即进入了中断服务态,这时正在执行的任务被挂起,中断服务程序控制了CPU的使用权,在中断服务程序中可能会报告多了事件的发生,使一个或多个任务进入就绪态,这样在中断服务程序返回之前,uc/osII要判断哪个就绪态的任务的优先级最高,在中断返回时执行该任务
当所有的任务都在等待事件的发生或等待延迟时间的结束时,uc/os将执行空闲任务(idle_task)
用户1658311 2012-5-15 09:11