📄 os.txt
字号:
因此最终的执行语句是:
! P$ i k. k* A2 w: I$ g# {' i# MIf ( (OSRdyTbl[prio>>3] & = ~ OSMapTbl[prio&0x07] ) = =0 )
6 X ^$ v7 [& L J8 h; M OSRdyGrp & = ~ OSMapTbl[prio>>3];* P5 o# p% ~! D- A& A) Q0 ^
! _, `# |. d; z' T$ o. |最后一张表格OSUnMapTbl[256]
1 C! C. k, y' T这个表格是用于查找最大优先级就绪任务的表格,因此它的规则为:在所查的0x00到0xff,分别对应的是为1的最低位数,0x00按照优先级约定,最低位为0。
' _) d' F# k* J$ t6 G另外由规律可知:最低位(0)每隔一次(2的一次方-1)就会出现1;第二位(1)每隔三次(2的2次方-1)就会出现一次……
, k7 X: O) ~8 Y! A因此可得这张表:
- k( {6 B9 B+ o6 GINT8U const OSUnMapTbl[]={
! x$ \/ _% p1 T0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,% U. X& g, {! V. Y! R" t
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,& n p) N- g2 Y6 r: D
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0
* n$ E/ l% v: O6 b5 x5 i4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0," r- `. `- ]) h# Z, P
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,9 \0 J0 A4 x" [9 j9 y
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
& R6 d2 F' \9 z$ D5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
9 X$ u3 T9 v' o( L, |& l4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
- ^; _# n7 S6 r) {2 E7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,# J5 E1 q# I6 L, \* I) o1 O) \3 h5 u
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
! `3 T$ z+ `8 @9 ~8 D0 E! `5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
/ `# V# t4 W' `4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6 \# d; f y8 T' a- z) q
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,1 u m* G3 @/ h" ]4 ]! e; Q
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
' U2 m( O2 }( Z! u/ _5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0," q4 \$ s+ B: D$ u. f! W) E" I
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
( q M& e& {7 Z7 V: T; z6 l}
; L9 A# n! p, z7 `7 s. z# H3 K) _因此使用这张表可以查出OSRdyGrp中为1的最低位,也可以查出OSRdyTbl[x]中为1的最低位
3 D1 o+ a6 X& h( n2 g- g6 B/ X8 c- v所以令:y=OSUnMapTbl[OSRdyGrp];& w' D( o* O% h1 I
x=OSUnMapTbl[OSRdyTbl[y]];
! Y% O- w s# E1 G/ K! a" h* X即可得到64个不同优先级中的最高就绪优先级。
7 z, ~4 U/ j5 q5 k Z其优先级的值为prio=y*8+x,换成c语言就可以写成prio=y<<3+x;1 E8 {6 h3 B; |3 D5 D
! _, q# Y, g: K& {2 x) j再联系前面讨论任务控制块的时候提到的能让任务加速进入就绪态的算法; K7 O1 |# _* s; X& |' v! i
INT8U OSTCBX = priority&0x07 : O( S' x, M( {% @( O* m
INT8U OSTCBY = priority>>34 Z3 U9 _% X J5 W$ Q r
INT8U OSTCBBitX = OSMapTbl[priority&0x07]
* N8 U8 i l( q( Q( z0 _: [0 ?INT8U OSTCBBitY = OSMapTbl[priority>>3]
7 `! ~5 [5 ^( h, s就可以一目了然了,之所以能加速,就是因为在编译程序的时候已经“算过”了最高优先级,那么在实际执行程序的时候就可以大大减少运算时间,那不就等于加速进入就绪态了吗?
0 b# |7 ?; F; V% ?# ]8 G
9 w) X& O4 ^3 I5 _[ 本帖最后由 Merphy 于 2008-11-6 16:02 编辑 ]
UID116517 帖子18 精华0 积分227 阅读权限100 在线时间6 小时 注册时间2008-10-30 最后登录2008-11-17 查看详细资料
引用 使用道具 报告 评分 回复 TOP
Merphy
开发助工
个人空间 发短消息 加为好友 当前离线 7# 大 中 小 发表于 2008-11-6 15:29 只看该作者
目前的收获就是这样,如果分析中有不当之处,还请大家批评指出 z5 Y; u- }% l8 [/ M6 `( [5 V
说到写这个文章的动机,我想是要提倡一种氛围,一种大家都静下心来好好做学问的氛围。 c& d) I4 Z$ A0 l. v
希望大家理解,谢谢!
2 j0 J, J6 l5 W7 A
4 W% Q1 H9 J# C. y[ 本帖最后由 Merphy 于 2008-11-6 15:44 编辑 ]
UID116517 帖子18 精华0 积分227 阅读权限100 在线时间6 小时 注册时间2008-10-30 最后登录2008-11-17 查看详细资料
引用 使用道具 报告 评分 回复 TOP
lelemaymay
新注册会员
个人空间 发短消息 加为好友 当前离线 8# 大 中 小 发表于 2008-11-23 20:20 只看该作者
Merphy 你好,我最近也在看 uc/os-II ,花了68元在蔚蓝上买的,正在看,我们可以多多交流。
+ h8 d0 z% L+ a, ^- k' N* T
: e3 @- C! c/ v7 y! E6 x0 i你写的正好,敬佩了。期待你继续写下心得,多多交流。我的QQ是 344488282 F& a, }: T! u
4 c8 ^! F# C, @: J4 V) e9 E2 r
[ 本帖最后由 lelemaymay 于 2008-11-23 20:26 编辑 ]
UID119702 帖子1 精华0 积分10 阅读权限10 在线时间0 小时 注册时间2008-11-23 最后登录2008-11-23 查看详细资料
引用 使用道具 报告 评分 回复 TOP
本版热门主题
[wuarm]求教关于UC/TCPIP调试的问题?[huxueh]初学者学习嵌入式实时操作系统μC/OS-II 编译范例 报 ... 活跃会员
yingyong
jjwfcs
ksbgndz
blue_sky013
zljysu
wangyuzhou
zhrul2000
jjccblws
dszhang88
今日热门主题
[fy245]宽频带运放[yuzhenyu]Proteus详细教程[myuid]单片机开发板电路图原理[jiaoyang]Verilog 的一本好书[jiaoyang]VERILOG快速入门[knight1978]F2812最小系统图[chenrun1]华为verilog教程[ldcwudy]EDA 数字钟课程设计报告[sapala]才鸟求助````````````[fuanwd][分享]最新集成电路应用300例 本版最新回复
[原创]uc/OS-II内核小析 (7/171)[转帖]uC/OS-II和Event Flags (56/3003)[下载]μC/OS-Ⅱ实时嵌入式操作系统源代码 (462/15480)《uC/OS实时操作系统》下载 (96/7176)《嵌入式实时操作系统uCOS-II》(第二版)光盘 (84/4225)嵌入式实时操作系统μC/OS-II及其应用 (543/15476)初学者学习嵌入式实时操作系统μC/OS-II 编译范例 报 ... (0/28)uCOS_II 最新版2.86的移植与源代码--吐血推荐 (42/2174)UCosII 的 TCP-IP 协议的源代码! (31/1740)[推荐]LwIP在ucOS上的移植 (233/8790) ?? 上一主题 | 下一主题 ??
查看积分策略说明
快速回复主题
选项
禁用 URL 识别
禁用 Smilies
禁用 Discuz!代码
使用个人签名
接收新回复邮件通知
加入事件
标题
内容
发表帖子[完成后可按 Ctrl+Enter 发布] 预览帖子 恢复数据 清空内容
默认表情
12
最近访问的版块
Verilog Hdl
ARM
VHDL
C语言系列
单片机仿真
电路设计
Ⅰ.PCB设计
PCB新手乐园
PowerPCB
Protel
Allegro
OrCAD/LOGIC
EDA爱好者
CAM
Ⅱ.电子电路
电路设计
图纸/资料
产品开发
电源中心
功放音响
家用电器
电子玩具
数码产品
照明产品
RF产品
车载产品
电子医疗
网络/安防
电脑周边
电池/充电器
Ⅲ.驱动开发
C语言系列
单片机世界
单片机仿真
Ⅳ. CPLD|FPGA
ALTERA
LATTICE
XILINX
Verilog Hdl
VHDL
Ⅴ.嵌入式
DSP
ARM
WindowsCE
uClinux
Vxworks
uC|OS-II
Ⅵ.论坛管理
论坛事务
站内意见/建议/咨询
招聘求职
开开心心来灌水
控制面板首页 编辑个人资料 积分交易 积分记录 公众用户组 勋章 访问推广 基本概况 流量统计客户软件发帖量记录 版块排行主题排行发帖排行积分排行 交易排行 在线时间 管理团队 管理统计 我的话题 我的收藏 我的订阅 我的权限 我的投票 我的商品 我的悬赏 我的活动 我的辩论 我的好友 我的空间
我的资料
我的空间
当前时区 GMT+8, 现在时间是 2008-11-23 22:44 粤ICP备06122313号
清除 Cookies - 联系我们 - bbs.dzkf.net - Archiver - WAP - TOP
Powered by Discuz! 6.1.0 ? 2001-2008 Comsenz Inc.
Processed in 0.173065 second(s), 8 queries, Gzip enabled.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -