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

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

?? arm_00_os_core.lst

?? 一個基于arm的
?? LST
?? 第 1 頁 / 共 2 頁
字號:
ARM COMPILER V2.50a,  ARM_00_OS_Core                                                       16/05/06  14:55:44  PAGE 1   


ARM COMPILER V2.50a, 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 WARNINGLEVEL(3) BROWSE DEBUG TABS(4) 

stmt  level    source

    1          /**********************************************************************************************
    2          本程序只供學習使用,不得用于其它任何用途,否則后果自負。
    3          
    4            ARM_00_OS_Core.c file
    5             
    6            作者:Computer-lov
    7            建立日期:2006-5-1
    8            修改日期:2006-5-15
    9            版本:V1.0
   10            版權所有,盜版必究。
   11            任何技術問題可到我的博客上留言:    http://computer00.21ic.org
   12            Copyright(C) Computer-lov 2006-2016
   13            All rights reserved
   14          **********************************************************************************************/
   15          
   16          #include <ADuC7027.H>
   17          
   18          #include "interrupt.h"
   19          #include "LED.H"
   20          #include "ARM_00_OS_TaskSwitch.H"
   21          #include "my_type.h"
   22          #include "ARM_00_OS_Core.H"
   23          #include "UART.H"
   24          #include "KEYS.H"
   25          #include "Task.h"
   26          
   27          OSpcb * OSReadyList;    //就緒態(tài)任務表表頭
   28          OSpcb * OSSuspendList;  //掛起態(tài)任務表表頭
   29          OSpcb * OSDelayList;    //延時態(tài)任務表表頭
   30          OSpcb * OSCurrentPcb;   //當前運行的任務
   31          
   32          
   33          OSpcb OSSystemIdlePcb;  //系統(tǒng)空閑任務
   34          OSShortPcb OSSuspendListBottom;    //掛起態(tài)列表表底
   35          OSShortPcb OSDelayListBottom;      //延時態(tài)列表表底 
   36          
   37          
   38          OSdevice OSDeviceBottom;       //設備列表的底部
   39          OSdevice * OSDeviceList;       //設備列表
   40          
   41          
   42          volatile uint32 CopyOfIRQEN;    //用來備份IRQEN的狀態(tài)
   43          volatile uint32 CopyOfFIQEN;    //用來備份FIQEN的狀態(tài)
   44          volatile uint32 OSEnCrCount;    //用來統(tǒng)計進入臨界代碼段次數(shù)
   45          
   46          
   47          volatile uint32 TaskAmount;    //用來統(tǒng)計共有多少個任務
   48          
   49          
   50          volatile uint32 TimeOfTaskStart;  //用來保存一個任務剛被切換到運行態(tài)的時刻
   51          
   52          #define OSMemoryLack       0x0000000100000000  /*錯誤號:內(nèi)存資源不足*/
   53          
   54          /**********************************************************************************************
   55          功能:內(nèi)存管理。
   56          入口參數(shù)1:Operation。操作方式。可以設置為MEMORY_ALLOCATION(分配)、MEMORY_FREE(釋放)、統(tǒng)計使用量(MEM
             -ORY_STATISTIC)
   57          入口參數(shù)2:StartAddr。起始地址,釋放內(nèi)存時使用。
   58          入口參數(shù)3:Length。申請內(nèi)存或釋放內(nèi)存時的長度,單位為字節(jié)。但實際分配時,是按塊分配的,所以分配時,
ARM COMPILER V2.50a,  ARM_00_OS_Core                                                       16/05/06  14:55:44  PAGE 2   

   59                     實際分配到的數(shù)量可能會比指定的多,所以分配時,最好按塊的整數(shù)倍大小來指定分配長度。
   60                     
   61          返回:32無符號型整數(shù)。
   62                當操作為分配內(nèi)存時,返回32位的內(nèi)存首地址,返回0表示無足夠多的可以用內(nèi)存。
   63                當操作為釋放內(nèi)存時,返回1表示釋放成功。返回0表示釋放出錯。
   64                當操作為統(tǒng)計內(nèi)存使用量時,返回的是內(nèi)存被使用的字節(jié)數(shù)。
   65                當操作為獲取緩沖池大小時,返回的是內(nèi)存緩沖池大小。
   66          
   67          備注:緩沖池大小由OSSizeOfMemoryPool指定。每塊的大小由OSSizePerBlock指定             
   68          **********************************************************************************************/
   69          uint32 OSMemoryManage(uint32 Operation,uint32 StartAddr,uint32 Length)
   70          {
   71   1        //內(nèi)存分配表
   72   1        //內(nèi)存分配表是32位整數(shù)的一維數(shù)組。用每一位來表示一塊是否被使用。當某位設置為1時,表示那一塊被使用。
   73   1        //當某位為0時,表示那一塊可用。
   74   1       static uint32  OSMemoryTable[OSSizeOfMemoryPool/OSSizePerBlock/32];
   75   1                                                                            
   76   1       static uint32 OSMemoryPool[OSSizeOfMemoryPool/4]; //內(nèi)存緩沖池。內(nèi)存緩沖池為一個大是數(shù)組
   77   1       
   78   1       uint32 BlankCount;    //統(tǒng)計空塊的計數(shù)器
   79   1       uint32 Mask;          //分配內(nèi)存時用的掩碼
   80   1       volatile uint32 i,j;  //循環(huán)用的變量
   81   1      
   82   1       OSEnterCritical();   //進入臨界段
   83   1       
   84   1       switch(Operation)     //根據(jù)操作碼,選擇不同的操作
   85   1        {
   86   2         case MEMORY_INIT:   //如果是內(nèi)存初始化
   87   2          {
   88   3           for(i=0;i<OSSizeOfMemoryPool/OSSizePerBlock/32;i++)
   89   3            {
   90   4             OSMemoryTable[i]=0;  //則將整張內(nèi)存分配表清0
   91   4            }
   92   3           OSExitCritical();  //退出臨界段
   93   3           return 1;   //返回1
   94   3          }
   95   2      
   96   2         case MEMORY_ALLOCATION:  //如果是內(nèi)存分配,則
   97   2          {
   98   3           BlankCount=0;   //先將內(nèi)存空塊的數(shù)量清0
   99   3           for(i=0;i<(OSSizeOfMemoryPool/OSSizePerBlock/32);i++)  //掃描整個內(nèi)存分配表
  100   3            {
  101   4             Mask=1;   //掩碼被設置為1,即最低位為1,其它位為0。
  102   4             if(OSMemoryTable[i]==0xFFFFFFFF)  //如果該字中的所以位都為1,表示該字節(jié)對應的所有塊都被占用
  103   4              {
  104   5               BlankCount=0;  //空塊計數(shù)器置0
  105   5               continue;      //退出本次循環(huán),查找下一個字
  106   5              }
  107   4             for(j=0;j<32;j++)  //掃描一個字的32個bit是否有空閑的RAM
  108   4              {
  109   5               if((Mask & OSMemoryTable[i])==0)  //如果該位為0,表示該塊空閑
  110   5                {
  111   6                 BlankCount++;   //空塊計數(shù)器加1。
  112   6                }
  113   5               else
  114   5                {
  115   6                 BlankCount=0;  //如果遇到非空塊,則空塊計數(shù)器置0。
  116   6                }
  117   5               if((BlankCount*OSSizePerBlock)>=Length)  //如果空閑的RAM,大于或者等于需要的長度,那么分配成功
  118   5                {
  119   6                 //計算被分配到的內(nèi)存的起始地址,并將其保存在StartAddr中。
  120   6                 StartAddr=((uint32)OSMemoryPool)+(i*32+j+1)*OSSizePerBlock-OSSizePerBlock*BlankCount;
  121   6                 while(1)  //設置被使用的塊為1
  122   6                  {
  123   7                   OSMemoryTable[i] |=Mask;  //將已經(jīng)被分配的標志為1
  124   7                   Mask>>=1;   //調(diào)整掩碼的值
ARM COMPILER V2.50a,  ARM_00_OS_Core                                                       16/05/06  14:55:44  PAGE 3   

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

  191   4             if(OSMemoryTable[i]==0)    //如果當前字是全0,則該字對應的內(nèi)存都未被分配,
  192   4              {
  193   5               continue;   //則跳過本次循環(huán)
  194   5              }
  195   4             if(OSMemoryTable[i]==0xFFFFFFFF)   //如果當前字是全1,則該字對應的內(nèi)存全部被分配
  196   4              {
  197   5               Length+=32*OSSizePerBlock;   //Length累加上32塊的長度
  198   5               continue;  //退出本次循環(huán)
  199   5              }
  200   4             Mask=1;   //掩碼設置為1
  201   4             for(j=0;j<32;j++)  //掃描當前字的32bit,看是否有內(nèi)存被使用
  202   4              {
  203   5               if(OSMemoryTable[i]&Mask)  //如果該塊被使用
  204   5                {
  205   6                 Length+=OSSizePerBlock;  //則Length累加一塊的長度
  206   6                }
  207   5               Mask<<=1;  //調(diào)整掩碼到下一位
  208   5              }
  209   4            }
  210   3           OSExitCritical();  //退出臨界段

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲最大成人综合| 99精品欧美一区二区蜜桃免费 | 日韩免费视频一区| 国产精品久久久久久久第一福利| 日韩精品乱码免费| 99久久精品国产精品久久| 欧美大白屁股肥臀xxxxxx| 一区二区三区91| 成人的网站免费观看| 久久免费精品国产久精品久久久久| 亚洲国产一区二区a毛片| 99久久综合狠狠综合久久| 久久久亚洲精华液精华液精华液| 青娱乐精品视频在线| 欧美午夜宅男影院| 亚洲精品成人精品456| a美女胸又www黄视频久久| 国产人妖乱国产精品人妖| 久久99精品一区二区三区| 日韩亚洲欧美综合| 欧美a一区二区| 欧美一区二区三区性视频| 午夜电影网一区| 欧美日韩一区不卡| 天堂av在线一区| 欧美日韩国产bt| 亚洲成a人片在线不卡一二三区| 91在线精品秘密一区二区| 国产精品色在线观看| 99免费精品视频| 亚洲欧美日韩在线| 欧美在线制服丝袜| 偷拍一区二区三区| 精品免费视频.| 国产99久久久国产精品潘金 | 自拍偷拍亚洲欧美日韩| 成人永久aaa| 亚洲精品美国一| 欧美性猛交xxxx乱大交退制版| 亚洲国产欧美在线人成| 欧美日韩国产免费| 精品午夜久久福利影院| 日本一区二区免费在线| av动漫一区二区| 亚洲一区二区欧美激情| 91精品福利在线一区二区三区| 日本色综合中文字幕| 精品国产亚洲一区二区三区在线观看| 狠狠色丁香婷婷综合久久片| 国产精品入口麻豆原神| 欧美性大战久久| 蜜桃在线一区二区三区| 欧美韩国日本综合| 欧美无砖砖区免费| 久国产精品韩国三级视频| 国产日产欧产精品推荐色| 色先锋aa成人| 久久99久久久久| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 在线观看91视频| 精品一区二区国语对白| 亚洲图片你懂的| 日韩一级黄色片| 91天堂素人约啪| 久久精品国产99| 一区二区三区在线观看欧美 | 69堂国产成人免费视频| 国产精品一级片在线观看| 夜夜爽夜夜爽精品视频| 精品乱人伦小说| 色综合天天视频在线观看| 久久99精品久久久| 一区二区三区中文字幕电影| 欧美tk—视频vk| 欧美日韩综合不卡| 成人av网站免费观看| 蜜臀99久久精品久久久久久软件| 日韩理论在线观看| 久久久99久久精品欧美| 欧美疯狂性受xxxxx喷水图片| 成人丝袜18视频在线观看| 日本美女一区二区| 亚洲在线免费播放| 亚洲欧美综合色| 久久免费美女视频| 日韩视频免费观看高清完整版| 一本色道久久综合亚洲91| 国产精品一区免费视频| 日韩1区2区日韩1区2区| 亚洲自拍与偷拍| 国产精品久久久久久久第一福利 | 韩国精品一区二区| 午夜一区二区三区视频| 亚洲激情成人在线| 中文字幕一区二区三区在线不卡| 久久尤物电影视频在线观看| 91精品国产色综合久久不卡电影 | 97久久超碰精品国产| 国产白丝精品91爽爽久久| 国内精品写真在线观看| 午夜在线成人av| 亚洲一区二区三区四区在线 | 欧美卡1卡2卡| 色综合色狠狠综合色| 99r国产精品| av在线不卡电影| 99久久精品情趣| av亚洲精华国产精华精华| 成人app网站| aa级大片欧美| 成人av午夜影院| 不卡视频一二三四| 91老师国产黑色丝袜在线| 97久久人人超碰| 在线欧美一区二区| 欧美日韩的一区二区| 欧美丰满少妇xxxxx高潮对白| 欧美日韩一级大片网址| 6080yy午夜一二三区久久| 91精品国产综合久久国产大片| 欧美高清视频一二三区| 日韩欧美一区二区三区在线| 日韩免费观看高清完整版在线观看| 91精品国产综合久久福利| 精品卡一卡二卡三卡四在线| 日韩精品一区二区三区在线观看| 久久综合九色综合97婷婷| 欧美激情中文字幕一区二区| 国产精品第四页| 午夜精品一区在线观看| 免费成人av在线| 国产激情一区二区三区四区 | 久久一二三国产| 国产精品久久久久影院老司| 亚洲激情五月婷婷| 美国十次了思思久久精品导航| 国产乱淫av一区二区三区 | 国产成人精品影院| 91浏览器在线视频| 在线播放欧美女士性生活| 久久久久99精品一区| 亚洲免费av高清| 激情综合色播激情啊| 99国产欧美另类久久久精品| 欧美另类一区二区三区| 国产肉丝袜一区二区| 亚洲成人黄色影院| 国产成人综合亚洲网站| 欧美日韩在线播| 久久久久久久久久久黄色| 亚洲一区影音先锋| 国产高清亚洲一区| 欧美日韩成人在线| 国产精品成人一区二区艾草 | 一区二区三区国产精品| 韩日av一区二区| 在线免费不卡电影| 久久久精品一品道一区| 亚洲成a人v欧美综合天堂| 国产.欧美.日韩| 日韩欧美国产综合一区| 有码一区二区三区| 风间由美一区二区av101| 91精品国产91综合久久蜜臀| 日韩一区欧美一区| 国产一区二区导航在线播放| 欧美日韩国产另类一区| 亚洲特黄一级片| 国产激情一区二区三区四区| 91麻豆精品国产综合久久久久久| 亚洲欧洲日韩综合一区二区| 韩国精品久久久| 日韩一级二级三级精品视频| 一区二区三区国产豹纹内裤在线| 高清在线成人网| 欧美tickling挠脚心丨vk| 香蕉久久一区二区不卡无毒影院| 91蝌蚪porny| 国产精品久线在线观看| 国产河南妇女毛片精品久久久| 日韩欧美一级特黄在线播放| 亚洲国产精品一区二区久久恐怖片 | 国产91丝袜在线播放九色| 日韩欧美一级二级三级久久久| 亚洲国产一区二区在线播放| 99国产精品一区| 国产精品成人午夜| 国产99久久久精品| 中文一区在线播放| 国产成人鲁色资源国产91色综| 日韩视频免费直播| 美女一区二区视频| 欧美另类高清zo欧美| 首页国产丝袜综合| 欧美一区二区三级| 久久爱另类一区二区小说| 精品动漫一区二区三区在线观看| 美日韩黄色大片| 国产三级精品三级在线专区| 国产精品亚洲午夜一区二区三区|