μC/OS-II在80x86上的移植
OSMboxPost()
最小运行时间是当邮箱是空的,没有任务等待消息的时候。
最大运行时间是当消息邮箱中有一个或多个任务在等待消息。此时,消息将发往等待队列中优先级最高的任务,将此任务唤醒执行。最大运行时间是同一任务执行OSMboxPost()的累计时间,这个过程包括任务唤醒等待任务,发送消息,调用任务切换函数OSSched(),切换到新任务。当由于某种原因调用OSMboxPost()的任务又被唤醒执行,从OSSched()中返回,发现返回的原因是由于延时结束(处理延时结束情况的代码最长—译者注),最后返回调用任务。OSMboxPost()的最大运行时间是上述时间的总和。
OSMemGet()
最小运行时间是当系统中已经没有内存块,OSMemGet()返回错误码。
最大运行时间是OSMemGet()获得了内存块,返回调用者。
OSMemPut()
最小运行时间是当向一个已经排满的内存分区中返回内存块。
最大运行时间是当向一个未排满的内存分区中返回内存块
OSQPend()
最小运行时间是当消息队列中有消息需要处理的时候。
最大运行时间是当消息队列中没有消息,任务需要等待的时候。此时调用OSQPend()的任务将被挂起,进行任务切换。最大运行时间是同一任务执行OSQPend()的累计时间,这个过程包括OSQPend()查看消息队列,发现没有消息,再调用任务切换函数OSSched(),切换到新任务。当由于某种原因调用OSQPend()的任务又被唤醒执行,从OSSched()中返回,发现返回的原因是由于延时结束(处理延时结束情况的代码最长—译者注),最后返回调用任务。OSQ`Pend()的最大运行时间是上述时间的总和。
OSQPost()
最小运行时间是当消息队列是空的,没有任务等待消息的时候。
最大运行时间是当消息队列中有一个或多个任务在等待消息。此时,消息将发往等待队列中优先级最高的任务,将此任务唤醒执行。最大运行时间是同一任务执行OSQPost()的累计时间,这个过程包括任务唤醒等待任务,发送消息,调用任务切换函数OSSched(),切换到新任务。当由于某种原因调用OSQPost()的任务又被唤醒执行,从OSSched()中返回,发现返回的原因是由于延时结束(处理延时结束情况的代码最长—译者注),最后返回调用任务。OSQPost()的最大运行时间是上述时间的总和。
OSQPostFront()
此函数与OSQPost()的过程相同。
OSSemPend()
最小运行时间是当信号量可获取的时候(信号量计数器大于0)。
最大运行时间是当信号量不可得,任务需要等待的时候。此时调用OSSemPend()的任务将被挂起,进行任务切换。最大运行时间是同一任务执行OSQPend()的累计时间,这个过程包括OSSemPend()查看信号量计数器,发现是0,再调用任务切换函数OSSched(),切换到新任务。当由于某种原因调用OSSemPend()的任务又被唤醒执行,从OSSched()中返回,发现返回的原因是由于延时结束(处理延时结束情况的代码最长—译者注),最后返回调用任务。OSSemPend()的最大运行时间是上述时间的总和。
OSSemPost()
最小运行时间是当没有任务在等待信号量的时候。
最大运行时间是当有一个或多个任务在等待信号量。此时,等待队列中优先级最高的任务将被唤醒执行。最大运行时间是同一任务执行OSSemPost()的累计时间,这个过程包括任务唤醒等待任务,调用任务切换函数OSSched(),切换到新任务。当由于某种原因调用OSSemPost()的任务又被唤醒执行,从OSSched()中返回,发现返回的原因是由于延时结束(处理延时结束情况的代码最长—译者注),最后返回调用任务。OSSemPost()的最大运行时间是上述时间的总和。
OSTaskChangePrio()
最小运行时间是当任务被改变的优先级比当前运行任务的低,此时不进行任务切换,直接返回调用任务。
最大运行时间是当任务被改变的优先级比当前运行任务的高,此时将进行任务切换。
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()
最小运行时间是当被挂起的任务不是当前任务,此时不进行任务切换。
评论