?? rd_adt_queue.lis
字號:
.module RD_ADT_QUEUE.c
.area text(rom, con, rel)
0000 .dbfile O:\2007全國電子設計大賽\鍵盤顯示模塊\RD_ADT_QUEUE.c
0000 .dbfunc e ADT_Queue_Add_To_Buffer _ADT_Queue_Add_To_Buffer fc
0000 .dbstruct 0 18 AbstructDataTypeQueue
0000 .dbfield 0 pBuffer pc
0000 .dbfield 2 nSize i
0000 .dbfield 4 nHead i
0000 .dbfield 6 nTail i
0000 .dbfield 8 nCount i
0000 .dbfield 10 fnAddToBuffer pfc
0000 .dbfield 12 fnGetFromBuffer pfc
0000 .dbfield 14 fnCheckEmpty pfc
0000 .dbfield 16 fnPeekFromBuffer pfc
0000 .dbend
0000 ; pBuffer -> R12,R13
0000 ; nCount0 -> R20,R21
0000 ; nHead0 -> R14,R15
0000 ; nTail0 -> R22,R23
0000 ; nSize0 -> R10,R11
0000 ; cData -> R18
0000 ; pQueue -> R16,R17
.even
0000 _ADT_Queue_Add_To_Buffer::
0000 0E940000 xcall push_xgsetF0FC
0004 .dbline -1
0004 .dbline 78
0004 ; /***********************************************************
0004 ; * 函數庫說明:抽象數據類型(ADT)隊列函數庫 *
0004 ; * 版本: v1.01 *
0004 ; * 作者: 王卓然 *
0004 ; * 創建日期: 2007年3月23日 *
0004 ; * -------------------------------------------------------- *
0004 ; * [支 持 庫] *
0004 ; * 支持庫名稱:RD_MacroAndConst.h *
0004 ; * 需要版本: v0.01 &abv *
0004 ; * 支持庫說明:系統常用宏定義庫 *
0004 ; * *
0004 ; * 支持庫名稱:RD_ADT_QUEUE.h *
0004 ; * 需要版本: ----- *
0004 ; * 支持庫說明:抽象數據類型(ADT)隊列聲明庫 *
0004 ; * -------------------------------------------------------- *
0004 ; * [版本更新] *
0004 ; * 修改: 王卓然 *
0004 ; * 修改日期: 2007年4月17日 *
0004 ; * 版本: v1.01 *
0004 ; * -------------------------------------------------------- *
0004 ; * [版本歷史] *
0004 ; * v1.00 該版本提供了基本的抽象數據類型隊列的結構定 *
0004 ; * 義,以及默認的環形隊列處理函數。 *
0004 ; * v1.01 增加了隊列空判斷函數,和隊列首數據預覽函數 *
0004 ; * -------------------------------------------------------- *
0004 ; * [使用說明] *
0004 ; ***********************************************************/
0004 ;
0004 ; /********************
0004 ; * 頭 文 件 配 置 區 *
0004 ; ********************/
0004 ; # include "RD_MacroAndConst.h"
0004 ; # include "RD_ADT_QUEUE.h"
0004 ;
0004 ; /********************
0004 ; * 系 統 宏 定 義 *
0004 ; ********************/
0004 ;
0004 ; /*------------------*
0004 ; * 常 數 宏 定 義 *
0004 ; *------------------*/
0004 ;
0004 ; /*------------------*
0004 ; * 動 作 宏 定 義 *
0004 ; *------------------*/
0004 ;
0004 ; /********************
0004 ; * 結構體定義區 *
0004 ; ********************/
0004 ;
0004 ; /********************
0004 ; * 模塊函數聲明區 *
0004 ; ********************/
0004 ;
0004 ; /********************
0004 ; * 全局函數聲明區 *
0004 ; ********************/
0004 ; BOOL ADT_Queue_Add_To_Buffer(ADT_QUEUE *pQueue,uint8 cData);
0004 ; BOOL ADT_Queue_Get_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData);
0004 ; BOOL ADT_Queue_Check_Empty(ADT_QUEUE *pQueue);
0004 ; BOOL ADT_Queue_Peek_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData);
0004 ;
0004 ; /********************
0004 ; * 模塊變量聲明區 *
0004 ; ********************/
0004 ;
0004 ; /********************
0004 ; * 全局變量聲明區 *
0004 ; ********************/
0004 ;
0004 ; /***********************************************************
0004 ; * 函數說明:抽象數據類型隊列,系統默認隊列緩沖添加函數 *
0004 ; * 輸入: 要添加到緩沖區的數據 *
0004 ; * 輸出: 添加是否成功 *
0004 ; * 調用函數:無 *
0004 ; ***********************************************************/
0004 ; BOOL ADT_Queue_Add_To_Buffer(ADT_QUEUE *pQueue,uint8 cData)
0004 ; {
0004 .dbline 85
0004 ; uint8 *pBuffer;
0004 ; uint nSize;
0004 ; uint nTail;
0004 ; uint nHead;
0004 ; uint nCount;
0004 ;
0004 ; SAFE_CODE_PERFORMANCE //原子操作
0004 F894 cli
0006 .dbline 85
0006 F801 movw R30,R16
0008 C080 ldd R12,z+0
000A D180 ldd R13,z+1
000C .dbline 85
000C A280 ldd R10,z+2
000E B380 ldd R11,z+3
0010 .dbline 85
0010 CC20 tst R12
0012 11F4 brne X0
0014 DD20 tst R13
0016 21F0 breq L4
0018 X0:
0018 AA20 tst R10
001A 29F4 brne L2
001C BB20 tst R11
001E 19F4 brne L2
0020 X1:
0020 L4:
0020 .dbline 85
0020 .dbline 85
0020 7894 sei
0022 .dbline 85
0022 0027 clr R16
0024 24C0 xjmp L1
0026 L2:
0026 .dbline 85
0026 F801 movw R30,R16
0028 6681 ldd R22,z+6
002A 7781 ldd R23,z+7
002C .dbline 85
002C E480 ldd R14,z+4
002E F580 ldd R15,z+5
0030 .dbline 85
0030 4085 ldd R20,z+8
0032 5185 ldd R21,z+9
0034 .dbline 85
0034 6E15 cp R22,R14
0036 7F05 cpc R23,R15
0038 31F4 brne L5
003A X2:
003A 4A15 cp R20,R10
003C 5B05 cpc R21,R11
003E 19F4 brne L5
0040 X3:
0040 .dbline 85
0040 .dbline 85
0040 7894 sei
0042 .dbline 85
0042 0027 clr R16
0044 14C0 xjmp L1
0046 L5:
0046 .dbline 85
0046 FB01 movw R30,R22
0048 EC0D add R30,R12
004A FD1D adc R31,R13
004C 2083 std z+0,R18
004E .dbline 85
004E 6F5F subi R22,255 ; offset = 1
0050 7F4F sbci R23,255
0052 .dbline 85
0052 4F5F subi R20,255 ; offset = 1
0054 5F4F sbci R21,255
0056 .dbline 85
0056 6A15 cp R22,R10
0058 7B05 cpc R23,R11
005A 11F4 brne L7
005C X4:
005C .dbline 85
005C .dbline 85
005C 6627 clr R22
005E 7727 clr R23
0060 .dbline 85
0060 L7:
0060 .dbline 85
0060 F801 movw R30,R16
0062 7783 std z+7,R23
0064 6683 std z+6,R22
0066 .dbline 85
0066 5187 std z+9,R21
0068 4087 std z+8,R20
006A .dbline 85
006A .dbline 85
006A 7894 sei
006C .dbline 118
006C ; (
006C ; pBuffer = pQueue->pBuffer;
006C ; nSize = pQueue->nSize;
006C ;
006C ; if ((pBuffer == NULL) || (!nSize))
006C ; {
006C ; SEI();
006C ; return FALSE; //緩沖區未分配空間
006C ; }
006C ; nTail = pQueue->nTail;
006C ; nHead = pQueue->nHead;
006C ; nCount = pQueue->nCount;
006C ;
006C ;
006C ; if ((nTail == nHead) && (nCount == nSize)) //緩沖區已滿
006C ; {
006C ; SEI();
006C ; return FALSE;
006C ; }
006C ;
006C ; pBuffer[nTail] = cData;
006C ; nTail++;
006C ; nCount++;
006C ; if (nTail == nSize)
006C ; {
006C ; nTail = 0;
006C ; }
006C ;
006C ; pQueue->nTail = nTail;
006C ; pQueue->nCount = nCount;
006C ; )
006C ;
006C ; return TRUE;
006C 01E0 ldi R16,1
006E .dbline -2
006E L1:
006E .dbline 0 ; func end
006E 0C940000 xjmp pop_xgsetF0FC
0072 .dbsym r pBuffer 12 pc
0072 .dbsym r nCount0 20 i
0072 .dbsym r nHead0 14 i
0072 .dbsym r nTail0 22 i
0072 .dbsym r nSize0 10 i
0072 .dbsym r cData 18 c
0072 .dbsym r pQueue 16 pS[AbstructDataTypeQueue]
0072 .dbend
0072 .dbfunc e ADT_Queue_Get_From_Buffer _ADT_Queue_Get_From_Buffer fc
0072 ; pBuffer -> R12,R13
0072 ; nHead1 -> R22,R23
0072 ; nCount0 -> R20,R21
0072 ; nHead0 -> R14,R15
0072 ; nTail0 -> R22,R23
0072 ; nSize0 -> R10,R11
0072 ; pData -> R18,R19
0072 ; pQueue -> R16,R17
.even
0072 _ADT_Queue_Get_From_Buffer::
0072 0E940000 xcall push_xgsetF0FC
0076 .dbline -1
0076 .dbline 128
0076 ; }
0076 ;
0076 ; /***********************************************************
0076 ; * 函數說明:抽象數據類型隊列,系統默認隊列緩沖區讀取函數 *
0076 ; * 輸入: 存放讀取變量的空間指針 *
0076 ; * 輸出: 隊列是否為空 *
0076 ; * 調用函數:無 *
0076 ; ***********************************************************/
0076 ; BOOL ADT_Queue_Get_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData)
0076 ; {
0076 .dbline 135
0076 ; uint8 *pBuffer;
0076 ; uint nSize;
0076 ; uint nTail;
0076 ; uint nHead;
0076 ; uint nCount;
0076 ;
0076 ; SAFE_CODE_PERFORMANCE //原子操作
0076 F894 cli
0078 .dbline 135
0078 F801 movw R30,R16
007A C080 ldd R12,z+0
007C D180 ldd R13,z+1
007E .dbline 135
007E A280 ldd R10,z+2
0080 B380 ldd R11,z+3
0082 .dbline 135
0082 CC20 tst R12
0084 11F4 brne X5
0086 DD20 tst R13
0088 21F0 breq L12
008A X5:
008A AA20 tst R10
008C 29F4 brne L10
008E BB20 tst R11
0090 19F4 brne L10
0092 X6:
0092 L12:
0092 .dbline 135
0092 .dbline 135
0092 7894 sei
0094 .dbline 135
0094 0027 clr R16
0096 27C0 xjmp L9
0098 L10:
0098 .dbline 135
0098 F801 movw R30,R16
009A 6681 ldd R22,z+6
009C 7781 ldd R23,z+7
009E .dbline 135
009E E480 ldd R14,z+4
00A0 F580 ldd R15,z+5
00A2 .dbline 135
00A2 4085 ldd R20,z+8
00A4 5185 ldd R21,z+9
00A6 .dbline 135
00A6 6E15 cp R22,R14
00A8 7F05 cpc R23,R15
00AA 31F4 brne L13
00AC X7:
00AC 4030 cpi R20,0
00AE 4507 cpc R20,R21
00B0 19F4 brne L13
00B2 X8:
00B2 .dbline 135
00B2 .dbline 135
00B2 7894 sei
00B4 .dbline 135
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -