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

📄 rd_adt_queue.lis

📁 移动机器人(小车)的物理坐标和逻辑坐标的转换源码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module RD_ADT_QUEUE.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\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           ;        cflags0 -> R10
 0000           ;        pBuffer -> R14,R15
 0000           ;        nCount0 -> R20,R21
 0000           ;         nHead0 -> y+0
 0000           ;         nTail0 -> R22,R23
 0000           ;         nSize0 -> R12,R13
 0000           ;          cData -> R18
 0000           ;         pQueue -> R16,R17
                        .even
 0000           _ADT_Queue_Add_To_Buffer::
 0000 00D0              rcall push_xgsetF0FC
 0002 2297              sbiw R28,2
 0004                   .dbline -1
 0004                   .dbline 79
 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           ; # include "PF_Config.h"
 0004           ; 
 0004           ; /***********************************************************
 0004           ; *   函数说明:抽象数据类型队列,系统默认队列缓冲添加函数   *
 0004           ; *   输入:    要添加到缓冲区的数据                         *
 0004           ; *   输出:    添加是否成功                                 *
 0004           ; *   调用函数:无                                           *
 0004           ; ***********************************************************/
 0004           ; BOOL ADT_Queue_Add_To_Buffer(ADT_QUEUE *pQueue,uint8 cData)
 0004           ; {
 0004                   .dbline 87
 0004           ;     uint8 *pBuffer;
 0004           ;     uint   nSize;
 0004           ;     uint   nTail;
 0004           ;     uint   nHead;
 0004           ;     uint   nCount;
 0004           ;     
 0004           ;     //PORTG ^= BIT(PG3);
 0004           ;     SAFE_CODE_PERFORMANCE                                   //原子操作
 0004                   .dbline 87
 0004 AFB6              in R10,0x3f
 0006                   .dbline 87
 0006 F894              cli
 0008                   .dbline 87
 0008 F801              movw R30,R16
 000A E080              ldd R14,z+0
 000C F180              ldd R15,z+1
 000E                   .dbline 87
 000E C280              ldd R12,z+2
 0010 D380              ldd R13,z+3
 0012                   .dbline 87
 0012 EE20              tst R14
 0014 11F4              brne X0
 0016 FF20              tst R15
 0018 21F0              breq L4
 001A           X0:
 001A CC20              tst R12
 001C 29F4              brne L2
 001E DD20              tst R13
 0020 19F4              brne L2
 0022           X1:
 0022           L4:
 0022                   .dbline 87
 0022                   .dbline 87
 0022 7894              sei
 0024                   .dbline 87
 0024 0027              clr R16
 0026 27C0              rjmp L1
 0028           L2:
 0028                   .dbline 87
 0028 F801              movw R30,R16
 002A 6681              ldd R22,z+6
 002C 7781              ldd R23,z+7
 002E                   .dbline 87
 002E 2480              ldd R2,z+4
 0030 3580              ldd R3,z+5
 0032 3982              std y+1,R3
 0034 2882              std y+0,R2
 0036                   .dbline 87
 0036 4085              ldd R20,z+8
 0038 5185              ldd R21,z+9
 003A                   .dbline 87
 003A 0101              movw R0,R2
 003C 6215              cp R22,R2
 003E 7305              cpc R23,R3
 0040 31F4              brne L5
 0042           X2:
 0042 4C15              cp R20,R12
 0044 5D05              cpc R21,R13
 0046 19F4              brne L5
 0048           X3:
 0048                   .dbline 87
 0048                   .dbline 87
 0048 7894              sei
 004A                   .dbline 87
 004A 0027              clr R16
 004C 14C0              rjmp L1
 004E           L5:
 004E                   .dbline 87
 004E FB01              movw R30,R22
 0050 EE0D              add R30,R14
 0052 FF1D              adc R31,R15
 0054 2083              std z+0,R18
 0056                   .dbline 87
 0056 6F5F              subi R22,255  ; offset = 1
 0058 7F4F              sbci R23,255
 005A                   .dbline 87
 005A 4F5F              subi R20,255  ; offset = 1
 005C 5F4F              sbci R21,255
 005E                   .dbline 87
 005E 6C15              cp R22,R12
 0060 7D05              cpc R23,R13
 0062 11F4              brne L7
 0064           X4:
 0064                   .dbline 87
 0064                   .dbline 87
 0064 6627              clr R22
 0066 7727              clr R23
 0068                   .dbline 87
 0068           L7:
 0068                   .dbline 87
 0068 F801              movw R30,R16
 006A 7783              std z+7,R23
 006C 6683              std z+6,R22
 006E                   .dbline 87
 006E 5187              std z+9,R21
 0070 4087              std z+8,R20
 0072                   .dbline 87
 0072                   .dbline 87
 0072 AFBE              out 0x3f,R10
 0074                   .dbline 87
 0074                   .dbline 120
 0074           ;     (
 0074           ;         pBuffer = pQueue->pBuffer;
 0074           ;         nSize = pQueue->nSize;
 0074           ;         
 0074           ;         if ((pBuffer == NULL) || (!nSize))
 0074           ;         {
 0074           ;             SEI();
 0074           ;             return FALSE;                                   //缓冲区未分配空间
 0074           ;         }
 0074           ;         nTail = pQueue->nTail;
 0074           ;         nHead = pQueue->nHead;
 0074           ;         nCount = pQueue->nCount;
 0074           ;     
 0074           ;     
 0074           ;         if ((nTail == nHead) && (nCount == nSize))          //缓冲区已满
 0074           ;         {
 0074           ;             SEI();
 0074           ;             return FALSE;
 0074           ;         }
 0074           ;     
 0074           ;         pBuffer[nTail] = cData;
 0074           ;         nTail++;
 0074           ;         nCount++;
 0074           ;         if (nTail == nSize)
 0074           ;         {
 0074           ;             nTail = 0;
 0074           ;         }
 0074           ;         
 0074           ;         pQueue->nTail = nTail;
 0074           ;         pQueue->nCount = nCount;
 0074           ;     )
 0074           ;     
 0074           ;     return TRUE;
 0074 01E0              ldi R16,1
 0076                   .dbline -2
 0076           L1:
 0076                   .dbline 0 ; func end
 0076 2296              adiw R28,2
 0078 00C0              rjmp pop_xgsetF0FC
 007A                   .dbsym r cflags0 10 c
 007A                   .dbsym r pBuffer 14 pc
 007A                   .dbsym r nCount0 20 i
 007A                   .dbsym l nHead0 0 i
 007A                   .dbsym r nTail0 22 i
 007A                   .dbsym r nSize0 12 i
 007A                   .dbsym r cData 18 c
 007A                   .dbsym r pQueue 16 pS[AbstructDataTypeQueue]
 007A                   .dbend
 007A                   .dbfunc e ADT_Queue_Get_From_Buffer _ADT_Queue_Get_From_Buffer fc
 007A           ;        cflags0 -> R10
 007A           ;        pBuffer -> R14,R15
 007A           ;         nHead1 -> R22,R23
 007A           ;        nCount0 -> R20,R21
 007A           ;         nHead0 -> R22,R23
 007A           ;         nTail0 -> y+0
 007A           ;         nSize0 -> R12,R13
 007A           ;          pData -> R18,R19
 007A           ;         pQueue -> R16,R17
                        .even
 007A           _ADT_Queue_Get_From_Buffer::
 007A 00D0              rcall push_xgsetF0FC
 007C 2297              sbiw R28,2
 007E                   .dbline -1
 007E                   .dbline 130
 007E           ; }
 007E           ; 
 007E           ; /***********************************************************
 007E           ; *   函数说明:抽象数据类型队列,系统默认队列缓冲区读取函数 *
 007E           ; *   输入:    存放读取变量的空间指针                       *
 007E           ; *   输出:    队列是否为空                                 *
 007E           ; *   调用函数:无                                           *
 007E           ; ***********************************************************/
 007E           ; BOOL ADT_Queue_Get_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData)
 007E           ; {
 007E                   .dbline 137
 007E           ;     uint8 *pBuffer;
 007E           ;     uint   nSize;
 007E           ;     uint   nTail;
 007E           ;     uint   nHead;
 007E           ;     uint   nCount;
 007E           ;     //PORTG ^= BIT(PG3);
 007E           ;     SAFE_CODE_PERFORMANCE                                   //原子操作
 007E                   .dbline 137
 007E AFB6              in R10,0x3f
 0080                   .dbline 137
 0080 F894              cli
 0082                   .dbline 137
 0082 F801              movw R30,R16
 0084 E080              ldd R14,z+0
 0086 F180              ldd R15,z+1
 0088                   .dbline 137
 0088 C280              ldd R12,z+2
 008A D380              ldd R13,z+3
 008C                   .dbline 137
 008C EE20              tst R14
 008E 11F4              brne X5
 0090 FF20              tst R15
 0092 21F0              breq L12
 0094           X5:
 0094 CC20              tst R12
 0096 29F4              brne L10
 0098 DD20              tst R13
 009A 19F4              brne L10
 009C           X6:
 009C           L12:
 009C                   .dbline 137
 009C                   .dbline 137
 009C 7894              sei
 009E                   .dbline 137
 009E 0027              clr R16
 00A0 2AC0              rjmp L9
 00A2           L10:
 00A2                   .dbline 137
 00A2 F801              movw R30,R16
 00A4 2680              ldd R2,z+6
 00A6 3780              ldd R3,z+7
 00A8 3982              std y+1,R3
 00AA 2882              std y+0,R2
 00AC                   .dbline 137
 00AC 6481              ldd R22,z+4
 00AE 7581              ldd R23,z+5
 00B0                   .dbline 137
 00B0 4085              ldd R20,z+8
 00B2 5185              ldd R21,z+9
 00B4                   .dbline 137
 00B4 0101              movw R0,R2
 00B6 2616              cp R2,R22
 00B8 3706              cpc R3,R23
 00BA 31F4              brne L13
 00BC           X7:
 00BC 4030              cpi R20,0
 00BE 4507              cpc R20,R21
 00C0 19F4              brne L13

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -