ecos posix_ecos_ecos和ucos

电脑杂谈  发布时间:2017-02-13 14:01:22  来源:网络整理

============

唤醒:

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

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...