⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 从混沌中走出-uc-os ii学习日记--电子门.htm

📁 ucos的资料以及单片机dsp的经典移植程序
💻 HTM
📖 第 1 页 / 共 3 页
字号:
}
.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>&nbsp;</DIV>
      <DIV>&nbsp;</DIV>
      <DIV>&nbsp;</DIV>
      <DIV>&nbsp;</DIV>
      <DIV>&nbsp;</DIV>
      <DIV>&nbsp;</DIV>
      <DIV>&nbsp;</DIV>
      <DIV>&nbsp;</DIV>
      <DIV>&nbsp;</DIV>
      <DIV>&nbsp;</DIV>
      <DIV>&nbsp;</DIV>
      <DIV>&nbsp;</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%">&nbsp;</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%">&nbsp;</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%">&nbsp;</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%">&nbsp;</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>&nbsp;</TD></TR>
                          <TR>
                            <TD class=content9 vAlign=center 
                              bgColor=#bbccde><STRONG>从混沌中走出-uc/os&nbsp;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>&nbsp;</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)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//change 
                                bu cmj<BR>int main 
                                (void)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;PC_DispClrScr(DISP_FGND_WHITE 
                                + 
                                DISP_BGND_BLACK);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 
                                Clear the 
                                screen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;OSInit();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 
                                Initialize 
                                uC/OS-II&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;PC_DOSSaveReturn();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 
                                Save environment to return to 
                                DOS&nbsp;&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<BR>//del 
                                by 
                                cmj&nbsp;&nbsp;&nbsp;&nbsp;<BR>//&nbsp;&nbsp;&nbsp;&nbsp;PC_VectSet(uCOS, 
                                OSCtxSw);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 
                                Install uC/OS-II's context switch <BR><BR>vector 
                                */<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;RandomSem&nbsp;&nbsp;&nbsp;= 
                                OSSemCreate(1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 
                                Random number 
                                semaphore&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;OSTaskCreate(TaskStart, 
                                (void *)0, &amp;TaskStartStk[TASK_STK_SIZE - 1], 
                                0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;OSStart();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 
                                Start 
                                multitasking&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<BR>}<BR>关于pc的函数我不感兴趣,我学习东西的过程是先总体浏览,不求很懂(能懂最好了),主程序中首先进行了<BR><BR>操作系统初始化,然后创建了一个任务,最后启动了多任务运行环境。太简单了。再往下看创建的任务子函数<BR>TaskStart(),在这个函数中又创建了10个人物。这时浏览一遍后的感性认识。接下来通过看书,了解到在启动<BR><BR>多任务环境前需要至少创建一个任务,我想TaskStart()任务就应该是这个原因放在了&nbsp;&nbsp;&nbsp;&nbsp;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>&nbsp;</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>&nbsp;</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 + -