5803|3

368

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

ecos的内核都是用C++写的,会不会影响效率? [复制链接]

RT,大家讨论一下

最新回复

以前听说过不过没有用过,LZ如果用过说一下感受,及它的优点!  详情 回复 发表于 2010-6-30 16:18
点赞 关注

回复
举报

2131

帖子

0

TA的资源

至上芯片

沙发
 
LZ为什么 这样说呢?
下面  关于  eCos与uC/OS-II内核实现的比较 的总结
eCos使用cyg_thread类表示线程,用cyg_thread_info结构存储线程信息,而UC/OS使用TCB结构表示任务

eCos调度以线程为单位,状态有CREATING SUSPENDED RUNNING(包括准备运行和正在运行) SLEEPSET(包括SLEEPING COUNTSLEEP) EXITED。创建线程cyg_thread_create(),创建后处于SUSPENDED状态,调用cyg_thread_resume()进入RUNNING状态。
UC/OS调度以任务为单位,状态有READY RUNNING WAITING DORMANT。创建任务OSTaskCreate(),创建后处于READY状态,调用OSStart()加入多任务调度。

eCos中用suspend_count表示挂起次数,可以多次挂起,只有suspend_count==0时才转为RUNNING状态。
UC/OS和其他RTOS一样,不支持多次挂起。

eCos中使用unique_id表示线程的标识
UC/OS中任务的优先级就代表任务的标识

eCos中使用sleep_reason表示休眠原因,分别有NONE WAIT TIMEOUT DELAY,而UC/OS中用event event_flags结构表示

eCos使用wake_reason表示唤醒原因,分别有NONE EXIT BREAK TIMEOUT DONE DESTRUCT,而UC/OS中没有对应变量

eCos支持优先级的抢占式调度和轮转调度相结合的MLQ(Multi Level Queue)调度器,基于优先级的抢占式调度的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(Deferred Service Routine),对调度器解锁,如果调度器锁的值是0则执行DSR(Deferred Service Routine),并调度线程
UC/OS中所有的中断处理都在ISR中执行,没有DSR(Deferred Service Routine),这样会带来比较长的中断延时

eCos的中断可以有独立于线程的堆栈,这点与Linux相像,而UC/OS没有

eCos容许中断嵌套,而UC/OS不容许

eCos实现了Counter Alarm Clock Timer等定时机制,Alarm常和Counter一起使用,Clock主要用来实现实时时钟的功能,Clock的ISR和DSR负责实时时钟中断的处理,Clock的DSR中会调用tick(),检查相关alarm是否触发。Timer是为了实现uTRION相关的机制。
UC/OS中只有OSTimeDly()处理时间间隔事件

eCos实现的同步机制有Mutex, Condition variables, Semaphore, Mailbox, Message queue, Event flags, Spinlock。Condition variables用于和Mutex联合使用,以完成对某些资源的较长时间的等待。Semaphore有两种,分别是Binary semaphore和Counting semaphore。Mailbox的结构是一个FIFO类型的循环队列,存储的是指针,很像UC/OS中的Message queue。Message queue传递的不是指针,而是占用空间较大的一段数据,但是eCos的C API中没有提供消息队列的封装。Event flags可以使得线程同时等待多个事件,与UC/OS的Event flags很像,有AND,OR,CLR,MASK四种模式。Spinlock只能用于SMP系统中,原理和API与Linux的Spinlock很像。
UC/OS实现的同步机制有Semaphore, Mutex, Mailbox, Message queue, Event flags。Semaphore有三种。Mailbox中只能有一条消息,存储的是指针。Message queue的结构是一个循环队列,可以有FIFO和LIFO两种模式,存储的是指针。Event flasg可以使任务同时等待多个事件,有AND和OR两种模式,又分别有SET和CLR两种情况。
摘自:
http://hi.baidu.com/juventus/blo ... db2f2eb938206e.html
 
个人签名处处留心皆学问!
 

回复

2131

帖子

0

TA的资源

至上芯片

板凳
 
以前听说过不过没有用过,LZ如果用过说一下感受,及它的优点!
 
个人签名处处留心皆学问!
 
 

回复

368

帖子

0

TA的资源

纯净的硅(初级)

4
 
我也是关注很久了,但是没有过用,我是想如果它的内核用C语言写的话效率会更高
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表