打印

嵌入式多任务实时内核 邀请您一起来实现

[复制链接]
4946|37
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
JUROON|  楼主 | 2009-4-7 22:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位工程师,

    您好,我叫丁立星。

    我在大概7年前接触嵌入式操作系统,随着使用慢慢加深了对其内部原理的理解,然后开始构想自己实现一个多任务内核。

    前段时间工作比较轻松,我利用空闲时间完成了第一版实现,而且设计目标从最初的一个内核转变为包含多任务实时内核的嵌入式开发套件。目前,其相关源代码和资料都公布在sourceforge上,项目网址为:JDSoE.sourceforge.net。

    我做这件事有几个目的:
    1、满足自己的兴趣爱好
    2、藉此结识一些技术上能够交流的朋友
    3、推广普及RTOS的实现和使用技术
    4、为嵌入式开发提供一种开源选择

    然而,与设想情况相反,我在多个论坛上发出的参与邀请都没有什么反应,甚至难得有技术交流。时间长了,我自己也受到影响,但是我还是不甘几年的想法和实践就这样不了了之。所以到这里来寻求帮助,希望能在此对JDSoE进行宣传,为有兴趣者提供交流环境乃至推进其开发。而且,如果能够确保JDSoE持续开源,为促进它的发展和推广,我可以放弃对其拥有的权利。

    JDSoE的简单介绍:

    JDSoE是一个嵌入式开发套件,它是编译工具、构建脚本及组件库德集合。
    JDSoE的当前版本在LPC2210上完成调试(在LPC2131上进行了移植,使用easyRAM开发板)。使用gmake及一组makefile管理和执行构建。
    JDSoE实现了两个组件库:
    1、vm虚拟处理器(在不同移植平台上提供统一的操作接口)
    2、cm多任务内核(支持最多32个优先级,支持抢占和同优先级任务轮转,不限制任务数量,提供信号量、互斥、队列及条件等任务间通信和同步工具)
    JDSoE以组件的方式管理源代码树。
    它现在又很多不足,需要您的支持。

    您可以通过http://sourceforge.net/project/showfiles.php?group_id=254798&package_id=312521&release_id=665728下载JDSoE。

    我的联系方式(上班时间不能上网,见谅)
    msn:ayeh_dd@hotmail.com
    email:ding.lixing@gmail.com

相关帖子

沙发
JUROON|  楼主 | 2009-4-7 23:06 | 只看该作者

坐在沙发上等

使用特权

评论回复
板凳
JUROON|  楼主 | 2009-4-8 13:00 | 只看该作者

好冷呀!

使用特权

评论回复
地板
ayb_ice| | 2009-4-8 20:28 | 只看该作者

UCOS-II不是很好吗

一般的水平也很难写出UCOS-II这样的了.
裸奔一般都可以搞定项目了,如果裸奔架构好,管理任务也很方便的,程序维护都可以类似OS的效果,我不研究那玩意几年了,现在总在思考裸奔架构...

使用特权

评论回复
5
JUROON|  楼主 | 2009-4-11 21:50 | 只看该作者

呵呵

了解RTOS对写裸奔程序也有帮助的

使用特权

评论回复
6
冷漠| | 2009-4-12 13:23 | 只看该作者

如果不能通过权威机构认证,写的再好也不过是个“玩意”

中国大学里研究uc/OS的教授有的是,写的源代码分析教材也不少,内容非常吸引人。

我喜欢看北航出版社出版的 任哲老师写的关于UCOS-II源代码分析的书。既有概念讲解,又有代码分析。一清二楚。

LZ 还没同时做到这两点吧。

使用特权

评论回复
7
soso| | 2009-4-12 13:57 | 只看该作者

现在写RTOS是生不逢时了

   基本上市场上流行的都是90年代初出来的,楼主有足够多的时间还不如去开源社区混,或者写一些跨OS的一些嵌入式构件:键盘模块,LED模块、LCD模块、EEPROM、UART、CAN、 DIO、AIO等,让这些构件跨OS或者编译器运行,这样让8 - 32位的MCU开发变得足够简单。最近看了salvo的程序结构觉得很有意思,使用不同的编译器都可以干活,问题是极度复杂。

使用特权

评论回复
8
juroon| | 2009-4-13 15:49 | 只看该作者

答复楼上两位

两位的意见都挺对的,
第一,缺少对rtos的分析和介绍
第二,要向移植通用化发展

但这都要有人做,需要时间。所以才请大家一起来。
另外,对于ucos及相关分析书籍,ucos有几个硬伤(不支持同优先级、互斥占用优先级等等),书籍多是对代码实现逻辑的解释缺少rtos设计思想的分析。

我在这问一个问题,看那位能够解释一下:
互斥一般采用优先级继承的方式作为解决优先级反转的一个工具,当发生继承时内核应当作哪些事?

使用特权

评论回复
9
冷漠| | 2009-4-13 17:56 | 只看该作者

没劲,把简单的事情弄那么复杂。

天花板协议。



我也问LZ个问题:去年wxj1952“一道题终结OS/非OS之争”3000元求解,最后没有一个人能解。(其实答案是用OS解决的,很简单。但是裸奔很困难。)

   请真正懂OS同步、互斥机制的高手来解一下。把3000元拿走。(名誉上)
看看七年学到手了什么。

使用特权

评论回复
10
highgear| | 2009-4-13 21:03 | 只看该作者

冷嬷嬷啊,不能这么不要脸的吧

最后没有一个人能解。不要脸到了如此程度,难得啊。

小衲看过那个帖子,也说说:
1) 至少一半的人可以用裸奔做出
2)用OS能解决的,裸奔一定能解决
3)因为你们不懂裸奔,所以你们看不懂高手使用用裸奔的原理,而且唧唧歪歪的谩骂,把技术问题变成了人品问题,到现在仍然恬不知耻。
4)你们不知道 os 一直在中断,所以,要求任务不能中断,你们一直用你们的 软打断胡搅蛮缠代替硬中断,无耻伎俩。哈哈,mcu上真正没有硬中断而实现多任务,os 做不到了,只有裸奔才能做到。





一个可以用简单硬件实现的流水灯,被你们吹嘘成不得了的技术,中国人不用美国的 os 就做不出来,哈哈哈, 我给了你三种方案,连中断都没用,你怎么不出声了? 





"其实答案是用OS解决的,很简单。但是裸奔很困难。"  这是世界上最愚蠢无知的说法,也只有你们这些连 os 有没有中断的烧饼们才能说出。


使用特权

评论回复
11
highgear| | 2009-4-13 21:37 | 只看该作者

冷嬷嬷啊, 你有没有种

把你的“最后没有一个人能解“的题,贴出来,说清楚是软打断还是硬中断,拿出3000元,然后由斑竹们或是由大家评判?敢不敢?如果斑竹们或是大家一致评判 os 可以做到,而裸奔做不到,小衲愿捐出10,000元香火金。

因为你们的水平实在太低而且够无耻自我评判,所以你们当然要说“最后没有一个人能解“,否则不就得付出3000元?事情过去了,大家没与你们计较,不料你们居然无耻到把“最后没有一个人能解“当真的地步,哈哈哈。





你们敢不敢接受大家的评判?








使用特权

评论回复
12
ayb_ice| | 2009-4-13 22:02 | 只看该作者

又要变质了

那个问题我根本就没有兴趣...
当然也可能搞不定.

使用特权

评论回复
13
wangkj| | 2009-4-13 22:07 | 只看该作者

从理论上讲os实现的,裸奔也能实现。

裸奔能实现的,os不一定能实现。(超实时系统)

最实时系统,就是fpga、asic。

裸奔扩充多了,就是os,os扒光了,就是裸奔。

没有绝对的界限。

至于lz的os,早死早超生。
早30年,是机会,现在就是垃圾。

使用特权

评论回复
14
冷漠| | 2009-4-14 10:38 | 只看该作者

王会计说的没错。

“从理论上讲os实现的,裸奔也能实现。”
******************************************************************
OS不过是一种工具,化繁为简的工具。

例如下面这道简单的问题,OS平台上“盖这个楼房”,“菜鸟级初学者”只需要10分钟。

裸奔却需要“拔尖高手”。没有一上午大概不行吧。——时间是最昂贵的产品。

像highgear这种不入流的“高手”,恐怕一年也不行,或许要一辈子。嘴上可是LINUX大牛啦。



一道题终结拥OS与反OS之争 

 这是一个实际应用的例子。实现目标:

1、用单CPU做一个精确的时钟。
2、以此时钟为基准,每秒钟运行一次一个500ms开销的任务,设其为F05()。
3、每分钟到达时,运行一次另一个独立任务,运行开销2.8秒,设其为F28()。


要求:2任务独立不相关,运行时间连续。(如若看门狗触发,千分之一中断恢复时间忽略不计。)

叙述一下这个题目的意思,当每分钟到达时,任务F282运行,这段时间软件耗费2.8秒,这样时钟的秒位任务F05肯定要丢数。怎么解决?

 
 

使用特权

评论回复
15
冷漠| | 2009-4-14 11:02 | 只看该作者

highgear欠学长1000元我帮学长讨账!

highgear 如若3天之内“自己”能完成“如此简单”的问题程序求解,我输给他1000元。

不过别忘了,highgear还赖账学长wxj1952的1000元赌资不还?别以为学长走了就可以没事了。

哈哈,输了就跑,这种人....

按hotpower的话“愿赌服输”,到底打算什么时候还账,也给个准信。
攒了一年凑不起1000元?不就是3天的工资么,搞LINUX的大牛不至于这么穷吧。

使用特权

评论回复
16
atuz| | 2009-4-14 11:15 | 只看该作者

....

都是高手呀,能让俺这从没有编过程序的说一句吗?

时间中断每秒激活另一个中断,在另一个中断中执行F05()。

使用特权

评论回复
17
冷漠| | 2009-4-14 21:15 | 只看该作者

原来highgear的10,000元赌资是冥纸币!

“......如果斑竹们或是大家一致评判 os 可以做到,而裸奔做不到,小衲愿捐出10,000元香火金。”

*****************************************************************
题目已经出了一天,highgear还没点动静。菜鸟10分钟的事情,LINUX大牛却需要做一天?或许一年、一辈子?

咱冷漠从不拿冥纸币糊弄人,highgear如若用裸奔程序解决了如此简单的2个任务,1,000元RMB马上打到你的账号上,咱可不像你,输了就跑。

赶快去求助所长、教授,明天就无效啦。

菜鸟10分钟早就完成啦。还等着highgear大牛拿1,000元,这也太不公平了。一上午时间早就过了,已经输啦。

“时间是最昂贵的商品。”

10分钟 :10个小时的一场对阵。linux大牛highgear 10个小时竟然裸奔不出菜鸟10分钟就能解决的问题?!还处处找原因,“题目出的不合理,忽悠人....”其实即使让highgear用 LINUX 解决,他也不知道。

哈哈,你管它合理不合理,你裸奔也可以如法**制弄出来一个忽悠人的,照样付你1,000元。

什么时候给了我3个走马灯方案?开玩笑了,马上给你再写一个走马灯方案。highgear 如若能用裸奔程序解决,不是小看你,我愿再付你1,000元!别一天到晚的这方案那方案,裸奔是让你写程序,“方案”谁都会说。

“理论上都能实现。”实际上一个都实现不了。10楼、11楼大牛只会吹呀,吹了半天穷的叮当响,还装大拿呢。



使用特权

评论回复
18
computer00| | 2009-4-14 21:51 | 只看该作者

无聊。连续2.8s运行的任务不被任何打断,还要保持0.5s的任务

任何单CPU的系统都做不到,windows做不到,linux也做不到。

使用特权

评论回复
19
highgear| | 2009-4-14 22:28 | 只看该作者

立此为证!

1、用单CPU做一个精确的时钟。
2、以此时钟为基准,每秒钟运行一次一个500ms开销的任务,设其为F05()。
3、每分钟到达时,运行一次另一个独立任务,运行开销2.8秒,设其为F28()。
要求:2任务独立不相关,运行时间连续。(如若看门狗触发,千分之一中断恢复时间忽略不计。)

小衲完成上面所说的,不过评判的由公众完成,冷馍馍不得插嘴,否则你会不断的胡搅蛮缠,不断的改变题意。而且,在一个mcu 上连续运行2.8s,500ms, 不拆分为若干片断,而且不出让cpu,还有如此的白痴!!!!!!!

先来一个简单的吧,还有一个context 保护的(别弄错,不是os, 还是洛奔啊)

#define REG char
typedef void (*TASKPOINTER)();


//depend on CPU architecture
//
#define Redirect(x) 
 __sp--;   
 __sp--;  
 __sp[0] = __sp[2];    //标志
 __sp[1] = *((REG*)(x)); 
 __sp[2] = *((REG*)(x)+1);
 

//10 ms interrupt
void Timer_Interrupt()
{
    counter1++;
    if (counter1 >= 100) 
    {
        counter1 = 0;
        SetClock();    //由程序员自己安排使用或保护哪些寄存器, 以免冲突。
        counter2++;
        if (counter2 >= 60)
        {
             counter2 = 0;
             if (!busy) 
                Redirect(F28);  //返回到 F28
        }
        else 
        {
              if (!busy)
              Redirect(F05);  //返回到 F05
        }
    }
}


void F28()  //洛奔下,这个应该拆分为若干小片断。连续运行2.8而不出让cpu,这样的设计愚蠢之至,也只有xwj1952们才这么做!
{
   busy = true;
   
   
   
   busy = false;
}


void F05()   //这个也应该拆分为若干小片断
{
   busy = true;
   
   
   
   busy = false;
}



请大家评判,冷馍馍请闭嘴。如果大家认为完成了,那么请冷馍馍自掌嘴.








难道 21icbbs 水平如此之低,“最后没有一个人能解“?








使用特权

评论回复
20
x_tin| | 2009-4-14 22:59 | 只看该作者

再晕...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

25

帖子

0

粉丝