============
唤醒:
eCos使用wake_reason表示唤醒原因,分别有NONE EXIT BREAK TIMEOUT DONEDESTRUCT,而UC/OS中没有对应变量
=======================
调度:
eCos支持优先级的抢占式调度和轮转调度相结合的MLQ(Multi LevelQueue)调度器,基于优先级的抢占式调度的Bitmap位图调度器,Lottery抽签调度器,三种调度器只是在Cyg_Scheduler_Implementation类的定义上有所区别。Bitmap为每个线程设置唯一的优先级,最多支持32个优先级,这点与UC/OS一样,run_queue是位图,类似于UC/OS中的RdyTbl,thread_table是线程指针数组,类似于UC/OS中的PrioTbl。MLQ中queue表示位图,run_queue表示相同优先级线程的双向链表,timeslice_count表示时间片变量。Lottery中run_queue表示线程队列,rand_seed表示随机数,total_tickets表示总签数,timeslice_count表示时间片。
UC/OS只支持基于优先级的抢占式调度的Bitmap位图调度器。
=======================
继承和反转:
eCos中使用优先级继承和优先级封顶策略解决优先级反转问题
UC/OS中只使用优先级继承
=======================
锁住:
eCos和UC/OS都支持锁住调度器,并且不容许在ISR中执行调度
=======================
异常:
eCos中可以通过HAL层和kernel层处理异常,调用顺序如下:
idx号发生异常->hal_pc_exception_idx->_default_exception_vsr->cyg_hal_exception_handler->cyg_hal_deliver_exception->应用程序安装的异常处理例程,eCos的异常处理过程和Linux比较相像
UC/OS中异常和中断必须由用户程序自己处理,kernel只提供OSIntEnter()和OSIntExit()
=======================
中断处理:
eCos中中断处理可以分为两步执行,第一步是ISR,执行必须的操作,此时调度器被锁住,ISR执行结束后,调用interrupt_end()挂起DSR(DeferredService Routine),对调度器解锁,如果调度器锁的值是0则执行DSR(Deferred ServiceRoutine),并调度线程
UC/OS中所有的中断处理都在ISR中执行,没有DSR(Deferred ServiceRoutine),这样会带来比较长的中断延时
=======================
堆栈:
eCos的中断可以有独立于线程的堆栈,这点与Linux相像,而UC/OS没有
=======================
中断嵌套:
eCos容许中断嵌套,而UC/OS不容许
=======================
时间事件:
eCos实现了Counter Alarm ClockTimer等定时机制,Alarm常和Counter一起使用,Clock主要用来实现实时时钟的功能,Clock的ISR和DSR负责实时时钟中断的处理,Clock的DSR中会调用tick(),检查相关alarm是否触发。Timer是为了实现uTRION相关的机制。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-32189-1.html
绝对假的