免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: shmilylxx
打印 上一主题 下一主题

自己实现一个RTOS《实时操作系统揭秘》(附源码) [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-01-05 15:18 |只看该作者
难能可贵的共享精神和耐心,收藏此贴!

论坛徽章:
0
22 [报告]
发表于 2009-01-05 17:17 |只看该作者
好贴,好好学习一下

论坛徽章:
0
23 [报告]
发表于 2009-01-05 22:19 |只看该作者
附件里面的图片,是BenOS和UCOS的性能比对分析结果

事实上,这里显示的BenOS性能会好一点,
但是在其他测试程序中,是不一定的~
我没有手段作一个全面测试,另外,带工程的源码,会后续考虑放上来~

benos-ucos性能比较.JPG (60.09 KB, 下载次数: 92)

benos-ucos性能比较.JPG

论坛徽章:
0
24 [报告]
发表于 2009-01-05 22:36 |只看该作者

内存使用情况分析

1,内存(RAM)使用量统计
硬件系统启动使用:
系统堆栈(系统启动的时候需要使用)                                     80个字节

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

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

(注:根据armlink指示,另外还有96个字节的数据用于LIBSPACE.O文件,
其实是开发环境在为main主函数初始化的时候用到,算到OS的头上还不太合理,呵呵)


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

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

3,总计:
2K二进制代码,
400个字节内存使用
(以上结论是根据编译结果得出)

论坛徽章:
0
25 [报告]
发表于 2009-01-05 22:41 |只看该作者
太好了,LZ真是好人哦
LZ也是牛人

论坛徽章:
0
26 [报告]
发表于 2009-01-05 22:45 |只看该作者
谢谢楼主的分享!

论坛徽章:
0
27 [报告]
发表于 2009-01-07 22:35 |只看该作者
以下是使用互斥访问实现的信号量(Thumb2汇编实现)


最近在考虑使用位带(bit band)实现互斥量
有没有朋友对位带实现互斥操作熟悉的?
给我点意见,不胜感谢


__asm I8 BenOSGetSemaphore1(SEMAPHORE_TYPE* pSem)
{
THUMB
REQUIRE8
PRESERVE8

  PUSH {R1,R2,LR}

TryToRead_G
  LDREX  R2, [R0]
  CMP R2,#0
  CBZ   R2,GetFailed_G

ReadSuccess_G     ;Try to get sem
  SUB   R2, #1
  STREX  R1,R2,[R0]
  CMP R1, #0
  BNE  TryToRead_G

GetSuccess_G
  MOV   R0, #1
  POP   {R1,R2,PC}

GetFailed_G
;  STREX  R1,R2,[R0]
  MOV   R0, #0
  POP   {R1,R2,PC}
}

__asm I8 BenOSReleaseSemaphore1(SEMAPHORE_TYPE* pSem)
{
  PUSH {R1,R2,LR}

TryToRead_R
  LDREX  R2, [R0]

ReadSuccess_R     ;Try to get sem
  ADD   R2, #1
  STREX  R1,R2,[R0]
  CMP R1, #0
  BNE   TryToRead_R

GetSuccess_R
  MOV   R0, #1
  POP   {R1,R2,PC}
}

__asm I8 BenOSWaitSemaphore1(SEMAPHORE_TYPE* pSem,I32U timeout)
{
  EXTERN BenOSTimeDly

  PUSH {R1,R2,R3,LR}
  ADD  R1, #1
  
Loop_W
TryToRead_W
  LDREX  R2, [R0]
  CBZ   R2,Wait1Tick_W

ReadSuccess_W     ;Try to get sem
  SUB   R2, #1
  STREX  R3,R2,[R0]
  CMP R3, #0
  BNE  TryToRead_W
  B   GetSuccess_W

Wait1Tick_W
;  STREX  R3,R2,[R0]
  SUB   R1, #1
  CBZ   R1,GetFailed_W
  PUSH  {R0-R3}
  MOV   R0,#1
  LDR   R3,=BenOSTimeDly
  BLX   R3
  POP   {R0-R3}
  B   Loop_W


GetSuccess_W
  MOV   R0, #1
  POP   {R1,R2,R3,PC}

GetFailed_W
  MOV   R0, #0
  POP   {R1,R2,R3,PC}  

}

[ 本帖最后由 shmilylxx 于 2009-1-7 22:38 编辑 ]

论坛徽章:
0
28 [报告]
发表于 2009-01-08 09:39 |只看该作者
帮顶
还没接触过嵌入式的,,,有没在XP上运行的虚拟机来运行这个系统

论坛徽章:
0
29 [报告]
发表于 2009-01-08 12:48 |只看该作者
不错

论坛徽章:
0
30 [报告]
发表于 2009-01-10 14:48 |只看该作者
呵呵,正开始学习RTOS,非常感谢搂主的贡献!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP