📄 model.lst
字号:
F9 156C CP R22,R12
FA 057D CPC R23,R13
FB F411 BNE 0x00FE
FC 2766 CLR R22
FD 2777 CLR R23
FE 01F8 MOVW R30,R16
FF 8377 STD Z+7,R23
100 8366 STD Z+6,R22
101 8751 STD Z+9,R21
102 8740 STD Z+8,R20
103 BEAF OUT 0x3F,R10
(0088) (
(0089) pBuffer = pQueue->pBuffer;
(0090) nSize = pQueue->nSize;
(0091)
(0092) if ((pBuffer == NULL) || (!nSize))
(0093) {
(0094) SEI();
(0095) return FALSE; //缓冲区未分配空间
(0096) }
(0097) nTail = pQueue->nTail;
(0098) nHead = pQueue->nHead;
(0099) nCount = pQueue->nCount;
(0100)
(0101)
(0102) if ((nTail == nHead) && (nCount == nSize)) //缓冲区已满
(0103) {
(0104) SEI();
(0105) return FALSE;
(0106) }
(0107)
(0108) pBuffer[nTail] = cData;
(0109) nTail++;
(0110) nCount++;
(0111) if (nTail == nSize)
(0112) {
(0113) nTail = 0;
(0114) }
(0115)
(0116) pQueue->nTail = nTail;
(0117) pQueue->nCount = nCount;
(0118) )
(0119)
(0120) return TRUE;
104 E001 LDI R16,1
105 9622 ADIW R28,2
106 C951 RJMP pop_xgsetF0FC
_ADT_Queue_Get_From_Buffer:
cflags0 --> R10
pBuffer --> R14
nHead1 --> R22
nCount0 --> R20
nHead0 --> R22
nTail0 --> Y,+0
nSize0 --> R12
pData --> R18
pQueue --> R16
107 D95B RCALL push_xgsetF0FC
108 9722 SBIW R28,2
(0121) }
(0122)
(0123) /***********************************************************
(0124) * 函数说明:抽象数据类型队列,系统默认队列缓冲区读取函数 *
(0125) * 输入: 存放读取变量的空间指针 *
(0126) * 输出: 队列是否为空 *
(0127) * 调用函数:无 *
(0128) ***********************************************************/
(0129) BOOL ADT_Queue_Get_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData)
(0130) {
(0131) uint8 *pBuffer;
(0132) uint nSize;
(0133) uint nTail;
(0134) uint nHead;
(0135) uint nCount;
(0136) //PORTG ^= BIT(PG3);
(0137) SAFE_CODE_PERFORMANCE //原子操作
109 B6AF IN R10,0x3F
10A 94F8 BCLR 7
10B 01F8 MOVW R30,R16
10C 80E0 LDD R14,Z+0
10D 80F1 LDD R15,Z+1
10E 80C2 LDD R12,Z+2
10F 80D3 LDD R13,Z+3
110 20EE TST R14
111 F411 BNE 0x0114
112 20FF TST R15
113 F021 BEQ 0x0118
114 20CC TST R12
115 F429 BNE 0x011B
116 20DD TST R13
117 F419 BNE 0x011B
118 9478 BSET 7
119 2700 CLR R16
11A C02A RJMP 0x0145
11B 01F8 MOVW R30,R16
11C 8026 LDD R2,Z+6
11D 8037 LDD R3,Z+7
11E 8239 STD Y+1,R3
11F 8228 STD Y+0,R2
120 8164 LDD R22,Z+4
121 8175 LDD R23,Z+5
122 8540 LDD R20,Z+8
123 8551 LDD R21,Z+9
124 0101 MOVW R0,R2
125 1626 CP R2,R22
126 0637 CPC R3,R23
127 F431 BNE 0x012E
128 3040 CPI R20,0
129 0745 CPC R20,R21
12A F419 BNE 0x012E
12B 9478 BSET 7
12C 2700 CLR R16
12D C017 RJMP 0x0145
12E 011B MOVW R2,R22
12F 5F6F SUBI R22,0xFF
130 4F7F SBCI R23,0xFF
131 01F1 MOVW R30,R2
132 0DEE ADD R30,R14
133 1DFF ADC R31,R15
134 8020 LDD R2,Z+0
135 01F9 MOVW R30,R18
136 8220 STD Z+0,R2
137 5041 SUBI R20,1
138 4050 SBCI R21,0
139 156C CP R22,R12
13A 057D CPC R23,R13
13B F411 BNE 0x013E
13C 2766 CLR R22
13D 2777 CLR R23
13E 01F8 MOVW R30,R16
13F 8375 STD Z+5,R23
140 8364 STD Z+4,R22
141 8751 STD Z+9,R21
142 8740 STD Z+8,R20
143 BEAF OUT 0x3F,R10
(0138) (
(0139) pBuffer = pQueue->pBuffer;
(0140) nSize = pQueue->nSize;
(0141)
(0142) if ((pBuffer == NULL) || (!nSize))
(0143) {
(0144) SEI();
(0145) return FALSE; //缓冲区未分配空间
(0146) }
(0147) nTail = pQueue->nTail;
(0148) nHead = pQueue->nHead;
(0149) nCount = pQueue->nCount;
(0150)
(0151)
(0152) if ((nTail == nHead) && (nCount == 0)) //缓冲区为空
(0153) {
(0154) SEI();
(0155) return FALSE;
(0156) }
(0157)
(0158) (*pData) = pBuffer[nHead++];
(0159)
(0160) nCount--;
(0161) if (nHead == nSize)
(0162) {
(0163) nHead = 0;
(0164) }
(0165)
(0166) pQueue->nHead = nHead;
(0167) pQueue->nCount = nCount;
(0168) )
(0169)
(0170) return TRUE;
144 E001 LDI R16,1
145 9622 ADIW R28,2
146 C911 RJMP pop_xgsetF0FC
_ADT_Queue_Check_Empty:
cflags0 --> R10
pBuffer --> R12
pQueue --> R16
147 D921 RCALL push_xgset003C
(0171) }
(0172)
(0173) /***********************************************************
(0174) * 函数说明:队列判空函数 *
(0175) * 输入: 队列指针 *
(0176) * 输出: 队列是否为空 *
(0177) * 调用函数:无 *
(0178) ***********************************************************/
(0179) BOOL ADT_Queue_Check_Empty(ADT_QUEUE *pQueue)
(0180) {
(0181) uint8 *pBuffer;
(0182)
(0183) SAFE_CODE_PERFORMANCE
148 B6AF IN R10,0x3F
149 94F8 BCLR 7
14A 01F8 MOVW R30,R16
14B 80C0 LDD R12,Z+0
14C 80D1 LDD R13,Z+1
14D 20CC TST R12
14E F411 BNE 0x0151
14F 20DD TST R13
150 F031 BEQ 0x0157
151 8022 LDD R2,Z+2
152 8033 LDD R3,Z+3
153 2022 TST R2
154 F429 BNE 0x015A
155 2033 TST R3
156 F419 BNE 0x015A
157 9478 BSET 7
158 E001 LDI R16,1
159 C013 RJMP 0x016D
15A 01F8 MOVW R30,R16
15B 8024 LDD R2,Z+4
15C 8035 LDD R3,Z+5
15D 8046 LDD R4,Z+6
15E 8057 LDD R5,Z+7
15F 1442 CP R4,R2
160 0453 CPC R5,R3
161 F449 BNE 0x016B
162 8420 LDD R2,Z+8
163 8431 LDD R3,Z+9
164 2022 TST R2
165 F429 BNE 0x016B
166 2033 TST R3
167 F419 BNE 0x016B
168 9478 BSET 7
169 E001 LDI R16,1
16A C002 RJMP 0x016D
16B BEAF OUT 0x3F,R10
(0184) (
(0185) pBuffer = pQueue->pBuffer;
(0186)
(0187) if ((pBuffer == NULL) || (!(pQueue->nSize)))
(0188) {
(0189) SEI();
(0190) return TRUE; //缓冲区未分配空间
(0191) }
(0192)
(0193)
(0194) if (((pQueue->nTail) == (pQueue->nHead))
(0195) && ((pQueue->nCount) == 0)) //缓冲区为空
(0196) {
(0197) SEI();
(0198) return TRUE;
(0199) }
(0200) )
(0201)
(0202) return FALSE;
16C 2700 CLR R16
16D C8E5 RJMP pop_xgset003C
_ADT_Queue_Peek_From_Buffer:
cflags0 --> R10
pBuffer --> R12
nCount0 --> R20
nHead0 --> R14
nTail0 --> R22
nSize0 --> R14
pData --> R18
pQueue --> R16
16E D8F4 RCALL push_xgsetF0FC
(0203) }
(0204)
(0205) /***********************************************************
(0206) * 函数说明:队列首个数据预览函数 *
(0207) * 输入: 存放读取变量的空间指针 *
(0208) * 输出: 队列是否为空 *
(0209) * 调用函数:无 *
(0210) ***********************************************************/
(0211) BOOL ADT_Queue_Peek_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData)
(0212) {
(0213) uint8 *pBuffer;
(0214) uint nSize;
(0215) uint nTail;
(0216) uint nHead;
(0217) uint nCount;
(0218)
(0219) SAFE_CODE_PERFORMANCE //原子操作
16F B6AF IN R10,0x3F
170 94F8 BCLR 7
171 01F8 MOVW R30,R16
172 80C0 LDD R12,Z+0
173 80D1 LDD R13,Z+1
174 80E2 LDD R14,Z+2
175 80F3 LDD R15,Z+3
176 20CC TST R12
177 F411 BNE 0x017A
178 20DD TST R13
179 F021 BEQ 0x017E
17A 20EE TST R14
17B F429 BNE 0x0181
17C 20FF TST R15
17D F419 BNE 0x0181
17E 9478 BSET 7
17F 2700 CLR R16
180 C018 RJMP 0x0199
181 01F8 MOVW R30,R16
182 8166 LDD R22,Z+6
183 8177 LDD R23,Z+7
184 80E4 LDD R14,Z+4
185 80F5 LDD R15,Z+5
186 8540 LDD R20,Z+8
187 8551 LDD R21,Z+9
188 156E CP R22,R14
189 057F CPC R23,R15
18A F431 BNE 0x0191
18B 3040 CPI R20,0
18C 0745 CPC R20,R21
18D F419 BNE 0x0191
18E 9478 BSET 7
18F 2700 CLR R16
190 C008 RJMP 0x0199
191 01F7 MOVW R30,R14
192 0DEC ADD R30,R12
193 1DFD ADC R31,R13
194 8020 LDD R2,Z+0
195 01F9 MOVW R30,R18
196 8220 STD Z+0,R2
197 BEAF OUT 0x3F,R10
(0220) (
(0221) pBuffer = pQueue->pBuffer;
(0222) nSize = pQueue->nSize;
(0223)
(0224) if ((pBuffer == NULL) || (!nSize))
(0225) {
(0226) SEI();
(0227) return FALSE; //缓冲区未分配空间
(0228) }
(0229) nTail = pQueue->nTail;
(0230) nHead = pQueue->nHead;
(0231) nCount = pQueue->nCount;
(0232)
(0233)
(0234) if ((nTail == nHead) && (nCount == 0)) //缓冲区为空
(0235) {
(0236) SEI();
(0237) return FALSE;
(0238) }
(0239)
(0240) (*pData) = pBuffer[nHead];
(0241) )
(0242)
(0243) return TRUE;
198 E001 LDI R16,1
199 C8BE RJMP pop_xgsetF0FC
_SFP_NULL_Output_Data_Function:
p --> R10
cData --> Y,+2
19A 931A ST R17,-Y
19B 930A ST R16,-Y
19C 92AA ST R10,-Y
19D 92BA ST R11,-Y
FILE: E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\RD_UseSerialFrame_PROC.c
(0001) /***********************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -