免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
31 [报告]
发表于 2009-01-10 14:48 |只看该作者
呵呵,正开始学习RTOS,非常感谢搂主的贡献!!

论坛徽章:
0
32 [报告]
发表于 2009-01-10 16:24 |只看该作者
牛人

论坛徽章:
0
33 [报告]
发表于 2009-01-11 22:46 |只看该作者
原帖由 konghui127 于 2009-1-10 14:48 发表
呵呵,正开始学习RTOS,非常感谢搂主的贡献!!



源码工程文件在1楼可以下载了~

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


目前没有X86的移植版本,从理论上讲,是完全可行
建议您最好找到《自己动手写操作系统》一书,照着做
那本才是专门针对X86平台的。

论坛徽章:
2
巳蛇
日期:2014-10-26 22:38:12天蝎座
日期:2016-01-08 09:25:17
35 [报告]
发表于 2009-01-12 01:19 |只看该作者
牛人,谢谢分享

论坛徽章:
0
36 [报告]
发表于 2009-01-12 14:58 |只看该作者
原帖由 shmilylxx 于 2009-1-11 22:51 发表


目前没有X86的移植版本,从理论上讲,是完全可行
建议您最好找到《自己动手写操作系统》一书,照着做
那本才是专门针对X86平台的。



多谢LZ,,,是非常的感谢

论坛徽章:
0
37 [报告]
发表于 2009-01-12 16:08 |只看该作者
想不到论坛里面还有这等厉害的角色,支持!

论坛徽章:
0
38 [报告]
发表于 2009-02-03 21:58 |只看该作者
最新使用护持访问实现的信号量操作。(汇编实现)


/*当前信号量列表*/
SEMAPHORE_TYPE BenOSSemaphore[MAX_SEM_NUM];   
/*
* 创建信号量
*/
SEMAPHORE_TYPE* BenOSCreateSemaphore(I32 conuter)
{
INT_Stat  stat = 0;
I32U  index;

if (conuter < 0)
{
  return (SEMAPHORE_TYPE*)NULL;
}

stat = BenOS_INT_Save();
for(index=0;index<MAX_SEM_NUM;index++)
{
  if (BenOSSemaphore[index]==-1)
  {
   BenOSSemaphore[index] = conuter;
   BenOS_INT_Restore(stat);
   return &(BenOSSemaphore[index]);
  }
}

BenOS_INT_Restore(stat);
return (SEMAPHORE_TYPE*)NULL;
}

I8 BenOSDeleteSemaphore(SEMAPHORE_TYPE* pSem)
{
INT_Stat  stat = 0;

stat = BenOS_INT_Save();

/*当且仅当信号量计数为0的时候,才能释放该信号量*/
if ((*pSem) != 0)
{
  BenOS_INT_Restore(stat);
  return BenOS_Err;
}
else
{
  (*pSem) = (SEMAPHORE_TYPE)-1;
  BenOS_INT_Restore(stat);
  return BenOS_OK;
}
}
__asm I8 BenOSGetSemaphore(SEMAPHORE_TYPE* pSem)
{
THUMB
PRESERVE8

  PUSH {R1,R2,LR}


TryToRead_G
  LDREX  R2, [R0]
  CLZ   R1,R2
  CBZ   R1,GetFailed_G
  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 BenOSReleaseSemaphore(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 BenOSWaitSemaphore(SEMAPHORE_TYPE* pSem,I32U timeout)
{
  EXTERN BenOSTimeDly

  PUSH {R1,R2,R3,LR}
  ADD  R1, #1
  
Loop_W
TryToRead_W
  LDREX  R2, [R0]
  CLZ   R3,R2
  CBZ   R3,GetFailed_W
  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}  
  NOP
}

论坛徽章:
0
39 [报告]
发表于 2009-02-03 22:04 |只看该作者
要移植网络的协议栈.包括如何支持各种硬件才更有意义哦.

论坛徽章:
0
40 [报告]
发表于 2009-02-04 09:07 |只看该作者
顶。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP