关于RTOS构件化的一些想法

本文探讨了嵌入式操作系统的构件化研究,旨在通过构建一个原型系统来快速生成满足不同需求的RTOS。考虑使用portos作为参考,并计划采用Java或C#进行开发。

 转眼间,考研的生涯结束了,照一位好友的说话就是一切都尘埃落定了,我为我失败的四年人生补足了学费,在历经那么多苦难和艰辛之后,我想我已经可以用一个全新的面貌来这里写自己的文章了。

在厦大的这几天里,我一直在为可能要开始的一个项目做准备,积累一些关于软件构件化的资料,但苦于没有电脑可以用,很多东西都只能凭记忆了。这个项目的初衷是想将嵌入式操作系统构件化,进一步再搭建一个平台,能够快速构件满足不同需求的RTOS。这是我目前对该项目的理解,而我个人的想法是先实现一个简单的原型系统,在这个原型的实践经验基础之上,设计新的构件模型,进一步的将这个原型系统构建成框架或者平台,以满足最终的需求。

原型系统可以用重写已有的实例的方式来实现,我所了解的portos就是候选者之一。虽然它是用CP写的,但它的java版本jBed也采用了一样的架构。个人觉得portos的架构跟我们的需求很符合,就是一个基于构件化技术的RTOS,但不清楚它的现状怎么样。

而现有可供参考的构件模型,一般就是CORBA,EJB和COM,他们的基本思想我都看了一下,但遗憾的是都弄的不是很明白。感觉COM更好懂些,因为它和C++联系相对比较密切,所以构件的标准还是会参考COM,现在担心的就是自己能力不够,呵呵。前天偶然又看到了ICE,一种面向对象的中间件平台,据说是CORBA的替代者,原来Slice是专门为它设计的,好像很有意思的样子。

对于具体用什么语言实现原型系统,初步想法还是java或者C#,因为据说C++不适合OCP,TT。刚刚看到关于Scala的新的netbeans插件已经发布,忽然又有点心动了。scala比java更面向对象,更灵活,又和java耦合的很好,或许值得尝试一下。

在厦大图书馆还看到一些有意思的设想,比如QP(量子编程,基于层次状态机),提供了一种微模块化构件嵌入式系统的思想,但这种和量子学搅和在一起的范型,我还真消化不了。

qp官网下载qpc,移植到stm32f103单片机,在正点原子战舰V3开发板上实验成功 qp搭建步骤重要提示: #define RED_QUEUE_LEN 3 #define BLUE_QUEUE_LEN 3 #define TACKER_EVENT_POOL_LEN (RED_QUEUE_LEN + BLUE_QUEUE_LEN) static QEvt const * l_redQueueSto[RED_QUEUE_LEN]; //事件队列 static QEvt const * l_blueQueueSto[BLUE_QUEUE_LEN]; //事件队列 static LedEvt LedEvtPoolSto[TACKER_EVENT_POOL_LEN]; //事件池 static QSubscrList SubSrcSto[MAX_PUB_SIG]; //订阅列表 typedef struct LedEvtTag LedEvt; //定义事件结构 struct LedEvtTag{ QEvt super_; uint16_t uiParaH; uint16_t uiParaL; }; //定义信号枚举 enum LedSignals{ START_SIG = Q_USER_SIG, KEY0_SIG, KEY1_SIG, KEY2_SIG, KEYUP_SIG, ALL_OFF_SIG, ONLY_BULE_SIG, ONLY_RED_SIG, ALL_ON_SIG, MAX_PUB_SIG }; void PublishLedEvt(uint16_t uiSig, uint16_t uiParaH, uint16_t uiParaL) //发布事件函数 { LedEvt* peTacker; peTacker = Q_NEW(LedEvt, uiSig); peTacker->uiParaH = uiParaH; peTacker->uiParaL = uiParaL; QF_publish_((QEvt*)peTacker); } QF_init(); //时间事件列表、活动对象查找表、优先级集合 QF_psInit(SubSrcSto, Q_DIM(SubSrcSto)); //初始事件池 QF_poolInit(LedEvtPoolSto,sizeof(LedEvtPoolSto),sizeof(LedEvtPoolSto[0])); RedLed_Start(uiPrio++, l_redQueueSto, Q_DIM(l_redQueueSto), 0, 0); //建立活动对象 BlueLed_Start(uiPrio++, l_blueQueueSto, Q_DIM(l_blueQueueSto), 0, 0); /////////////////////////////////////////////////// typedef struct RedActiveTag RedActive; //构建一个活动对象活动类型 struct RedActiveTag{ QActive super_; volatile uint16_t RedLedStateNow; uint16_t a; uint16_t b; }; extern RedActive RedLed; RedActive RedLed; void RedLed_Start(uint_fast8_t prio, QEvt const *qSto[], uint_fast16_t qLen, void *stkSto, uint_fast16_t stkSize) { RedLed_Ctor(&RedLed;); QActive_start_((QActive*)&RedLed;, prio, qSto, qLen, stkSto, stkSize, (QEvt const *)0); //创立活动对象的线程并提醒 QF 开始管理活动对象 } void RedLed_Ctor(RedActive* me) { QActive_ctor(&me;->super_, (QStateHandler)RedLed_Initial); //初始状态机基础类(成员 super) me->RedLedStateNow = 0; }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值