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

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

?? arm_00_os_core.lst

?? 是實時操作系統uc/os的原代碼,寫了頭文件
?? LST
?? 第 1 頁 / 共 2 頁
字號:
ARM COMPILER V2.50a,  ARM_00_OS_Core                                                       28/08/06  09:18:53  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 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            最后修改時間:2006-08-25
   10            版本:V1.0
   11            版權所有,盜版必究。
   12            任何技術問題可到我的博客上留言:    http://computer00.21ic.org
   13            Copyright(C) Computer-lov 2006-2016
   14            All rights reserved
   15          **********************************************************************************************/
   16          
   17          #include "CPU.H"
   18          
   19          #include "interrupt.h"
   20          #include "LED.H"
   21          #include "ARM_00_OS_TaskSwitch.H"
   22          #include "my_type.h"
   23          #include "ARM_00_OS_Core.H"
   24          #include "UART.H"
   25          #include "KEYS.H"
   26          #include "Task.h"
   27          
   28          OSpcb * OSReadyList;    //就緒態任務表表頭
   29          OSpcb * OSSuspendList;  //掛起態任務表表頭
   30          OSpcb * OSDelayList;    //延時態任務表表頭
   31          OSpcb * OSCurrentPcb;   //當前運行的任務
   32          
   33          
   34          OSpcb OSSystemIdlePcb;  //系統空閑任務
   35          OSShortPcb OSSuspendListBottom;    //掛起態列表表底
   36          OSShortPcb OSDelayListBottom;      //延時態列表表底 
   37          
   38          
   39          OSdevice OSDeviceBottom;       //設備列表的底部
   40          OSdevice * OSDeviceList;       //設備列表
   41          
   42          volatile uint32 CopyOfVICIntEnable;    //用來備份CopyOfVICIntEnable的狀態
   43          
   44          //volatile uint32 CopyOfIRQEN;    //用來備份IRQEN的狀態
   45          //volatile uint32 CopyOfFIQEN;    //用來備份FIQEN的狀態
   46          
   47          
   48          volatile uint32 OSEnCrCount;    //用來統計進入臨界代碼段次數
   49          
   50          
   51          volatile uint32 TaskAmount;    //用來統計共有多少個任務
   52          
   53          
   54          volatile uint32 TimeOfTaskStart;  //用來保存一個任務剛被切換到運行態的時刻
   55          
   56          #define OSMemoryLack       0x0000000100000000  /*錯誤號:內存資源不足*/
   57          
   58          /**********************************************************************************************
   59          功能:內存管理。
ARM COMPILER V2.50a,  ARM_00_OS_Core                                                       28/08/06  09:18:53  PAGE 2   

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

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

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕永久在线不卡| 精品国产制服丝袜高跟| 国产精品中文字幕欧美| 免费观看在线色综合| 亚洲福中文字幕伊人影院| 一区二区久久久久久| 亚洲视频资源在线| 亚洲欧美激情在线| 亚洲综合精品自拍| 亚洲一区二区三区激情| 舔着乳尖日韩一区| 蜜臀久久久99精品久久久久久| 日韩高清在线观看| 经典三级一区二区| 国产成a人亚洲精品| 97久久超碰国产精品| 色婷婷狠狠综合| 欧美精品久久99| 欧美成人r级一区二区三区| 精品日韩av一区二区| 欧美高清在线一区| 亚洲欧洲精品天堂一级| 亚洲综合丝袜美腿| 麻豆成人久久精品二区三区小说| 国产呦萝稀缺另类资源| 91麻豆国产福利在线观看| 欧美性猛交xxxxxx富婆| 精品美女一区二区| 最好看的中文字幕久久| 婷婷综合在线观看| 国产999精品久久| 在线观看av一区二区| 日韩欧美色综合| 国产精品无遮挡| 日本在线不卡一区| fc2成人免费人成在线观看播放| 欧美日韩美少妇| 久久久精品欧美丰满| 亚洲伦理在线免费看| 美女视频网站黄色亚洲| 91麻豆精品一区二区三区| 日韩一区二区电影| 亚洲最新在线观看| 国产一区二区电影| 在线成人免费观看| 综合激情成人伊人| 国产剧情一区二区三区| 欧美日韩不卡在线| 中文字幕五月欧美| 国产一区亚洲一区| 在线播放中文字幕一区| 综合色天天鬼久久鬼色| 韩国成人在线视频| 欧美精品123区| 亚洲免费毛片网站| 成人精品视频一区| 337p日本欧洲亚洲大胆色噜噜| 一区二区在线电影| 成人99免费视频| 国产亚洲精久久久久久| 开心九九激情九九欧美日韩精美视频电影 | 精品婷婷伊人一区三区三| 欧美国产1区2区| 国产在线精品一区二区不卡了| 欧美日韩精品系列| 一区二区三区视频在线观看| 成人a区在线观看| 欧美国产欧美综合| 国产二区国产一区在线观看| 欧美mv和日韩mv国产网站| 五月婷婷激情综合网| 欧美丝袜丝交足nylons图片| 亚洲激情在线播放| 欧美综合在线视频| 一片黄亚洲嫩模| 欧美日韩一区二区三区在线看| 中文字幕一区三区| 亚洲综合色视频| 欧美性猛交xxxx乱大交退制版 | 一本色道久久综合精品竹菊| 中文字幕不卡在线播放| 国产精品1区2区3区在线观看| 26uuuu精品一区二区| 国产最新精品免费| 久久综合九色综合97婷婷女人| 久久99精品国产麻豆婷婷| 2020国产精品久久精品美国| 国内久久精品视频| 中文字幕av不卡| 91浏览器在线视频| 亚洲.国产.中文慕字在线| 欧美一区二区视频在线观看2022| 蜜桃av一区二区| 久久久久久久久久久久久夜| 成人免费视频视频在线观看免费 | 欧美在线视频日韩| 无码av免费一区二区三区试看| 欧美精品一级二级三级| 精品在线一区二区| 国产精品盗摄一区二区三区| 欧美性生交片4| 美国毛片一区二区| 日本一区二区免费在线| 色综合久久中文字幕| 日韩精品电影一区亚洲| 久久亚洲一区二区三区明星换脸| 不卡的电影网站| 日韩电影网1区2区| 久久精品亚洲麻豆av一区二区| 91小视频免费观看| 美女视频免费一区| 91精品国产91久久久久久一区二区| 国产一区二区三区观看| 亚洲一区在线观看免费| 精品国产sm最大网站| 欧美专区亚洲专区| 国产成人a级片| 午夜影院久久久| 国产精品久久久久久妇女6080| 欧美日韩午夜精品| 9人人澡人人爽人人精品| 日韩电影在线观看网站| 亚洲精品伦理在线| 久久伊99综合婷婷久久伊| 欧美天天综合网| 成人午夜在线播放| 麻豆久久久久久久| 亚洲在线观看免费视频| 国产午夜精品一区二区三区视频 | 美女脱光内衣内裤视频久久影院| 最好看的中文字幕久久| 久久久www成人免费无遮挡大片| 欧美色窝79yyyycom| 91伊人久久大香线蕉| 国产主播一区二区| 麻豆久久久久久| 日韩高清欧美激情| 亚洲国产一区视频| 亚洲欧美日韩久久| 国产精品全国免费观看高清 | 国产精品久久久久毛片软件| 精品国产污污免费网站入口 | 国产乱码字幕精品高清av| 日本视频在线一区| 五月激情丁香一区二区三区| 一区二区三区日韩精品视频| 中文字幕一区二区三区蜜月 | 亚洲综合丝袜美腿| 亚洲欧美国产高清| 亚洲毛片av在线| 一区二区三区中文字幕在线观看| 中文字幕一区二区三区在线观看| 国产亚洲精品中文字幕| 久久久蜜臀国产一区二区| 精品对白一区国产伦| 精品99一区二区| 久久亚洲精品国产精品紫薇| 久久色.com| 国产拍欧美日韩视频二区| 国产视频一区二区在线| 欧美激情一区二区三区四区| 国产精品日韩精品欧美在线| 成人免费一区二区三区在线观看 | 亚洲专区一二三| 婷婷六月综合亚洲| 日本不卡视频在线| 另类小说色综合网站| 国产成人在线电影| 92精品国产成人观看免费| 色就色 综合激情| 欧美一区二区三区在线观看| 26uuu精品一区二区三区四区在线| 国产亚洲一区字幕| 亚洲免费观看高清在线观看| 污片在线观看一区二区| 久久99国产精品尤物| 成人综合婷婷国产精品久久免费| 成人黄色777网| 在线电影国产精品| 国产日韩欧美精品电影三级在线| 亚洲三级在线看| 日韩成人一区二区三区在线观看| 久久91精品国产91久久小草| 成人性生交大片免费看在线播放| 在线精品视频免费播放| 久久综合色一综合色88| 亚洲另类中文字| 国产在线不卡一卡二卡三卡四卡| 99re热这里只有精品免费视频 | 麻豆专区一区二区三区四区五区| 国产黄色成人av| 欧美日韩综合色| 国产午夜精品美女毛片视频| 亚洲午夜羞羞片| 国产成人av自拍| 欧美一卡二卡三卡四卡| 亚洲日本中文字幕区| 激情六月婷婷久久| 91成人网在线| 中文av一区特黄|