70

帖子

0

TA的资源

一粒金砂(初级)

21
 
另外我想问下楼主:
如何设计时间片?
是在时钟中断里面将每个任务的运行时间计数递减吗?相同优先级的任务,在时间片的分配上是基于FIFO队列的吗?

回复

64

帖子

0

TA的资源

一粒金砂(初级)

22
 
纯支持
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

23
 
斑竹哪里去了,置顶啊。让大家能够长期跟帖,楼主开博客吧。这样比较牛B。让更多人参与才行。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

24
 
支持
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

25
 
支持LZ
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

26
 
支持!^_^
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

27
 
赞一个,heh
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

28
 
引用 18 楼 newlife_qqk 的回复:
不错!
在这里有幸看到楼主的这篇帖子,深感欣慰!

仔细看了下楼主的思路,现提出一点。

另外,指出一点:是依据时间片的操作系统,还是据优先级的抢占式操作系统,
还是混合多种切换算法的操作系统的根本区别就是其切换算法,
先进先出,后进先出,最短等待时间,最短平均等待时间,等等算法在这里都有用武之地!

时间片和优先级抢占这两个功能并不冲突,完全可以一起实现。
在同等优先级的情况下,用时间片…


首先多谢各位朋友的支持关心,
兄弟我写的这个OS,纯粹是个人一时头热,并无严格设计规划,
代码比freertos和ucos等都精简很多
或许,BenOSII,会重新认真考虑,到时候开个主页啥的~
因为最近在给公司的平台移植UCOS和FREERTOS,
所以写出的自己的OS函数名字都是比较雷同,没有新意,呵呵。

一些疑问回复如下:
1,BenOS目前是纯粹基于优先级抢占的操作系统,
同优先级的时间片轮转,实际还未实现(其实不难)
时间轮转调度的算法,基础就是时钟节拍,
根据先进先出的顺序(或者其他顺序)
来轮转运行同优先级的任务...
没啥玄虚在里面,多开个数据结构临时管理就够了,
只是考虑到性能的时候,要重新设计一下。

2,内核和任务分开编译...
其实原理并不复杂,但是实现起来,很繁琐,
涉及到ELF文件格式支持等等,
特别是堆栈就必须要动态分配了,
并且需要实现文件系统支持,一个人做的话,容易失去重心~
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

29
 
另:已经做了个电子书放在eeworld里面,
可以下载下来读一下,
里面代码排版好点。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

30
 
支持,真有高人啊!
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

31
 
电子书呢?
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

32
 


(不知道能不能显示)
这个是今天作的BenOS和UCOS的性能对比
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

33
 
http://picasaweb.google.com/lh/photo/z4WmirOQ0UMOIP6xd62U0w?feat=directlink

再发一次看看
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

34
 
最后还发一次 咋整个图片这么难呢?
发件人 BENOS
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

35
 
lz怎么发图片还这么复杂啊,还要提炼,唉。就帮忙提炼一下吧,免得大家还要费力找。
http://lh4.ggpht.com/_zTf8VO44hes/SWIVibOUPJI/AAAAAAAAACw/DTs3kasM1JE/s800/benos-ucos%E6%80%A7%E8%83%BD%E6%AF%94%E8%BE%83.JPG
BenOS VS ucOSII
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(中级)

36
 
高人年年有,今年特别多
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

37
 
CU好多了,代码一发到这里就乱得不行!
今天还给一份BenOS内存分析

操作系统内核使用:
任务表                                                                        96+16个字节       
                                注:20个字节/任务 * 8(默认任务个数)
                                
信号量                                                                        32个字节
                                                                注:4个字节/信号量 * 8(默认信号量个数)

消息队列                                                                54个字节
                                                                注: 默认8条消息/队列 * 3 (默认3个消息队列)
                                                               
空闲任务(Idle)                                                96个字节       
                                注:每个任务最少需要96个字节的堆栈,推荐256个字节
                    
RAM使用统计:
一个原始的系统总共占用内存约为400个字节
其中内核占用内存不到300个字节

(注:根据armlink指示,另外还有96个字节的数据用于LIBSPACE.O文件,
这个查明,其实是开发环境在为main主函数初始化的时候用到)


2,代码量(包括ROM里面的只读数据)统计
内核                                                        1200 个字节
信号量                                                        300 个字节
消息队列                                                500 个字节

ROM使用统计
原始的系统代码小于2K
其中内核代码小于1.2K
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

38
 
支持楼主
以前上学的时候没把学OS当回事只把C/C++当个宝
现在想来真是芝麻西瓜
现在一切重头来
希望与LZ一起努力
最好楼主能打个包给学习一哈
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

39
 
引用 38 楼 KASTLO 的回复:
支持楼主
以前上学的时候没把学OS当回事只把C/C++当个宝
现在想来真是芝麻西瓜
现在一切重头来
希望与LZ一起努力
最好楼主能打个包给学习一哈


已经做了份电子文档,在eeworld下载里面有下~
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

40
 
之前的互斥读写实现的信号量有问题,
压力测试不能通过
今天重新实现了一次,测试互斥操作正常。

另外,使用位带(bit band)实现互斥操作,
有没有同学有较好的思路的?
给我点指点~


  1. __asm I8 BenOSGetSemaphore1(SEMAPHORE_TYPE* pSem)
  2. {
  3. THUMB
  4. REQUIRE8
  5. PRESERVE8

  6.   PUSH {R1,R2,LR}

  7. TryToRead_G
  8.   LDREX  R2, [R0]
  9.   CMP R2,#0
  10.   CBZ   R2,GetFailed_G

  11. ReadSuccess_G     ;Try to get sem
  12.   SUB   R2, #1
  13.   STREX  R1,R2,[R0]
  14.   CMP R1, #0
  15.   BNE  TryToRead_G

  16. GetSuccess_G
  17.   MOV   R0, #1
  18.   POP   {R1,R2,PC}

  19. GetFailed_G
  20. ;  STREX  R1,R2,[R0]
  21.   MOV   R0, #0
  22.   POP   {R1,R2,PC}
  23. }

  24. __asm I8 BenOSReleaseSemaphore1(SEMAPHORE_TYPE* pSem)
  25. {
  26.   PUSH {R1,R2,LR}

  27. TryToRead_R
  28.   LDREX  R2, [R0]

  29. ReadSuccess_R     ;Try to get sem
  30.   ADD   R2, #1
  31.   STREX  R1,R2,[R0]
  32.   CMP R1, #0
  33.   BNE   TryToRead_R

  34. GetSuccess_R
  35.   MOV   R0, #1
  36.   POP   {R1,R2,PC}
  37. }

  38. __asm I8 BenOSWaitSemaphore1(SEMAPHORE_TYPE* pSem,I32U timeout)
  39. {
  40.   EXTERN BenOSTimeDly

  41.   PUSH {R1,R2,R3,LR}
  42.   ADD  R1, #1
  43.   
  44. Loop_W
  45. TryToRead_W
  46.   LDREX  R2, [R0]
  47.   CBZ   R2,Wait1Tick_W

  48. ReadSuccess_W     ;Try to get sem
  49.   SUB   R2, #1
  50.   STREX  R3,R2,[R0]
  51.   CMP R3, #0
  52.   BNE  TryToRead_W
  53.   B   GetSuccess_W

  54. Wait1Tick_W
  55. ;  STREX  R3,R2,[R0]
  56.   SUB   R1, #1
  57.   CBZ   R1,GetFailed_W
  58.   PUSH  {R0-R3}
  59.   MOV   R0,#1
  60.   LDR   R3,=BenOSTimeDly
  61.   BLX   R3
  62.   POP   {R0-R3}
  63.   B   Loop_W


  64. GetSuccess_W
  65.   MOV   R0, #1
  66.   POP   {R1,R2,R3,PC}

  67. GetFailed_W
  68.   MOV   R0, #0
  69.   POP   {R1,R2,R3,PC}  

  70. }

复制代码
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表