📄 rd_adt_msgmap.lis
字号:
.module RD_ADT_MSGMap.c
.area text(rom, con, rel)
0000 .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\RD_ADT_MSGMap.c
0000 .dbfunc e MsgMapProcess _MsgMapProcess fc
0000 .dbstruct 0 3 MsgMapItem
0000 .dbfield 0 cCMD c
0000 .dbfield 1 pMsgFunc pfc
0000 .dbend
0000 .dbstruct 0 3 MsgMap
0000 .dbfield 0 cItemCount c
0000 .dbfield 1 pMsgItems pS[MsgMapItem]
0000 .dbend
0000 .dbstruct 0 4 MsgItem
0000 .dbfield 0 cCMD c
0000 .dbfield 1 cDataLength c
0000 .dbfield 2 pData pc
0000 .dbend
0000 ; pMsgMapItem -> R20,R21
0000 ; Reg2 -> R22,R23
0000 ; Reg3 -> R22,R23
0000 ; n1 -> R10
0000 ; cMsgItemCount0 -> R14
0000 ; pMsgItem -> R12,R13
0000 ; pMsgMap -> R22,R23
.even
0000 _MsgMapProcess::
0000 00D0 rcall push_xgsetF0FC
0002 6901 movw R12,R18
0004 B801 movw R22,R16
0006 .dbline -1
0006 .dbline 78
0006 ; /***********************************************************
0006 ; * 函数库说明:抽象数据类型(ADT)消息地图函数库 *
0006 ; * 版本: v1.00 *
0006 ; * 作者: 王卓然 *
0006 ; * 创建日期:2007年4月6日 *
0006 ; * -------------------------------------------------------- *
0006 ; * [支 持 库] *
0006 ; * 支持库名称:RD_MacroAndConst.h *
0006 ; * 需要版本: v0.01 &abv *
0006 ; * 支持库说明:系统常用宏定义库 *
0006 ; * *
0006 ; * 支持库名称:RD_ADT_MSGMAP.c *
0006 ; * 需要版本: ----- *
0006 ; * 支持库名称:抽象数据类型(ADT)消息地图声明库 *
0006 ; * -------------------------------------------------------- *
0006 ; * [版本更新] *
0006 ; * 修改: *
0006 ; * 修改日期: *
0006 ; * 版本: *
0006 ; * -------------------------------------------------------- *
0006 ; * [版本历史] *
0006 ; * -------------------------------------------------------- *
0006 ; * [使用说明] *
0006 ; ***********************************************************/
0006 ;
0006 ; /********************
0006 ; * 头 文 件 配 置 区 *
0006 ; ********************/
0006 ; # include "RD_MacroAndConst.h"
0006 ; # include "RD_ADT_MSGMap.h"
0006 ;
0006 ; /********************
0006 ; * 系 统 宏 定 义 *
0006 ; ********************/
0006 ;
0006 ; /*------------------*
0006 ; * 常 数 宏 定 义 *
0006 ; *------------------*/
0006 ;
0006 ; /*------------------*
0006 ; * 动 作 宏 定 义 *
0006 ; *------------------*/
0006 ;
0006 ; /********************
0006 ; * 用户变量类型定义 *
0006 ; ********************/
0006 ;
0006 ; /********************
0006 ; * 结构体定义区 *
0006 ; ********************/
0006 ;
0006 ; /********************
0006 ; * 模块函数声明区 *
0006 ; ********************/
0006 ;
0006 ; /********************
0006 ; * 全局函数声明区 *
0006 ; ********************/
0006 ; BOOL MsgMapProcess(MSG_MAP *pMsgMap,MSG_ITEM *pMsgItem);
0006 ;
0006 ; /********************
0006 ; * 模块变量声明区 *
0006 ; ********************/
0006 ;
0006 ; /********************
0006 ; * 全局变量声明区 *
0006 ; ********************/
0006 ;
0006 ; # include "PF_Config.h"
0006 ;
0006 ; /***********************************************************
0006 ; * 函数说明:消息地图处理函数 *
0006 ; * 输入: 消息地图,要处理的消息 *
0006 ; * 输出: 消息是否得到处理 *
0006 ; * 调用函数:无 *
0006 ; ***********************************************************/
0006 ; BOOL MsgMapProcess(MSG_MAP *pMsgMap,MSG_ITEM *pMsgItem)
0006 ; {
0006 .dbline 79
0006 ; uint8 n = 0;
0006 .dbline 80
0006 ; uint8 cMsgItemCount = pMsgMap->cItemCount;
0006 FB01 movw R30,R22
0008 E080 ldd R14,z+0
000A .dbline 81
000A ; MSG_MAP_ITEM *pMsgMapItem = pMsgMap->pMsgItems;
000A 4181 ldd R20,z+1
000C 5281 ldd R21,z+2
000E .dbline 83
000E ;
000E ; if ((pMsgMap == NULL) || (pMsgItem == NULL)) //强壮性检测
000E E030 cpi R30,0
0010 EF07 cpc R30,R31
0012 21F0 breq L4
0014 X0:
0014 CC20 tst R12
0016 21F4 brne L2
0018 DD20 tst R13
001A 11F4 brne L2
001C X1:
001C L4:
001C .dbline 84
001C ; {
001C .dbline 85
001C ; return FALSE;
001C 0027 clr R16
001E 17C0 rjmp L1
0020 L2:
0020 .dbline 88
0020 ; }
0020 ;
0020 ; for (n = 0;n < cMsgItemCount;n++)
0020 AA24 clr R10
0022 12C0 rjmp L8
0024 L5:
0024 .dbline 89
0024 ; {
0024 .dbline 90
0024 ; if (pMsgMapItem[n].cCMD == pMsgItem->cCMD)
0024 83E0 ldi R24,3
0026 8A9D mul R24,R10
0028 B001 movw R22,R0
002A 640F add R22,R20
002C 751F adc R23,R21
002E F601 movw R30,R12
0030 2080 ldd R2,z+0
0032 FB01 movw R30,R22
0034 3080 ldd R3,z+0
0036 3214 cp R3,R2
0038 31F4 brne L9
003A X2:
003A .dbline 91
003A ; {
003A .dbline 92
003A ; return ((*pMsgMapItem[n].pMsgFunc)(pMsgItem));
003A 8601 movw R16,R12
003C A181 ldd R26,z+1
003E B281 ldd R27,z+2
0040 FD01 movw R30,R26
0042 00D0 rcall xicall
0044 04C0 rjmp L1
0046 L9:
0046 .dbline 94
0046 ; }
0046 ; }
0046 L6:
0046 .dbline 88
0046 A394 inc R10
0048 L8:
0048 .dbline 88
0048 AE14 cp R10,R14
004A 60F3 brlo L5
004C X3:
004C .dbline 96
004C ;
004C ; return FALSE;
004C 0027 clr R16
004E .dbline -2
004E L1:
004E .dbline 0 ; func end
004E 00C0 rjmp pop_xgsetF0FC
0050 .dbsym r pMsgMapItem 20 pS[MsgMapItem]
0050 .dbsym r Reg2 22 S
0050 .dbsym r Reg3 22 pV
0050 .dbsym r n1 10 c
0050 .dbsym r cMsgItemCount0 14 c
0050 .dbsym r pMsgItem 12 pS[MsgItem]
0050 .dbsym r pMsgMap 22 pS[MsgMap]
0050 .dbend
0050 .dbfunc e MSG_NULL_PROC _MSG_NULL_PROC fc
0050 ; p -> R10,R11
0050 ; pMsgItem -> R16,R17
.even
0050 _MSG_NULL_PROC::
0050 AA92 st -y,R10
0052 BA92 st -y,R11
0054 .dbline -1
0054 .dbline 106
0054 ; }
0054 ;
0054 ; /***********************************************************
0054 ; * 函数说明:消息处理空函数 *
0054 ; * 输入: 要处理的消息 *
0054 ; * 输出: 恒为FALSE *
0054 ; * 调用函数:无 *
0054 ; ***********************************************************/
0054 ; BOOL MSG_NULL_PROC(MSG_ITEM *pMsgItem)
0054 ; {
0054 .dbline 107
0054 ; MSG_ITEM *p = pMsgItem;
0054 5801 movw R10,R16
0056 .dbline 109
0056 ;
0056 ; return FALSE;
0056 0027 clr R16
0058 .dbline -2
0058 L11:
0058 .dbline 0 ; func end
0058 B990 ld R11,y+
005A A990 ld R10,y+
005C 0895 ret
005E .dbsym r p 10 pS[MsgItem]
005E .dbsym r pMsgItem 16 pS[MsgItem]
005E .dbend
005E ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -