📄 从混沌中走出-uc-os ii学习日记--电子门.htm
字号:
}
.oblog_text {
FONT-SIZE: 13px; LINE-HEIGHT: 1.6
}
</STYLE>
<TABLE class=content1 cellSpacing=0 cellPadding=0 width=996 border=0>
<TBODY>
<TR>
<TD vAlign=top width=118>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV></TD>
<TD vAlign=top>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><IMG height=50 alt=""
src="从混沌中走出-uc-os ii学习日记--电子门.files/index_02.jpg"
width=752></TD></TR></TBODY></TABLE>
<TABLE class=content2 cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width="19%"> </TD>
<TD class=banner width="64%">
<TABLE cellSpacing=0 cellPadding=0 width="80%" align=left
border=0><TBODY>
<TR>
<TD class=blog_name><SPAN id=blogname>MCU博客数据载入中,
请稍候...</SPAN></TD></TR></TBODY></TABLE></TD>
<TD width="17%"> </TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><IMG height=53 alt=""
src="从混沌中走出-uc-os ii学习日记--电子门.files/index_05.jpg"
width=752></TD></TR></TBODY></TABLE>
<TABLE class=content3 cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width="3%"> </TD>
<TD vAlign=top>
<DIV id=topMenu>
<DIV id=subject_l>MCU博客数据载入中, 请稍候...</DIV>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-0269824239044964";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//-->
</SCRIPT>
<SCRIPT src="从混沌中走出-uc-os ii学习日记--电子门.files/show_ads.js"
type=text/javascript>
</SCRIPT>
</DIV></TD>
<TD width="3%"> </TD></TR></TBODY>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-0269824239044964";
google_ad_width = 468;
google_ad_height = 15;
google_ad_format = "468x15_0ads_al_s";
google_ad_channel = "";
//-->
</SCRIPT>
<SCRIPT src="从混沌中走出-uc-os ii学习日记--电子门.files/show_ads.js"
type=text/javascript>
</SCRIPT>
</TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top width=509>
<DIV id=content>
<TABLE height=13 cellSpacing=0 cellPadding=0 width=490 align=center
border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<TABLE class=seyle4 cellSpacing=0 cellPadding=0
width="100%" border=0>
<TBODY>
<TR>
<TD> </TD></TR>
<TR>
<TD class=content9 vAlign=center
bgColor=#bbccde><STRONG>从混沌中走出-uc/os ii学习日记</STRONG></TD></TR>
<TR>
<TD>
<DIV align=right><SPAN class=textbox-label>[
2006-4-29 9:54:56 | By: <SPAN
class=style3>电子门</SPAN>
]</SPAN></DIV></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%"
border=0>
<TBODY>
<TR>
<TD height=3> </TD></TR></TBODY></TABLE>
<TABLE style="TABLE-LAYOUT: fixed" cellSpacing=0
cellPadding=0 width="100%" align=center border=0>
<TBODY>
<TR>
<TD><SPAN class=oblog_text><SPAN
id=ob_logd11039></SPAN>
<TABLE cellSpacing=2 cellPadding=3 width="100%"
border=0>
<TBODY>
<TR>
<TD bgColor=#eeeeee><FONT
color=black><U>从混沌中走出-uc/os
ii学习日记</U></FONT></TD></TR>
<TR>
<TD bgColor=#eeeeee><BR>
<TABLE cellSpacing=1 cellPadding=3 width="95%"
align=center>
<TBODY>
<TR>
<TD
style="FONT-SIZE: 12px; LINE-HEIGHT: 18px"><BR><BR>各位感兴趣的进来后,可别以为我已经是什么高手了,那说明我的题目把大家误导了,其实我是想写一个学习<BR><BR>实时操作系统uc/os
ii的日记,记下我的学习之路,当然这其中包含我的错误理解。以前看到的精辟文章都是<BR><BR>各位在取得了小成,有了一定的心得,并经过实际检验之后,确认无误后共享给大家的。而我的打算是,只是<BR><BR>记录自己短时间内的理解,错误是在长时间后方能得到纠正的,所以其中的错误想请大家指出,进而加快我的<BR><BR>理解,学习的过程,这也是我的目的之一。另外就是希望和刚刚踏入,或有想法踏入嵌入式系统的朋友们一起<BR><BR>讨论,共同进步。<BR>我做过一段时间的硬件,控制器用的是51单片机,程序都是采用前后台的方式,还没有系统的开发过产品(还没<BR><BR>有毕业呢)。最近看到arm的兴起,决定尝试一下,正好楼下实验室的一个哥们买了一块周立功的开发板,可一<BR><BR>蹭一蹭,没有开发板估计我也懒得学,有了块板子,就来劲了。<BR>因为有硬件的底子,我也没有去看arm控制器的介绍,首先把不上系统的例程序先跑了一遍,自己在把几个板子<BR><BR>上具有的功能,融合起来,编了一个程序,稍微了解一下板子的功能。这次学习的重点不是这块,就敷衍了一<BR><BR>下。<BR><BR>首先声明这都是目前学习中我的个人理解,一定会有错误的,目的是希望大家指出。<BR>然后就向着期待已久的移植操作系统进发了,又怕又喜呀。先移例子,按照要求把source文件夹放在了<BR><BR>software\ucos-II文件夹下,在这个文件夹下,存放得是系统移植的例子,其中有三个文件夹:<BR><BR>arm_pc,source,lpc2100是和系统移植相关的。source中存放的是uc/os的源码,lpc2100中存放的是关于arm控<BR><BR>制器的文件。这个文件夹中的代码应当是和具体的控制器直接相关的,应当是根据实际情况进行修改的。第三<BR><BR>个文件arm_pc中存放的是pc机上的一些应用程序经过修改的,没有仔细看,我觉得现在还用不着。<BR>因为我是做硬件的,喜欢从本质上看到程序是怎么运行的,操作系统是如何工作的,这一点我觉得汇编程序最<BR><BR>能体现程序运行的流程了。<BR>我首先看了一下主函数,很简单,<BR>//void
main
(void) //change
bu cmj<BR>int main
(void)<BR>{<BR> PC_DispClrScr(DISP_FGND_WHITE
+
DISP_BGND_BLACK); /*
Clear the
screen <BR><BR> */<BR><BR> OSInit(); /*
Initialize
uC/OS-II <BR><BR> */<BR><BR> PC_DOSSaveReturn(); /*
Save environment to return to
DOS <BR><BR> */<BR>//del
by
cmj <BR>// PC_VectSet(uCOS,
OSCtxSw); /*
Install uC/OS-II's context switch <BR><BR>vector
*/<BR><BR> RandomSem =
OSSemCreate(1); /*
Random number
semaphore <BR><BR> */<BR><BR> OSTaskCreate(TaskStart,
(void *)0, &TaskStartStk[TASK_STK_SIZE - 1],
0);<BR> OSStart(); /*
Start
multitasking <BR><BR> */<BR>}<BR>关于pc的函数我不感兴趣,我学习东西的过程是先总体浏览,不求很懂(能懂最好了),主程序中首先进行了<BR><BR>操作系统初始化,然后创建了一个任务,最后启动了多任务运行环境。太简单了。再往下看创建的任务子函数<BR>TaskStart(),在这个函数中又创建了10个人物。这时浏览一遍后的感性认识。接下来通过看书,了解到在启动<BR><BR>多任务环境前需要至少创建一个任务,我想TaskStart()任务就应该是这个原因放在了 OSStart()之前。<BR><BR>接着出现了困扰我几天的问题,到现在还是没明白。任务之间是如何切换的,操作系统何时退出当前任务,去<BR><BR>寻找优先级最高的就绪的任务。查资料,网上询问。得到一个答案。中断级任务调度,和任务级调度。我的理<BR><BR>解是当发生中断时,操作系统内核判断此时是否有更高优先级的就绪任务,有的话进行任务调度。任务级调度<BR><BR>就是当前任务在执行过程中主动执行任务调度,将权力交给内核。<BR>但是这个中断是怎么产生的呢,我又看到了时钟节拍的概念,时钟节拍(clock
tick):P67页中说道时钟节拍是<BR><BR>特定的周期性中断。有两种作用:这种周期性的定时中断一来为内核提供一个时间标准,例如某个任务要延时<BR><BR>多长时间,可以通过纪录这种中断来完成(中断的时间是已知的,但应当是可更改的),二
为任务切换提供了时<BR><BR>间片,任务之间的调度是按时完成的,就是在一个时钟节拍后来进行<BR>P68-P69中的图形说明了这一点。以前不明白每个任务是一个死循环,在每个程序中都有一个OSTimeDly(),这个<BR><BR>函数是将任务挂起,将控制权交给内核,内核进行任务调度,从就续的任务中找到优先级最高的任务执行,这<BR><BR>是一种调度。那么当一个低优先级任务在执行时,如果在等待一个信号,可能要等很长时间,那么内核不能一<BR><BR>直在这里等待这个信号的到来,别的高优先级任务可能已经就绪,那么就需要进行任务调度,何时调度呢?这<BR><BR>时就应该是时钟节拍所起到的作用,每一个时钟节拍到达后进入中断处理函数,进行任务调度。<BR>所以总的理解应当是内核在每个时钟节拍到来时进行一次任务调度,这是大前提,使每个任务都有相同的权利<BR><BR>执行相同的时间。有时个别任务在一个时钟节拍内早已完成,这时需要向内核提前交权,让内核进行任务调度<BR><BR>。<BR><BR>到目前为止我的理解就是这样的,苦于周围无人探讨,遂发帖请大家指正。我将继续努力,我的目标是理解系<BR><BR>统是如何工作的。<BR><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></SPAN></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%"
border=0>
<TBODY>
<TR>
<TD height=3> </TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%"
border=0>
<TBODY>
<TR>
<TD class=seyle5 height=13>
<DIV align=right><SPAN class=textbox-urls><A
href="http://www.mcublog.com/blog/user1/7610/archives/2006/11039.html#">阅读全文<SPAN
id=ob_logreaded></SPAN></A> | <A
href="http://www.mcublog.com/blog/user1/7610/archives/2006/11039.html#cmt">回复(0)</A>
<SPAN id=ob_logm11039></SPAN>| <A
href="http://www.mcublog.com/blog/showtb.asp?id=11039"
target=_blank>引用通告<SPAN id=ob_tbnum></SPAN></A> |
<A
href="http://www.mcublog.com/blog/user_post.asp?logid=11039"
target=_blank>编辑</A></SPAN></DIV></TD></TR></TBODY></TABLE>
<TABLE height=14 cellSpacing=0 cellPadding=0
width="100%" align=center border=0>
<TBODY>
<TR>
<TD> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<DIV id=morelog>
<UL>
<LI>上一篇:<A
href="http://www.mcublog.com/blog/user1/7610/archives/2006/11038.html">七款嵌入式Linux操作系统简介</A>
<LI>下一篇:<A
href="http://www.mcublog.com/blog/user1/7610/archives/2006/11040.html">本人改写的在C8051F124上运行的uCOS源码,大家交流一下</A>
</LI></UL></DIV>
<DIV id=form_comment>
<DIV id=gg_usercomment></DIV><A name=cmt></A>
<DIV class=title>发表评论:</DIV>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -