没有合适的资源?快使用搜索试试~ 我知道了~
uc-os是比较小的嵌入式实时操作系统,代码量5500行,本文为此系统的中文详解,对学习此系统有很大帮助。。。
资源推荐
资源详情
资源评论
源码分析
特点:
)
)开源,
可移植性,绝大部分代码用 写,硬件相关部分用汇编写,
可固化,
)可剪裁,这通过条件编译实现,使用 语句定义所需要的功能。
)可剥夺性(总是运行就绪条件下优先级最高的任务),
)多任务(可以管理 个任务,其中保留 个给 ,因此用户最多可有 个任务,每个任务优
先级不同,也就意味着不支持时间片轮转调度法,因为这种方法适合于优先级平等的任务)。
)可确定性。函数调度和服务执行时间具有确定性,除了 和某些事件标志服务,系统服务
执行时间不依赖用户应用程序任务数目的多少。
)任务栈。允许每个任务自己单独的栈空间不同,可以使用栈空间检验函数确定所需要的栈空间大小。
)系统服务。提供信号量,互斥型信号量,事件标志,消息邮箱,消息队列,块大小固定的内存申请与释
放,时间管理函数等服务。
)中断管理。中断嵌套层数最多可达到 层。
)稳定性和可靠性。
函数用来初始化内核,必须首先调用。建立两个任务:空闲任务(其他任务都未就绪时运行),统
计任务(计算 的利用率)!
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"#$%&'()#*%#+(#%#%#(#,-.#*#&,-%#(+##,#/ #0#,--#
'&(&#(#&,1#,2##(03#,4#'&(&#(#,--1#,&!
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
5(##5(
6
777#8((91:777777777777777777777777777777777777777777#"#调用用户特定的初始化代码(通过一个接口函数
实现用户要求的插件式进入系统中)"
777#;/%:7777777777777777777777777777777777777777777777#"#初始化变量"
777#;<2=%:7777777777777777777777777777777777777777777#"#初始化就绪列表"
777#;9=%:7777777777777777777777777777777777777777777#"#初始化 ;9 空闲列表"
777#;>5=%:77777777777777777777777777777777777777777#"#初始化 ;>?>@ 空闲列表"
+#;A=BC;>@#D##EE#;/BF;A=BC#D#77777777777777777777777#允许事件标志
777#;A-,1:7777777777777777777777777777777777777777777777#"#初始化事件标志结构"
+
+#;/>/;>@#D##EE#;/BF;/>/;B<#D#7777777777777777777#允许内存管理
777#;/:77777777777777777777777777777777777777777777777#"#初始化内存管理器"
+
+#;G;>@#D##EE#;/BF;G#D#777777777777777777777777777#允许消息队列
777#;G:7777777777777777777777777777777777777777777777777#"#初始化消息队列结构"
+
777#;,%-:777777777777777777777777777777777777777777#"创建空闲任务"
+#;BH;B;>@#D#
777#;,%,:777777777777777777777777777777777777777777#"#创建统计任务"
+
+#;/<;>@#D#77777777777777777777777777777777777777777777777#允许时间管理
777#&;:77777777777777777777777777777777777777777777777#"#初始化时间管理器"
+
777#8((>:77777777777777777777777777777777777777777777#"调用用户特定的初始化代码(参考
8((91())"
+#;$>9 C;>@#D#77777777777777777777777777777777777777777777777#允许 $01
777#$01:77777777777777777777777777777777777777777777777#初始化调试器
+777#
I
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"#$%&'()#*%#+(#%#,--#02##(#,-.#%--,(%#5,&,0-%!
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
;/%
%,#5(#;/%#5(
6
+#;/>;C>;>;>@#D#
777#7777777#J#=:77777777777777777777777777777777777#"# 位的系统时钟清零"
+
777#@%1#J#:777777777777777777777777777777777777#"#中断嵌套层数计数器清零"
777#=(@%1#J#:777777777777777777777777777777777777#"#调度器锁的嵌套层数计数器清零"
777#,%&7777#J#:777777777777777777777777777777777777#"#任务数清零"
777#<17777#J#;AB=>:77777777777777777777777777777#"指明多任务未开始"
777#KL&777#J#:777777777777777777777777777777777777#"#任务切换次数计数器清零"
777#-&7777#J#=:77777777777777777777777777777777777#" 位空闲计数器清零"
+#;BH;B;>@#D#7777777777777777777777777777777777777#"运行统计任务"
777#-&<#J#=:
777#-&/,K#J#=:
777#,<27777#J#;AB=>:77777777777777777777777777777#"#统计任务未就绪"
+
I
空闲任务和统计任务建立的代码基本一样,只是统计任务的优先级比空闲任务大 ,
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"#$%&'()#*%#+(#&,%#*#-#,%!
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
(;,%-
%,#5(#;,%-#5(
6
+#;BH;@B/>;M>#D##
777#@ #&&:
+
+#;BH;<>B>;>F;>@#D#777#使用扩展的 ,%&,>K 来创建
+#;H;C<N8#JJ#777#任务堆栈从底部向顶部增长的方向有两种:表示从大到小,表示从小到
大
777#5(,%&,>K;,%-4
7777777#5(#"477777777777777777777777777777777#"#没有参数传给 ;,%-#"
7777777#E,%-O;BH;$=>;H;M>##P4#"设置堆栈顶"
7777777#;BH;$=>;<4777777777777777777777777#"#优先级设置为最低"
7777777#;BH;$=>;$47777777777777777777777777#设置 $
7777777#E,%-OP4777777777777777777777777#"#设置栈底"
7777777#;BH;$=>;H;M>4777777777777777777777#设置栈大小
7777777#5(#"477777777777777777777777777777777#"#没有 9 扩展数据结构ììììììììììììììììì
7777777#;BH;;H;8H#Q#;BH;;H;=<:"#允许堆栈检测和清空堆栈"
-%
777#5(,%&,>K;,%-4
7777777#5(#"477777777777777777777777777777777#"#@(#,&1%#',%%#(#;,%-#"
7777777#E,%-OP4777777777777777777777777#"##('+,77777777777777777777#
7777777#;BH;$=>;<4777777777777777777777777#"#=(L%#'&(&2#-5-777777777777777#
7777777#;BH;$=>;$4
7777777#E,%-O;BH;$=>;H;M>##P4#"##9((+,77777777777777777#"
7777777#;BH;$=>;H;M>4
7777777#5(#"477777777777777777777777777777777#"#@(#9#K%(77777777777777777777#
7777777#;BH;;H;8H#Q#;BH;;H;=<:"#>,0-#%,#*1#R#-,&#
%,#"
+
-%777#使用不带扩展性的 ,%&, 创建
+#;H;C<N8#JJ#
777#5(,%&,;,%-4
7777777#5(#"4
7777777#E,%-O;BH;$=>;H;M>##P4
7777777#;BH;$=>;<:
-%
777#5(,%&,;,%-4
7777777#5(#"4
7777777#E,%-OP4
7777777#;BH;$=>;<:
+
+
设置任务名称
+#;BH;@B/>;M>#D#
777#,%@,;BH;$=>;<4#@ #"S#-S4#E&&:
-%
+#;BH;@B/>;M>#D#
777#,%@,;BH;$=>;<4#@ #"S-S4#E&&:
+
+
I
源码分析(二)
)使用信号量
#BH;H;M>7777777777777777#777777#"#每个任务堆栈的大小以字计算"
#@;BH77777777777777777777777#777777#"#任务数"
;H7777777#,%O@;BHPOBH;H;M>P:7777777#"任务堆栈"
;H7777777#,%,&OBH;H;M>P:77777777777#开始任务的堆栈ìììì
*,&777777777#,%$,,O@;BHP:777777777777777777777#"传给每个任务的数据"
;>?>@7777#"<,(:777777777777777777777777777#互斥型信号量
5(#,#5(
6
777#;$%'-&&$;AC@$;N8>#R#$;9C@$;9=BH:77777#"清空屏幕"
777#:777777777777777777777777777777777777777777777#"#初始化 "
777#;$,5<&:77777777777777777777777777777777777#"#保存环境以便稍后可以返回 $ 环境"
777#;?4#KL:7777777777777777777777777777#"设置 的切换处理函数"
777#<,(77#J#&,:7777777777777777777777777#"#建立一个信号量"
777#,%&,,%,&4#5(#"4#E,%,&OBH;H;M>##P4#:创建第一个任务,
优先级设置为最大值
777#,&:77777777777777777777777777777777777777777777#"#开始多任务"
I
5(#,%,(#"',,
6
+#;<B=;/>8$#JJ#7777777777777777777777777777777#"#为 的状态寄存器分配内存"
777#; ;<#';%&:
+
777#*,&777777#%OP:
777#@7777#2:
777#',,#J#',,:7777777777777777777777777777777777777777#"#这步是为了防止编译错误"
777#,%,&$%':7777777777777777777777777777777777#"#初始化显示屏"
777#;>@><;<B=:
777#;?K4#<:77777777777777777777777777#"替换机器的时钟中断函数为 所需要的中
断函数"
777#;<,;H;><;>:777777777777777777777#"#调整时钟频率"
777#;>F;<B=:
777#,:77777777777777777777777777777777777777777#"#初始化统计任务"
剩余15页未读,继续阅读
资源评论
wangjiahuilove
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功