μC/OS-II在80x86上的移植
TaskChangePrio()
最小运行时间是当任务被改变的优先级比当前运行任务的低,此时不进行任务切换,直接返回调用任务。
最大运行时间是当任务被改变的优先级比当前运行任务的高,此时将进行任务切换。
OSTaskCreate()
最小运行时间是当调用OSTaskCreate()的任务创建了一个比自己优先级低的任务, 此时不进行任务切换。
最大运行时间是当调用OSTaskCreate()的任务创建了一个比自己优先级高的任务, 此时将进行任务切换。
上述两种情况都是假定OSTaskCreateHook()不进行任何操作。
OSTaskCreateExt()
最小运行时间是当OSTaskCreateExt()不对堆栈进行清零操作(此项操作是为堆栈检查函数做准备的)。
最大运行时间是当OSTaskCreateExt()需要进行堆栈清零操作。但此项操作的时间取决于堆栈的大小。如果设清除每个堆栈单元(堆栈操作以字为单位—译者注)需要100个时钟周期(3μs),1000字节的堆栈将需要1,500μs(1000字节除以2再乘以3μs/每字)。在清除堆栈过程中中断是打开的,可以响应中断请求。
上述两种情况都是假定OSTaskCreateHook()不进行任何操作。
OSTaskDel()
最小运行时间是当被删除的任务不是当前任务,此时不进行任务切换。
最大运行时间是当被删除的任务是当前任务,此时将进行任务切换。
OSTaskDelReq()
该函数很短,几乎没有最小和最大运行时间之分。
OSTaskResume()
最小运行时间是当OSTaskResume()唤醒了一个任务,但该任务的优先级比当前任务低,此时不进行任务切换。
最大运行时间是OSTaskResume()唤醒了一个优先级更高的任务,此时将进行任务切换。
OSTaskStkChk()
OSTaskStkChk()的执行过程是从堆栈的底端开始检查0的个数,估计堆栈所剩的空间。
所以最小运行时间是当OSTaskStkChk()检查一个全部占满的堆栈。 但实际上这种情况是不允许发生的,这将使系统崩溃。
最大运行时间是当OSTaskStkChk()检查一个全空堆栈,执行时间取决于堆栈的大小。例如检查每个堆栈单元(堆栈操作以字为单位—译者注)需要80钟周期(2.4μs),1000字节的堆栈将需要1,200μs(1000字节除以2再乘以2.4μs/每字)。再加上其他的一些操作,总共需要大约1,218μs。在检查堆栈过程中中断是打开的,可以响中断请求。
OSTaskSuspend()
最小运行时间是当被挂起的任务不是当前任务,此时不进行任务切换。
最大运行时间是当前任务挂起自己,此时将进行任务切换。
OSTaskQuery()
该函数的运行时间总是一样的。OSTaskQuery()执行的操作是获取任务的任务控制块OS_TCB。如果OS_TCB中包含所有的操作项,需要占用45字节(大模式编译)。
OSTimeDly()
如果延时时间不为0,则OSTimeDly()运行时间总是相同的。此时将进行任务切换。
如果延时时间为0,OSTimeDly()不清除OSRdyGrp中的任务就绪位,不进行延时操作,直接返回。
OSTimeDlyHMSM()
如果延时时间不为0,则OSTimeDlyHMSM()运行时间总是相同的。此时将进行任务切换。
此外,OSTimeDlyHMSM()延时时间最好不要超过65,536个时钟节拍。也就是说,如果时钟节拍发生的间隔为10ms(频率100Hz),延时时间应该限定在10分55秒350毫秒内。如果超过了上述数值,该任务就不能用OSTimeDlyResume()函数唤醒。
OSTimeDlyResume()
最小运行时间是当被唤醒的任务优先级低于当前任务,此时不进行任务切换。
最大运行时间是当唤醒了一个优先级更高的任务,此时将进行任务切换。
OSTimeTick()
前面我们讨论的OSTickISR()函数其实就是OSTimeTick()与OSIntEnter()、 OSIntExit()
的组合。OSTickISR()的时间占用情况就是OSTimeTick()的占用情况。以下讨论假定系统中有μC/OS-II允许的最大数量的任务(64个)。
最小运行时间是当64个任务都不在等待延时状态。也就是说,所有的任务都不需要OSTimeTick()处理。
最大运行时间是当63个任务 (空闲进程不会延时等待) 都处于延时状态, 此时OSTimeTick()
需要逐个检查等待中的任务,将计数器减1,并判断是否延时结束。例如在最坏的情况,设时钟节拍间隔10ms,OSTimeTick()需要约600μs,占了6%的CPU利用率
表 9.4 各函数的执行时间(按关闭中断时间排序).


表9.5 各函数的执行时间(按最大运行时间排序).


- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
