亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? arm_00_os_core.lst

?? uCOS在LPC213X上的移植。適合ARM嵌入式系統初學者。
?? LST
?? 第 1 頁 / 共 2 頁
字號:
ARM COMPILER V2.00d,  ARM_00_OS_Core                                                       22/12/07  19:56:45  PAGE 1   


ARM COMPILER V2.00d, COMPILATION OF MODULE ARM_00_OS_Core
OBJECT MODULE PLACED IN ARM_00_OS_Core.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe ARM_00_OS_Core.c THUMB DEBUG TABS(4) 

stmt  level    source

    1          /**********************************************************************************************
    2          本程序只供學習使用,不得用于其它任何用途,否則后果自負。
    3          
    4            ARM_OS_main.c file
    5          
    6            LPC213x上的操作系統——ARM_OS
    7          
    8            作者:heciang
    9            聯系電話:13811129591
   10            QQ:176780142
   11            Email:heciang@126.com
   12            建立日期:2006-5-1
   13            修改日期:2006-5-15
   14            最后修改時間:2006-08-25
   15            版本:V1.0
   16           
   17            Copyright(C) Computer-lov 2006-2016
   18            All rights reserved
   19          **********************************************************************************************/
   20          
   21          #include "CPU.H"
   22          
   23          #include "interrupt.h"
   24          #include "LED.H"
   25          #include "ARM_00_OS_TaskSwitch.H"
   26          #include "my_type.h"
   27          #include "ARM_00_OS_Core.H"
   28          #include "UART.H"
   29          #include "KEYS.H"
   30          #include "Task.h"
   31          
   32          OSpcb * OSReadyList;    //就緒態任務表表頭
   33          OSpcb * OSSuspendList;  //掛起態任務表表頭
   34          OSpcb * OSDelayList;    //延時態任務表表頭
   35          OSpcb * OSCurrentPcb;   //當前運行的任務
   36          
   37          
   38          OSpcb OSSystemIdlePcb;  //系統空閑任務
   39          OSShortPcb OSSuspendListBottom;    //掛起態列表表底
   40          OSShortPcb OSDelayListBottom;      //延時態列表表底 
   41          
   42          
   43          OSdevice OSDeviceBottom;       //設備列表的底部
   44          OSdevice * OSDeviceList;       //設備列表
   45          
   46          volatile uint32 CopyOfVICIntEnable;    //用來備份CopyOfVICIntEnable的狀態
   47          
   48          //volatile uint32 CopyOfIRQEN;    //用來備份IRQEN的狀態
   49          //volatile uint32 CopyOfFIQEN;    //用來備份FIQEN的狀態
   50          
   51          
   52          volatile uint32 OSEnCrCount;    //用來統計進入臨界代碼段次數
   53          
   54          
   55          volatile uint32 TaskAmount;    //用來統計共有多少個任務
   56          
   57          
   58          volatile uint32 TimeOfTaskStart;  //用來保存一個任務剛被切換到運行態的時刻
   59          
ARM COMPILER V2.00d,  ARM_00_OS_Core                                                       22/12/07  19:56:45  PAGE 2   

   60          #define OSMemoryLack       0x0000000100000000  /*錯誤號:內存資源不足*/
   61          
   62          /**********************************************************************************************
   63          功能:內存管理。
   64          入口參數1:Operation。操作方式。可以設置為MEMORY_ALLOCATION(分配)、MEMORY_FREE(釋放)、統計使用量(MEM
             -ORY_STATISTIC)
   65          入口參數2:StartAddr。起始地址,釋放內存時使用。
   66          入口參數3:Length。申請內存或釋放內存時的長度,單位為字節。但實際分配時,是按塊分配的,所以分配時,
   67                     實際分配到的數量可能會比指定的多,所以分配時,最好按塊的整數倍大小來指定分配長度。
   68                     
   69          返回:32無符號型整數。
   70                當操作為分配內存時,返回32位的內存首地址,返回0表示無足夠多的可以用內存。
   71                當操作為釋放內存時,返回1表示釋放成功。返回0表示釋放出錯。
   72                當操作為統計內存使用量時,返回的是內存被使用的字節數。
   73                當操作為獲取緩沖池大小時,返回的是內存緩沖池大小。
   74          
   75          備注:緩沖池大小由OSSizeOfMemoryPool指定。每塊的大小由OSSizePerBlock指定             
   76          **********************************************************************************************/
   77          uint32 OSMemoryManage(uint32 Operation,uint32 StartAddr,uint32 Length)
   78          {
   79   1        //內存分配表
   80   1        //內存分配表是32位整數的一維數組。用每一位來表示一塊是否被使用。當某位設置為1時,表示那一塊被使用。
   81   1        //當某位為0時,表示那一塊可用。
   82   1       static uint32  OSMemoryTable[OSSizeOfMemoryPool/OSSizePerBlock/32];
   83   1                                                                            
   84   1       static uint32 OSMemoryPool[OSSizeOfMemoryPool/4]; //內存緩沖池。內存緩沖池為一個大是數組
   85   1       
   86   1       uint32 BlankCount;    //統計空塊的計數器
   87   1       uint32 Mask;          //分配內存時用的掩碼
   88   1       volatile uint32 i,j;  //循環用的變量
   89   1      
   90   1       OSEnterCritical();   //進入臨界段
   91   1       
   92   1       switch(Operation)     //根據操作碼,選擇不同的操作
   93   1        {
   94   2         case MEMORY_INIT:   //如果是內存初始化
   95   2          {
   96   3           for(i=0;i<OSSizeOfMemoryPool/OSSizePerBlock/32;i++)
   97   3            {
   98   4             OSMemoryTable[i]=0;  //則將整張內存分配表清0
   99   4            }
  100   3           OSExitCritical();  //退出臨界段
  101   3           return 1;   //返回1
  102   3          }
  103   2      
  104   2         case MEMORY_ALLOCATION:  //如果是內存分配,則
  105   2          {
  106   3           BlankCount=0;   //先將內存空塊的數量清0
  107   3           for(i=0;i<(OSSizeOfMemoryPool/OSSizePerBlock/32);i++)  //掃描整個內存分配表
  108   3            {
  109   4             Mask=1;   //掩碼被設置為1,即最低位為1,其它位為0。
  110   4             if(OSMemoryTable[i]==0xFFFFFFFF)  //如果該字中的所以位都為1,表示該字節對應的所有塊都被占用
  111   4              {
  112   5               BlankCount=0;  //空塊計數器置0
  113   5               continue;      //退出本次循環,查找下一個字
  114   5              }
  115   4             for(j=0;j<32;j++)  //掃描一個字的32個bit是否有空閑的RAM
  116   4              {
  117   5               if((Mask & OSMemoryTable[i])==0)  //如果該位為0,表示該塊空閑
  118   5                {
  119   6                 BlankCount++;   //空塊計數器加1。
  120   6                }
  121   5               else
  122   5                {
  123   6                 BlankCount=0;  //如果遇到非空塊,則空塊計數器置0。
  124   6                }
ARM COMPILER V2.00d,  ARM_00_OS_Core                                                       22/12/07  19:56:45  PAGE 3   

  125   5               if((BlankCount*OSSizePerBlock)>=Length)  //如果空閑的RAM,大于或者等于需要的長度,那么分配成功
  126   5                {
  127   6                 //計算被分配到的內存的起始地址,并將其保存在StartAddr中。
  128   6                 StartAddr=((uint32)OSMemoryPool)+(i*32+j+1)*OSSizePerBlock-OSSizePerBlock*BlankCount;
  129   6                 while(1)  //設置被使用的塊為1
  130   6                  {
  131   7                   OSMemoryTable[i] |=Mask;  //將已經被分配的標志為1
  132   7                   Mask>>=1;   //調整掩碼的值
  133   7                   if(j==0)   //如果已到最低位
  134   7                    {
  135   8                     Mask=0x80000000; //則掩碼調整為第31位為1
  136   8                     j=32;
  137   8                     i--;  //移到下一位
  138   8                    }
  139   7                   BlankCount--;  //空塊計數減1
  140   7                   j--;   //移到下一個字
  141   7                   if(BlankCount==0)  //如果空塊計數器減到0,則標志完畢
  142   7                    {
  143   8                     OSExitCritical();
  144   8                     return StartAddr;   //將啟始地址StartAddr返回
  145   8                    }
  146   7                  }
  147   6                }
  148   5               Mask<<=1;  //掩碼調整,移動到下一個塊
  149   5              }
  150   4            }
  151   3           OSExitCritical();
  152   3           return 0;  //如果沒有足夠大的內存塊可用,則返回0,分配失敗
  153   3          }
  154   2      
  155   2         case MEMORY_FREE:  //如果操作碼是釋放內存
  156   2          {
  157   3           if(Length==0)   //如果要釋放的內存長度為0 
  158   3            {
  159   4             OSExitCritical();  //退出臨界段
  160   4             return 1;    //返回1,釋放成功
  161   4            }
  162   3           i=(StartAddr-(uint32)OSMemoryPool)/(32*OSSizePerBlock);   //計算出指定地址內存在內存分配表中的位置
  163   3           j=(StartAddr-(uint32)OSMemoryPool-i*32*OSSizePerBlock)/OSSizePerBlock;
  164   3           Mask=1<<j;   //將掩碼調整到對應的值
  165   3           while(Length)  //直到全部被釋放為止
  166   3            {
  167   4             if((OSMemoryTable[i])&(Mask)==0)   //如果該內存并未被分配,則說明發生了錯誤,
  168   4              {
  169   5               OSExitCritical();  //推出臨界段
  170   5               return 0;      //返回0,表示釋放失敗
  171   5              }
  172   4             OSMemoryTable[i] &=~Mask;  //清除對應的位,即釋放該塊內存
  173   4             j++;      //調整到下一塊
  174   4             Mask<<=1;   //掩碼調整到下一塊的位置
  175   4             if(j==32)  //如果已經到最高位
  176   4              {
  177   5               Mask=1;  //掩碼設置為1
  178   5               j=0;    //j回到最低位
  179   5               i++;    //調整下一個字
  180   5              }
  181   4             if(Length<=OSSizePerBlock)  //如果釋放完畢
  182   4              {
  183   5               Length=0;  //則Length設置為0,退出循環
  184   5              }
  185   4             else  //如果沒釋放完畢
  186   4              {
  187   5               Length-=OSSizePerBlock;  //則長度減小一個塊的量
  188   5              }
  189   4            }
  190   3           OSExitCritical();  //退出臨界段
ARM COMPILER V2.00d,  ARM_00_OS_Core                                                       22/12/07  19:56:45  PAGE 4   

  191   3           return 1;  //返回1,表示釋放成功
  192   3          }
  193   2      
  194   2         case MEMORY_STATISTIC:  //如果操作碼是統計內存使用量
  195   2          {
  196   3           Length=0;  //清Length
  197   3           for(i=0;i<OSSizeOfMemoryPool/OSSizePerBlock/32;i++)   //掃描整張內存分配表
  198   3            {
  199   4             if(OSMemoryTable[i]==0)    //如果當前字是全0,則該字對應的內存都未被分配,
  200   4              {
  201   5               continue;   //則跳過本次循環
  202   5              }
  203   4             if(OSMemoryTable[i]==0xFFFFFFFF)   //如果當前字是全1,則該字對應的內存全部被分配
  204   4              {
  205   5               Length+=32*OSSizePerBlock;   //Length累加上32塊的長度
  206   5               continue;  //退出本次循環
  207   5              }
  208   4             Mask=1;   //掩碼設置為1
  209   4             for(j=0;j<32;j++)  //掃描當前字的32bit,看是否有內存被使用
  210   4              {
  211   5               if(OSMemoryTable[i]&Mask)  //如果該塊被使用
  212   5                {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品制服美女久久| 专区另类欧美日韩| 久久国产夜色精品鲁鲁99| 欧美日韩国产高清一区| 亚洲一区二区黄色| 欧美日韩高清一区二区三区| 亚洲成人综合在线| 欧美一区二区播放| 国产91在线观看| 亚洲丝袜自拍清纯另类| 色94色欧美sute亚洲线路一ni| 一级中文字幕一区二区| 欧美乱妇20p| 看国产成人h片视频| 国产精品国产三级国产| 欧美亚洲动漫另类| 乱中年女人伦av一区二区| 国产三级久久久| 色哟哟一区二区三区| 日本va欧美va瓶| 国产日韩综合av| 欧美色区777第一页| 久草这里只有精品视频| 国产精品家庭影院| 欧美一卡二卡在线| 成人午夜在线播放| 日韩精品一二三区| 亚洲国产精品精华液2区45| 色www精品视频在线观看| 麻豆精品视频在线观看| 最新久久zyz资源站| 欧美一级理论片| bt7086福利一区国产| 日本在线不卡视频一二三区| 国产精品视频第一区| 欧美电影一区二区三区| 成人av中文字幕| 亚洲gay无套男同| 国产精品久久久久久久久快鸭| 欧美日韩高清在线播放| 成人精品电影在线观看| 免费观看一级特黄欧美大片| 亚洲男人都懂的| 久久人人97超碰com| 欧美日韩国产精品成人| 99在线热播精品免费| 精品一区二区三区免费毛片爱| 亚洲色图.com| 国产欧美一区二区在线观看| 欧美日韩国产另类不卡| 一本色道**综合亚洲精品蜜桃冫| 国产一区二区三区精品视频| 性久久久久久久久久久久| 亚洲天堂2014| 中文字幕中文字幕一区| 久久欧美中文字幕| 欧美一级欧美一级在线播放| 欧美伊人久久大香线蕉综合69| 丁香婷婷综合色啪| 国内欧美视频一区二区| 日本aⅴ免费视频一区二区三区| 亚洲精品视频在线观看网站| 国产欧美精品区一区二区三区| 日韩一区二区免费视频| 在线91免费看| 欧美精品久久99| 欧美久久久久中文字幕| 欧美影院一区二区三区| 一本大道久久精品懂色aⅴ| www.亚洲精品| 99久久精品国产精品久久| 成人一级片在线观看| 国产精品18久久久久| 国精产品一区一区三区mba视频| 视频一区二区国产| 午夜伦欧美伦电影理论片| 亚洲成人在线网站| 亚洲国产一区在线观看| 亚洲国产精品久久久久秋霞影院| 亚洲五码中文字幕| 亚洲成a人v欧美综合天堂下载 | 国产一区美女在线| 捆绑变态av一区二区三区| 久久成人久久鬼色| 国产一区 二区| 国产激情一区二区三区四区| 国产麻豆91精品| www.综合网.com| 欧美三级一区二区| 在线观看91精品国产麻豆| 欧美电影精品一区二区| 欧美电影免费观看高清完整版在线 | 精品久久99ma| 久久久久国产精品麻豆| 国产欧美一区二区精品忘忧草 | 久久久久久久网| 国产精品久久久久久亚洲毛片| 亚洲国产精品成人综合| 中文字幕亚洲一区二区av在线| 一区二区三区中文在线观看| 天天射综合影视| 九九**精品视频免费播放| 国产成人精品aa毛片| 在线观看不卡一区| 欧美xxxxxxxxx| 中文字幕一区二区日韩精品绯色| 亚洲一区二区免费视频| 久久电影国产免费久久电影 | 色呦呦日韩精品| 欧美一区二区三区四区久久 | 成人欧美一区二区三区在线播放| 亚洲精品乱码久久久久久久久| 日韩高清在线电影| 成人av免费网站| 欧美日韩国产高清一区| 欧美极品少妇xxxxⅹ高跟鞋 | 日韩毛片视频在线看| 日韩av在线播放中文字幕| 国产99精品国产| 91精品在线一区二区| 中文字幕不卡的av| 偷拍一区二区三区四区| 国产成人午夜精品影院观看视频| 欧美性受xxxx黑人xyx性爽| 欧美精品一区二区三区一线天视频 | 午夜在线成人av| 国产99久久久久| 欧美一级欧美一级在线播放| 日韩久久一区二区| 精品无人码麻豆乱码1区2区| 色成人在线视频| 亚洲国产精品精华液2区45| 日韩高清在线一区| 在线精品视频免费观看| 国产亚洲精品中文字幕| 青青草视频一区| 欧美xxxxxxxx| 亚洲精品视频在线| 国产一区二区导航在线播放| 8v天堂国产在线一区二区| 亚洲老司机在线| 岛国精品一区二区| 精品国产乱码久久| 午夜精品福利一区二区三区av| 99久久精品国产一区二区三区| 欧美精品一区二区三| 秋霞影院一区二区| 欧美性色黄大片| 自拍av一区二区三区| 成人深夜福利app| 精品国产1区2区3区| 日韩精品每日更新| 91国产免费看| 亚洲精品日产精品乱码不卡| 成人一区二区在线观看| 久久久久久免费毛片精品| 精品在线免费视频| 欧美成人精精品一区二区频| 亚洲高清视频在线| 91成人国产精品| 一区二区三区成人| 91激情在线视频| 伊人色综合久久天天人手人婷| 91丨九色丨黑人外教| 国产精品另类一区| 波多野结衣欧美| 国产精品情趣视频| 不卡一卡二卡三乱码免费网站| 久久精品亚洲麻豆av一区二区| 精品一区二区三区日韩| 久久综合久久综合久久| 国产在线视频一区二区| 欧美电视剧在线观看完整版| 看电视剧不卡顿的网站| 亚洲精品一区二区三区香蕉| 国产自产v一区二区三区c| 久久嫩草精品久久久精品一| 国产一区久久久| 中文av一区特黄| 91网上在线视频| 亚洲狠狠爱一区二区三区| 欧美揉bbbbb揉bbbbb| 免费在线欧美视频| 亚洲精品一区二区三区精华液 | 中文字幕乱码日本亚洲一区二区| 菠萝蜜视频在线观看一区| 亚洲乱码日产精品bd| 欧美精品粉嫩高潮一区二区| 久久99精品国产.久久久久| 国产香蕉久久精品综合网| 91麻豆国产自产在线观看| 亚洲aaa精品| 久久久久久久久久久久久夜| 99re亚洲国产精品| 亚洲1区2区3区视频| 久久综合一区二区| 色婷婷久久久亚洲一区二区三区| 午夜久久福利影院| 国产亚洲人成网站| 日本高清免费不卡视频|