ARM GAS C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s page 1 1 .cpu cortex-m4 2 .arch armv7e-m 3 .fpu fpv4-sp-d16 4 .eabi_attribute 27, 1 5 .eabi_attribute 28, 1 6 .eabi_attribute 20, 1 7 .eabi_attribute 21, 1 8 .eabi_attribute 23, 3 9 .eabi_attribute 24, 1 10 .eabi_attribute 25, 1 11 .eabi_attribute 26, 1 12 .eabi_attribute 30, 6 13 .eabi_attribute 34, 1 14 .eabi_attribute 18, 4 15 .file "soft_tattu.c" 16 .text 17 .Ltext0: 18 .cfi_sections .debug_frame 19 .global tattu_device1 20 .section .bss.tattu_device1,"aw",%nobits 21 .align 2 24 tattu_device1: 25 0000 00000000 .space 290 25 00000000 25 00000000 25 00000000 25 00000000 26 .global tattu_device2 27 .section .bss.tattu_device2,"aw",%nobits 28 .align 2 31 tattu_device2: 32 0000 00000000 .space 290 32 00000000 32 00000000 32 00000000 32 00000000 33 .section .text.TattuCanRecvHookFunction,"ax",%progbits 34 .align 1 35 .global TattuCanRecvHookFunction 36 .syntax unified 37 .thumb 38 .thumb_func 40 TattuCanRecvHookFunction: 41 .LFB130: 42 .file 1 "user_src/soft_tattu.c" 1:user_src/soft_tattu.c **** 2:user_src/soft_tattu.c **** #include "soft_tattu.h" 3:user_src/soft_tattu.c **** #include "string.h" 4:user_src/soft_tattu.c **** #include "soft_flash.h" 5:user_src/soft_tattu.c **** #include "soft_okcell.h" 6:user_src/soft_tattu.c **** 7:user_src/soft_tattu.c **** #define TATTU_MAXLEN 200 8:user_src/soft_tattu.c **** 9:user_src/soft_tattu.c **** 10:user_src/soft_tattu.c **** //_TATTU_INFO ttu_inf = {0}; 11:user_src/soft_tattu.c **** 12:user_src/soft_tattu.c **** /* ARM GAS C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s page 2 13:user_src/soft_tattu.c **** Field Bits Description 14:user_src/soft_tattu.c **** Start of transfer 1 See below 15:user_src/soft_tattu.c **** End of transfer 1 See below 16:user_src/soft_tattu.c **** Toggle bit 1 See below 17:user_src/soft_tattu.c **** Transfer ID 5 The transfer ID value 18:user_src/soft_tattu.c **** 19:user_src/soft_tattu.c **** 注意:数据为小端 20:user_src/soft_tattu.c **** */ 21:user_src/soft_tattu.c **** 22:user_src/soft_tattu.c **** 23:user_src/soft_tattu.c **** /* 24:user_src/soft_tattu.c **** Field Bits Allowed values Description 25:user_src/soft_tattu.c **** Priority 5 0-31 默认填最高优先级:0 26:user_src/soft_tattu.c **** Message type ID 16 0x1092 查询模式 27:user_src/soft_tattu.c **** Service or message 1 0 0x1092----此位为 0; 28:user_src/soft_tattu.c **** Source node ID 7 1…127 0 是保留的,代表一个未知的节点;自身的节点 Id; 29:user_src/soft_tattu.c **** Destination Node Id 7 1…127 0 是保留的,代表一个未知的节点;对方的节点 Id。 30:user_src/soft_tattu.c **** Request not response 1 0 or 1 1 表示该帧是 Request 请求帧;0 表示该帧是 Response 应答帧 31:user_src/soft_tattu.c **** 32:user_src/soft_tattu.c **** 注意:数据为小端 33:user_src/soft_tattu.c **** */ 34:user_src/soft_tattu.c **** #pragma pack(1) 35:user_src/soft_tattu.c **** typedef struct 36:user_src/soft_tattu.c **** { 37:user_src/soft_tattu.c **** unsigned char canid_prio :5; 38:user_src/soft_tattu.c **** unsigned short canid_msgid :16; 39:user_src/soft_tattu.c **** unsigned char canid_som :1; 40:user_src/soft_tattu.c **** unsigned char canid_srcid :7; 41:user_src/soft_tattu.c **** /*unsigned char canid_desid:7; 42:user_src/soft_tattu.c **** unsigned char canid_rnr:1;*/ 43:user_src/soft_tattu.c **** }_TATTU_CANID; 44:user_src/soft_tattu.c **** #pragma pack() 45:user_src/soft_tattu.c **** 46:user_src/soft_tattu.c **** _TATTU_DEVICE tattu_device1 = {.Tattu_Link.connect_status = COMP_NOEXIST}, 47:user_src/soft_tattu.c **** tattu_device2 = {.Tattu_Link.connect_status = COMP_NOEXIST}; 48:user_src/soft_tattu.c **** 49:user_src/soft_tattu.c **** void TattuCanRecvHookFunction(uint32_t ttuCanID, uint8_t data[], uint8_t len) 50:user_src/soft_tattu.c **** { 43 .loc 1 50 1 44 .cfi_startproc 45 @ args = 0, pretend = 0, frame = 24 46 @ frame_needed = 1, uses_anonymous_args = 0 47 0000 80B5 push {r7, lr} 48 .LCFI0: 49 .cfi_def_cfa_offset 8 50 .cfi_offset 7, -8 51 .cfi_offset 14, -4 52 0002 86B0 sub sp, sp, #24 53 .LCFI1: 54 .cfi_def_cfa_offset 32 55 0004 00AF add r7, sp, #0 56 .LCFI2: 57 .cfi_def_cfa_register 7 58 0006 F860 str r0, [r7, #12] 59 0008 B960 str r1, [r7, #8] 60 000a 1346 mov r3, r2 61 000c FB71 strb r3, [r7, #7] ARM GAS C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s page 3 51:user_src/soft_tattu.c **** //获取数据中的最后一位 52:user_src/soft_tattu.c **** _TATTU_DEVICE *taptr = NULL; 62 .loc 1 52 20 63 000e 0023 movs r3, #0 64 0010 7B61 str r3, [r7, #20] 53:user_src/soft_tattu.c **** uint8_t can_msgid = 0; 65 .loc 1 53 13 66 0012 0023 movs r3, #0 67 0014 FB74 strb r3, [r7, #19] 54:user_src/soft_tattu.c **** can_msgid = ttuCanID & 0x7f; 68 .loc 1 54 26 69 0016 FB68 ldr r3, [r7, #12] 70 0018 DBB2 uxtb r3, r3 71 .loc 1 54 15 72 001a 03F07F03 and r3, r3, #127 73 001e FB74 strb r3, [r7, #19] 55:user_src/soft_tattu.c **** 56:user_src/soft_tattu.c **** if(can_msgid == 0x16) 74 .loc 1 56 7 75 0020 FB7C ldrb r3, [r7, #19] @ zero_extendqisi2 76 0022 162B cmp r3, #22 77 0024 02D1 bne .L2 57:user_src/soft_tattu.c **** { 58:user_src/soft_tattu.c **** taptr = &tattu_device1; 78 .loc 1 58 15 79 0026 984B ldr r3, .L14 80 0028 7B61 str r3, [r7, #20] 81 002a 01E0 b .L3 82 .L2: 59:user_src/soft_tattu.c **** } 60:user_src/soft_tattu.c **** else 61:user_src/soft_tattu.c **** { 62:user_src/soft_tattu.c **** taptr = &tattu_device2; 83 .loc 1 62 15 84 002c 974B ldr r3, .L14+4 85 002e 7B61 str r3, [r7, #20] 86 .L3: 63:user_src/soft_tattu.c **** } 64:user_src/soft_tattu.c **** 65:user_src/soft_tattu.c **** memcpy(&taptr->ttu_tailbyte, &data[len - 1], sizeof(uint8_t)); 87 .loc 1 65 12 88 0030 7B69 ldr r3, [r7, #20] 89 0032 DB33 adds r3, r3, #219 90 .loc 1 65 39 91 0034 FA79 ldrb r2, [r7, #7] @ zero_extendqisi2 92 0036 013A subs r2, r2, #1 93 .loc 1 65 34 94 0038 B968 ldr r1, [r7, #8] 95 003a 0A44 add r2, r2, r1 96 003c 1278 ldrb r2, [r2] @ zero_extendqisi2 97 .loc 1 65 5 98 003e 1A70 strb r2, [r3] 66:user_src/soft_tattu.c **** 67:user_src/soft_tattu.c **** //找到开头 68:user_src/soft_tattu.c **** if(taptr->ttu_tailbyte.tail_start == 1){ 99 .loc 1 68 39 100 0040 7B69 ldr r3, [r7, #20] ARM GAS C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s page 4 101 0042 93F8DB30 ldrb r3, [r3, #219] @ zero_extendqisi2 102 0046 23F07F03 bic r3, r3, #127 103 004a DBB2 uxtb r3, r3 104 .loc 1 68 7 105 004c 002B cmp r3, #0 106 004e 0AD0 beq .L4 69:user_src/soft_tattu.c **** taptr->Tattu_recv_index = 0; 107 .loc 1 69 33 108 0050 7B69 ldr r3, [r7, #20] 109 0052 0022 movs r2, #0 110 0054 83F8D820 strb r2, [r3, #216] 111 0058 0022 movs r2, #0 112 005a 83F8D920 strb r2, [r3, #217] 70:user_src/soft_tattu.c **** taptr->Tattu_get_s = true; 113 .loc 1 70 28 114 005e 7B69 ldr r3, [r7, #20] 115 0060 0122 movs r2, #1 116 0062 83F8DA20 strb r2, [r3, #218] 117 .L4: 71:user_src/soft_tattu.c **** } 72:user_src/soft_tattu.c **** 73:user_src/soft_tattu.c **** //溢出检测 74:user_src/soft_tattu.c **** if(taptr->Tattu_recv_index + len > TATTU_MAXLEN) 118 .loc 1 74 13 119 0066 7B69 ldr r3, [r7, #20] 120 0068 B3F9D830 ldrsh r3, [r3, #216] @ unaligned 121 006c 1BB2 sxth r3, r3 122 006e 1A46 mov r2, r3 123 .loc 1 74 32 124 0070 FB79 ldrb r3, [r7, #7] @ zero_extendqisi2 125 0072 1344 add r3, r3, r2 126 .loc 1 74 7 127 0074 C82B cmp r3, #200 128 0076 14DD ble .L5 75:user_src/soft_tattu.c **** { 76:user_src/soft_tattu.c **** memset(taptr->Tattu_recv_buf,0,taptr->Tattu_recv_index); 129 .loc 1 76 21 130 0078 7B69 ldr r3, [r7, #20] 131 007a 181D adds r0, r3, #4 132 .loc 1 76 45 133 007c 7B69 ldr r3, [r7, #20] 134 007e B3F9D830 ldrsh r3, [r3, #216] @ unaligned 135 0082 1BB2 sxth r3, r3 136 .loc 1 76 9 137 0084 1A46 mov r2, r3 138 0086 0021 movs r1, #0 139 0088 FFF7FEFF bl memset 77:user_src/soft_tattu.c **** taptr->Tattu_recv_index = 0; 140 .loc 1 77 33 141 008c 7B69 ldr r3, [r7, #20] 142 008e 0022 movs r2, #0 143 0090 83F8D820 strb r2, [r3, #216] 144 0094 0022 movs r2, #0 145 0096 83F8D920 strb r2, [r3, #217] 78:user_src/soft_tattu.c **** taptr->Tattu_get_s = false; 146 .loc 1 78 28 147 009a 7B69 ldr r3, [r7, #20] ARM GAS C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s page 5 148 009c 0022 movs r2, #0 149 009e 83F8DA20 strb r2, [r3, #218] 150 .L5: 79:user_src/soft_tattu.c **** } 80:user_src/soft_tattu.c **** 81:user_src/soft_tattu.c **** //获取到正确的开始位则接收数据 82:user_src/soft_tattu.c **** if(taptr->Tattu_get_s == true){ 151 .loc 1 82 13 152 00a2 7B69 ldr r3, [r7, #20] 153 00a4 93F8DA30 ldrb r3, [r3, #218] @ zero_extendqisi2 154 .loc 1 82 7 155 00a8 002B cmp r3, #0 156 00aa 1CD0 beq .L6 83:user_src/soft_tattu.c **** //复制有效数据,最后一个字节不是有效数据 84:user_src/soft_tattu.c **** memcpy(&taptr->Tattu_recv_buf[taptr->Tattu_recv_index], data, len-1); 157 .loc 1 84 44 158 00ac 7B69 ldr r3, [r7, #20] 159 00ae B3F9D830 ldrsh r3, [r3, #216] @ unaligned 160 00b2 1BB2 sxth r3, r3 161 00b4 1A46 mov r2, r3 162 .loc 1 84 16 163 00b6 7B69 ldr r3, [r7, #20] 164 00b8 1344 add r3, r3, r2 165 00ba 181D adds r0, r3, #4 166 .loc 1 84 74 167 00bc FB79 ldrb r3, [r7, #7] @ zero_extendqisi2 168 00be 013B subs r3, r3, #1 169 .loc 1 84 9 170 00c0 1A46 mov r2, r3 171 00c2 B968 ldr r1, [r7, #8] 172 00c4 FFF7FEFF bl memcpy 85:user_src/soft_tattu.c **** taptr->Tattu_recv_index += (len-1); 173 .loc 1 85 33 174 00c8 7B69 ldr r3, [r7, #20] 175 00ca B3F9D830 ldrsh r3, [r3, #216] @ unaligned 176 00ce 1BB2 sxth r3, r3 177 00d0 9AB2 uxth r2, r3 178 00d2 FB79 ldrb r3, [r7, #7] @ zero_extendqisi2 179 00d4 9BB2 uxth r3, r3 180 00d6 1344 add r3, r3, r2 181 00d8 9BB2 uxth r3, r3 182 00da 013B subs r3, r3, #1 183 00dc 9BB2 uxth r3, r3 184 00de 1AB2 sxth r2, r3 185 00e0 7B69 ldr r3, [r7, #20] 186 00e2 A3F8D820 strh r2, [r3, #216] @ unaligned 187 .L6: 86:user_src/soft_tattu.c **** } 87:user_src/soft_tattu.c **** 88:user_src/soft_tattu.c **** 89:user_src/soft_tattu.c **** //找到结尾,开始解析 90:user_src/soft_tattu.c **** if(taptr->Tattu_get_s == true && taptr->ttu_tailbyte.tail_end == 1) 188 .loc 1 90 13 189 00e6 7B69 ldr r3, [r7, #20] 190 00e8 93F8DA30 ldrb r3, [r3, #218] @ zero_extendqisi2 191 .loc 1 90 7 192 00ec 002B cmp r3, #0 ARM GAS C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s page 6 193 00ee 00F0C680 beq .L13 194 .loc 1 90 67 discriminator 1 195 00f2 7B69 ldr r3, [r7, #20] 196 00f4 93F8DB30 ldrb r3, [r3, #219] @ zero_extendqisi2 197 00f8 03F04003 and r3, r3, #64 198 00fc DBB2 uxtb r3, r3 199 .loc 1 90 35 discriminator 1 200 00fe 002B cmp r3, #0 201 0100 00F0BD80 beq .L13 91:user_src/soft_tattu.c **** { 92:user_src/soft_tattu.c **** taptr->Tattu_get_s = false; 202 .loc 1 92 28 203 0104 7B69 ldr r3, [r7, #20] 204 0106 0022 movs r2, #0 205 0108 83F8DA20 strb r2, [r3, #218] 93:user_src/soft_tattu.c **** 94:user_src/soft_tattu.c **** taptr->Tattu_Link.connect_status = COMP_NORMAL; 206 .loc 1 94 42 207 010c 7B69 ldr r3, [r7, #20] 208 010e 0122 movs r2, #1 209 0110 83F8D420 strb r2, [r3, #212] 95:user_src/soft_tattu.c **** //更新电池数据到来时间 96:user_src/soft_tattu.c **** taptr->Tattu_Link.recv_time = HAL_GetTick(); 210 .loc 1 96 39 211 0114 FFF7FEFF bl HAL_GetTick 212 0118 0246 mov r2, r0 213 .loc 1 96 37 214 011a 7B69 ldr r3, [r7, #20] 215 011c C3F8CC20 str r2, [r3, #204] @ unaligned 97:user_src/soft_tattu.c **** 98:user_src/soft_tattu.c **** //如果是单帧完整数据 99:user_src/soft_tattu.c **** if(taptr->ttu_tailbyte.tail_start == 1 || taptr->Tattu_recv_index <= 7) 216 .loc 1 99 43 217 0120 7B69 ldr r3, [r7, #20] 218 0122 93F8DB30 ldrb r3, [r3, #219] @ zero_extendqisi2 219 0126 23F07F03 bic r3, r3, #127 220 012a DBB2 uxtb r3, r3 221 .loc 1 99 11 222 012c 002B cmp r3, #0 223 012e 40F09580 bne .L8 224 .loc 1 99 56 discriminator 1 225 0132 7B69 ldr r3, [r7, #20] 226 0134 B3F9D830 ldrsh r3, [r3, #216] @ unaligned 227 0138 1BB2 sxth r3, r3 228 .loc 1 99 48 discriminator 1 229 013a 072B cmp r3, #7 230 013c 40F38E80 ble .L8 100:user_src/soft_tattu.c **** { 101:user_src/soft_tattu.c **** //单帧数据不需要校验 102:user_src/soft_tattu.c **** } 103:user_src/soft_tattu.c **** //多帧拼包 104:user_src/soft_tattu.c **** else 105:user_src/soft_tattu.c **** { 106:user_src/soft_tattu.c **** //CRC校验,验证通过,暂不开启 107:user_src/soft_tattu.c **** CCITT_CRC16Init(&taptr->Tattu_recv_buf[2],taptr->Tattu_recv_index-2); 231 .loc 1 107 29 232 0140 7B69 ldr r3, [r7, #20] ARM GAS C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s page 7 233 0142 9A1D adds r2, r3, #6 234 .loc 1 107 60 235 0144 7B69 ldr r3, [r7, #20] 236 0146 B3F9D830 ldrsh r3, [r3, #216] @ unaligned 237 014a 1BB2 sxth r3, r3 238 014c 9BB2 uxth r3, r3 239 .loc 1 107 13 240 014e 023B subs r3, r3, #2 241 0150 9BB2 uxth r3, r3 242 0152 1946 mov r1, r3 243 0154 1046 mov r0, r2 244 0156 FFF7FEFF bl CCITT_CRC16Init 108:user_src/soft_tattu.c **** if(CCITT_CRC16 == (taptr->Tattu_recv_buf[0] + (taptr->Tattu_recv_buf[1]<<8))) 245 .loc 1 108 28 246 015a 4D4B ldr r3, .L14+8 247 015c 1B88 ldrh r3, [r3] 248 015e 1A46 mov r2, r3 249 .loc 1 108 53 250 0160 7B69 ldr r3, [r7, #20] 251 0162 1B79 ldrb r3, [r3, #4] @ zero_extendqisi2 252 0164 1946 mov r1, r3 253 .loc 1 108 81 254 0166 7B69 ldr r3, [r7, #20] 255 0168 5B79 ldrb r3, [r3, #5] @ zero_extendqisi2 256 .loc 1 108 84 257 016a 1B02 lsls r3, r3, #8 258 .loc 1 108 57 259 016c 0B44 add r3, r3, r1 260 .loc 1 108 15 261 016e 9A42 cmp r2, r3 262 0170 74D1 bne .L8 109:user_src/soft_tattu.c **** { 110:user_src/soft_tattu.c **** //避免电池单方面增加协议造成溢出,格式电池12s跟14s兼容有问题,飞控自己做处理 111:user_src/soft_tattu.c **** //后两个字节是自己添加的用来识别电池串数 112:user_src/soft_tattu.c **** if(taptr->Tattu_recv_index-2 <= (sizeof(_TATTU_INFO)-2)) 263 .loc 1 112 25 264 0172 7B69 ldr r3, [r7, #20] 265 0174 B3F9D830 ldrsh r3, [r3, #216] @ unaligned 266 0178 1BB2 sxth r3, r3 267 .loc 1 112 43 268 017a 023B subs r3, r3, #2 269 .loc 1 112 19 270 017c 442B cmp r3, #68 271 017e 66D8 bhi .L9 113:user_src/soft_tattu.c **** { 114:user_src/soft_tattu.c **** //stm32为小段模式,TATTU发送过来的数据为小端模式,可直接使用memcpy 115:user_src/soft_tattu.c **** //12S 116:user_src/soft_tattu.c **** if(taptr->Tattu_recv_index-2 == (sizeof(_TATTU_INFO)-2-4-16)) 272 .loc 1 116 29 273 0180 7B69 ldr r3, [r7, #20] 274 0182 B3F9D830 ldrsh r3, [r3, #216] @ unaligned 275 0186 1BB2 sxth r3, r3 276 .loc 1 116 23 277 0188 322B cmp r3, #50 278 018a 1BD1 bne .L10 117:user_src/soft_tattu.c **** { 118:user_src/soft_tattu.c **** taptr->ttu_inf.tattu_cnum = 12; ARM GAS C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s page 8 279 .loc 1 118 51 280 018c 7B69 ldr r3, [r7, #20] 281 018e 0022 movs r2, #0 282 0190 42F00C02 orr r2, r2, #12 283 0194 83F82021 strb r2, [r3, #288] 284 0198 0022 movs r2, #0 285 019a 83F82121 strb r2, [r3, #289] 119:user_src/soft_tattu.c **** //前12s信息 120:user_src/soft_tattu.c **** memcpy(&taptr->ttu_inf,&taptr->Tattu_recv_buf[2],40); 286 .loc 1 120 32 287 019e 7B69 ldr r3, [r7, #20] 288 01a0 03F1DC00 add r0, r3, #220 289 .loc 1 120 48 290 01a4 7B69 ldr r3, [r7, #20] 291 01a6 0633 adds r3, r3, #6 292 .loc 1 120 25 293 01a8 2822 movs r2, #40 294 01aa 1946 mov r1, r3 295 01ac FFF7FEFF bl memcpy 121:user_src/soft_tattu.c **** //后边信息 122:user_src/soft_tattu.c **** memcpy(&taptr->ttu_inf.tattu_descapa,&taptr->Tattu_recv_buf[40+2],8); 296 .loc 1 122 32 297 01b0 7B69 ldr r3, [r7, #20] 298 01b2 03F58470 add r0, r3, #264 299 .loc 1 122 62 300 01b6 7B69 ldr r3, [r7, #20] 301 01b8 2E33 adds r3, r3, #46 302 .loc 1 122 25 303 01ba 0822 movs r2, #8 304 01bc 1946 mov r1, r3 305 01be FFF7FEFF bl memcpy 306 01c2 4BE0 b .L8 307 .L10: 123:user_src/soft_tattu.c **** 124:user_src/soft_tattu.c **** } 125:user_src/soft_tattu.c **** //添加序列号后的12s 126:user_src/soft_tattu.c **** else if(taptr->Tattu_recv_index-2 == (sizeof(_TATTU_INFO)-2-4)) 308 .loc 1 126 34 309 01c4 7B69 ldr r3, [r7, #20] 310 01c6 B3F9D830 ldrsh r3, [r3, #216] @ unaligned 311 01ca 1BB2 sxth r3, r3 312 .loc 1 126 28 313 01cc 422B cmp r3, #66 314 01ce 1BD1 bne .L11 127:user_src/soft_tattu.c **** { 128:user_src/soft_tattu.c **** taptr->ttu_inf.tattu_cnum = 12; 315 .loc 1 128 51 316 01d0 7B69 ldr r3, [r7, #20] 317 01d2 0022 movs r2, #0 318 01d4 42F00C02 orr r2, r2, #12 319 01d8 83F82021 strb r2, [r3, #288] 320 01dc 0022 movs r2, #0 321 01de 83F82121 strb r2, [r3, #289] 129:user_src/soft_tattu.c **** //前12s信息 130:user_src/soft_tattu.c **** memcpy(&taptr->ttu_inf,&taptr->Tattu_recv_buf[2],40); 322 .loc 1 130 32 323 01e2 7B69 ldr r3, [r7, #20] ARM GAS C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s page 9 324 01e4 03F1DC00 add r0, r3, #220 325 .loc 1 130 48 326 01e8 7B69 ldr r3, [r7, #20] 327 01ea 0633 adds r3, r3, #6 328 .loc 1 130 25 329 01ec 2822 movs r2, #40 330 01ee 1946 mov r1, r3 331 01f0 FFF7FEFF bl memcpy 131:user_src/soft_tattu.c **** //后边信息 132:user_src/soft_tattu.c **** memcpy(&taptr->ttu_inf.tattu_descapa,&taptr->Tattu_recv_buf[40+2],24); 332 .loc 1 132 32 333 01f4 7B69 ldr r3, [r7, #20] 334 01f6 03F58470 add r0, r3, #264 335 .loc 1 132 62 336 01fa 7B69 ldr r3, [r7, #20] 337 01fc 2E33 adds r3, r3, #46 338 .loc 1 132 25 339 01fe 1822 movs r2, #24 340 0200 1946 mov r1, r3 341 0202 FFF7FEFF bl memcpy 342 0206 29E0 b .L8 343 .L11: 133:user_src/soft_tattu.c **** } 134:user_src/soft_tattu.c **** //14s 135:user_src/soft_tattu.c **** else if(taptr->Tattu_recv_index-2 == (sizeof(_TATTU_INFO)-2-16) || taptr->Tattu 344 .loc 1 135 34 345 0208 7B69 ldr r3, [r7, #20] 346 020a B3F9D830 ldrsh r3, [r3, #216] @ unaligned 347 020e 1BB2 sxth r3, r3 348 .loc 1 135 28 349 0210 362B cmp r3, #54 350 0212 05D0 beq .L12 351 .loc 1 135 93 discriminator 1 352 0214 7B69 ldr r3, [r7, #20] 353 0216 B3F9D830 ldrsh r3, [r3, #216] @ unaligned 354 021a 1BB2 sxth r3, r3 355 .loc 1 135 85 discriminator 1 356 021c 462B cmp r3, #70 357 021e 1DD1 bne .L8 358 .L12: 136:user_src/soft_tattu.c **** { 137:user_src/soft_tattu.c **** taptr->ttu_inf.tattu_cnum = 14; 359 .loc 1 137 51 360 0220 7B69 ldr r3, [r7, #20] 361 0222 0022 movs r2, #0 362 0224 42F00E02 orr r2, r2, #14 363 0228 83F82021 strb r2, [r3, #288] 364 022c 0022 movs r2, #0 365 022e 83F82121 strb r2, [r3, #289] 138:user_src/soft_tattu.c **** 139:user_src/soft_tattu.c **** //14s信息 140:user_src/soft_tattu.c **** memcpy(&taptr->ttu_inf,&taptr->Tattu_recv_buf[2],taptr->Tattu_recv_index-2) 366 .loc 1 140 32 367 0232 7B69 ldr r3, [r7, #20] 368 0234 03F1DC00 add r0, r3, #220 369 .loc 1 140 48 370 0238 7B69 ldr r3, [r7, #20] ARM GAS C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s page 10 371 023a 991D adds r1, r3, #6 372 .loc 1 140 79 373 023c 7B69 ldr r3, [r7, #20] 374 023e B3F9D830 ldrsh r3, [r3, #216] @ unaligned 375 0242 1BB2 sxth r3, r3 376 .loc 1 140 97 377 0244 023B subs r3, r3, #2 378 .loc 1 140 25 379 0246 1A46 mov r2, r3 380 0248 FFF7FEFF bl memcpy 381 024c 06E0 b .L8 382 .L9: 141:user_src/soft_tattu.c **** } 142:user_src/soft_tattu.c **** 143:user_src/soft_tattu.c **** }else{ 144:user_src/soft_tattu.c **** //清空电池信息数据 145:user_src/soft_tattu.c **** memset(&taptr->ttu_inf, 0, sizeof(_TATTU_INFO)); 383 .loc 1 145 28 384 024e 7B69 ldr r3, [r7, #20] 385 0250 DC33 adds r3, r3, #220 386 .loc 1 145 21 387 0252 4622 movs r2, #70 388 0254 0021 movs r1, #0 389 0256 1846 mov r0, r3 390 0258 FFF7FEFF bl memset 391 .L8: 146:user_src/soft_tattu.c **** } 147:user_src/soft_tattu.c **** } 148:user_src/soft_tattu.c **** } 149:user_src/soft_tattu.c **** //清理buff 150:user_src/soft_tattu.c **** memset(taptr->Tattu_recv_buf,0,taptr->Tattu_recv_index); 392 .loc 1 150 21 393 025c 7B69 ldr r3, [r7, #20] 394 025e 181D adds r0, r3, #4 395 .loc 1 150 45 396 0260 7B69 ldr r3, [r7, #20] 397 0262 B3F9D830 ldrsh r3, [r3, #216] @ unaligned 398 0266 1BB2 sxth r3, r3 399 .loc 1 150 9 400 0268 1A46 mov r2, r3 401 026a 0021 movs r1, #0 402 026c FFF7FEFF bl memset 151:user_src/soft_tattu.c **** 152:user_src/soft_tattu.c **** //包数完整重新计数 153:user_src/soft_tattu.c **** taptr->Tattu_recv_index = 0; 403 .loc 1 153 33 404 0270 7B69 ldr r3, [r7, #20] 405 0272 0022 movs r2, #0 406 0274 83F8D820 strb r2, [r3, #216] 407 0278 0022 movs r2, #0 408 027a 83F8D920 strb r2, [r3, #217] 409 .L13: 154:user_src/soft_tattu.c **** } 155:user_src/soft_tattu.c **** } 410 .loc 1 155 1 411 027e 00BF nop 412 0280 1837 adds r7, r7, #24 ARM GAS C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s page 11 413 .LCFI3: 414 .cfi_def_cfa_offset 8 415 0282 BD46 mov sp, r7 416 .LCFI4: 417 .cfi_def_cfa_register 13 418 @ sp needed 419 0284 80BD pop {r7, pc} 420 .L15: 421 0286 00BF .align 2 422 .L14: 423 0288 00000000 .word tattu_device1 424 028c 00000000 .word tattu_device2 425 0290 00000000 .word CCITT_CRC16 426 .cfi_endproc 427 .LFE130: 429 .global CCITT_CRC16 430 .section .bss.CCITT_CRC16,"aw",%nobits 431 .align 1 434 CCITT_CRC16: 435 0000 0000 .space 2 436 .section .text.CCITT_CRC16Init,"ax",%progbits 437 .align 1 438 .global CCITT_CRC16Init 439 .syntax unified 440 .thumb 441 .thumb_func 443 CCITT_CRC16Init: 444 .LFB131: 156:user_src/soft_tattu.c **** 157:user_src/soft_tattu.c **** /* 158:user_src/soft_tattu.c **** 格氏电池的CRC校验 159:user_src/soft_tattu.c **** */ 160:user_src/soft_tattu.c **** #define CRC_CCITT_INIT 0xFFFF 161:user_src/soft_tattu.c **** #define CRC_CCITT_POLY 0x1021U 162:user_src/soft_tattu.c **** 163:user_src/soft_tattu.c **** uint16_t CCITT_CRC16 = 0; 164:user_src/soft_tattu.c **** 165:user_src/soft_tattu.c **** void CCITT_CRC16Init(uint8_t const *bytes, uint16_t len) 166:user_src/soft_tattu.c **** { 445 .loc 1 166 1 446 .cfi_startproc 447 @ args = 0, pretend = 0, frame = 8 448 @ frame_needed = 1, uses_anonymous_args = 0 449 0000 80B5 push {r7, lr} 450 .LCFI5: 451 .cfi_def_cfa_offset 8 452 .cfi_offset 7, -8 453 .cfi_offset 14, -4 454 0002 82B0 sub sp, sp, #8 455 .LCFI6: 456 .cfi_def_cfa_offset 16 457 0004 00AF add r7, sp, #0 458 .LCFI7: 459 .cfi_def_cfa_register 7 460 0006 7860 str r0, [r7, #4] 461 0008 0B46 mov r3, r1 462 000a 7B80 strh r3, [r7, #2] @ movhi ARM GAS C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s page 12 167:user_src/soft_tattu.c **** CCITT_CRC16 = CRC_CCITT_INIT; 463 .loc 1 167 17 464 000c 064B ldr r3, .L17 465 000e 4FF6FF72 movw r2, #65535 466 0012 1A80 strh r2, [r3] @ movhi 168:user_src/soft_tattu.c **** CCITT_CRC_ARRAY(bytes, len); 467 .loc 1 168 5 468 0014 7B88 ldrh r3, [r7, #2] 469 0016 1946 mov r1, r3 470 0018 7868 ldr r0, [r7, #4] 471 001a FFF7FEFF bl CCITT_CRC_ARRAY 169:user_src/soft_tattu.c **** } 472 .loc 1 169 1 473 001e 00BF nop 474 0020 0837 adds r7, r7, #8 475 .LCFI8: 476 .cfi_def_cfa_offset 8 477 0022 BD46 mov sp, r7 478 .LCFI9: 479 .cfi_def_cfa_register 13 480 @ sp needed 481 0024 80BD pop {r7, pc} 482 .L18: 483 0026 00BF .align 2 484 .L17: 485 0028 00000000 .word CCITT_CRC16 486 .cfi_endproc 487 .LFE131: 489 .section .text.CCITT_CRCStep,"ax",%progbits 490 .align 1 491 .global CCITT_CRCStep 492 .syntax unified 493 .thumb 494 .thumb_func 496 CCITT_CRCStep: 497 .LFB132: 170:user_src/soft_tattu.c **** 171:user_src/soft_tattu.c **** 172:user_src/soft_tattu.c **** void CCITT_CRCStep(uint8_t byte) 173:user_src/soft_tattu.c **** { 498 .loc 1 173 1 499 .cfi_startproc 500 @ args = 0, pretend = 0, frame = 16 501 @ frame_needed = 1, uses_anonymous_args = 0 502 @ link register save eliminated. 503 0000 80B4 push {r7} 504 .LCFI10: 505 .cfi_def_cfa_offset 4 506 .cfi_offset 7, -4 507 0002 85B0 sub sp, sp, #20 508 .LCFI11: 509 .cfi_def_cfa_offset 24 510 0004 00AF add r7, sp, #0 511 .LCFI12: 512 .cfi_def_cfa_register 7 513 0006 0346 mov r3, r0 514 0008 FB71 strb r3, [r7, #7] ARM GAS C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s page 13 174:user_src/soft_tattu.c **** uint32_t j; 175:user_src/soft_tattu.c **** CCITT_CRC16 ^= ((uint16_t)byte << 8); 515 .loc 1 175 21 516 000a FB79 ldrb r3, [r7, #7] @ zero_extendqisi2 517 .loc 1 175 36 518 000c 1B02 lsls r3, r3, #8 519 .loc 1 175 17 520 000e 1AB2 sxth r2, r3 521 0010 164B ldr r3, .L24 522 0012 1B88 ldrh r3, [r3] 523 0014 1BB2 sxth r3, r3 524 0016 5340 eors r3, r3, r2 525 0018 1BB2 sxth r3, r3 526 001a 9AB2 uxth r2, r3 527 001c 134B ldr r3, .L24 528 001e 1A80 strh r2, [r3] @ movhi 176:user_src/soft_tattu.c **** for (j = 0; j < 8; j++) 529 .loc 1 176 12 530 0020 0023 movs r3, #0 531 0022 FB60 str r3, [r7, #12] 532 .loc 1 176 5 533 0024 17E0 b .L20 534 .L23: 177:user_src/soft_tattu.c **** { 178:user_src/soft_tattu.c **** CCITT_CRC16=(CCITT_CRC16 & 0x8000U)?((CCITT_CRC16 << 1) ^ CRC_CCITT_POLY):(CCITT_CRC16 << 1 535 .loc 1 178 44 536 0026 114B ldr r3, .L24 537 0028 1B88 ldrh r3, [r3] 538 002a 1BB2 sxth r3, r3 539 .loc 1 178 20 540 002c 002B cmp r3, #0 541 002e 09DA bge .L21 542 .loc 1 178 59 discriminator 1 543 0030 0E4B ldr r3, .L24 544 0032 1B88 ldrh r3, [r3] 545 0034 5B00 lsls r3, r3, #1 546 0036 9BB2 uxth r3, r3 547 .loc 1 178 20 discriminator 1 548 0038 83F48153 eor r3, r3, #4128 549 003c 83F00103 eor r3, r3, #1 550 0040 9BB2 uxth r3, r3 551 0042 03E0 b .L22 552 .L21: 553 .loc 1 178 96 discriminator 2 554 0044 094B ldr r3, .L24 555 0046 1B88 ldrh r3, [r3] 556 .loc 1 178 20 discriminator 2 557 0048 5B00 lsls r3, r3, #1 558 004a 9BB2 uxth r3, r3 559 .L22: 560 .loc 1 178 20 is_stmt 0 discriminator 4 561 004c 074A ldr r2, .L24 562 004e 1380 strh r3, [r2] @ movhi 176:user_src/soft_tattu.c **** for (j = 0; j < 8; j++) 563 .loc 1 176 25 is_stmt 1 discriminator 4 564 0050 FB68 ldr r3, [r7, #12] 565 0052 0133 adds r3, r3, #1 ARM GAS C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s page 14 566 0054 FB60 str r3, [r7, #12] 567 .L20: 176:user_src/soft_tattu.c **** for (j = 0; j < 8; j++) 568 .loc 1 176 5 discriminator 2 569 0056 FB68 ldr r3, [r7, #12] 570 0058 072B cmp r3, #7 571 005a E4D9 bls .L23 179:user_src/soft_tattu.c **** } 180:user_src/soft_tattu.c **** } 572 .loc 1 180 1 573 005c 00BF nop 574 005e 00BF nop 575 0060 1437 adds r7, r7, #20 576 .LCFI13: 577 .cfi_def_cfa_offset 4 578 0062 BD46 mov sp, r7 579 .LCFI14: 580 .cfi_def_cfa_register 13 581 @ sp needed 582 0064 5DF8047B ldr r7, [sp], #4 583 .LCFI15: 584 .cfi_restore 7 585 .cfi_def_cfa_offset 0 586 0068 7047 bx lr 587 .L25: 588 006a 00BF .align 2 589 .L24: 590 006c 00000000 .word CCITT_CRC16 591 .cfi_endproc 592 .LFE132: 594 .section .text.CCITT_CRC_ARRAY,"ax",%progbits 595 .align 1 596 .global CCITT_CRC_ARRAY 597 .syntax unified 598 .thumb 599 .thumb_func 601 CCITT_CRC_ARRAY: 602 .LFB133: 181:user_src/soft_tattu.c **** 182:user_src/soft_tattu.c **** 183:user_src/soft_tattu.c **** void CCITT_CRC_ARRAY(uint8_t const * bytes, uint16_t len) 184:user_src/soft_tattu.c **** { 603 .loc 1 184 1 604 .cfi_startproc 605 @ args = 0, pretend = 0, frame = 8 606 @ frame_needed = 1, uses_anonymous_args = 0 607 0000 80B5 push {r7, lr} 608 .LCFI16: 609 .cfi_def_cfa_offset 8 610 .cfi_offset 7, -8 611 .cfi_offset 14, -4 612 0002 82B0 sub sp, sp, #8 613 .LCFI17: 614 .cfi_def_cfa_offset 16 615 0004 00AF add r7, sp, #0 616 .LCFI18: 617 .cfi_def_cfa_register 7 ARM GAS C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s page 15 618 0006 7860 str r0, [r7, #4] 619 0008 0B46 mov r3, r1 620 000a 7B80 strh r3, [r7, #2] @ movhi 185:user_src/soft_tattu.c **** while (len--) CCITT_CRCStep(*bytes++); 621 .loc 1 185 11 622 000c 06E0 b .L27 623 .L28: 624 .loc 1 185 41 discriminator 2 625 000e 7B68 ldr r3, [r7, #4] 626 0010 5A1C adds r2, r3, #1 627 0012 7A60 str r2, [r7, #4] 628 .loc 1 185 21 discriminator 2 629 0014 1B78 ldrb r3, [r3] @ zero_extendqisi2 630 0016 1846 mov r0, r3 631 0018 FFF7FEFF bl CCITT_CRCStep 632 .L27: 633 .loc 1 185 15 discriminator 1 634 001c 7B88 ldrh r3, [r7, #2] 635 001e 5A1E subs r2, r3, #1 636 0020 7A80 strh r2, [r7, #2] @ movhi 637 .loc 1 185 11 discriminator 1 638 0022 002B cmp r3, #0 639 0024 F3D1 bne .L28 186:user_src/soft_tattu.c **** } 640 .loc 1 186 1 641 0026 00BF nop 642 0028 00BF nop 643 002a 0837 adds r7, r7, #8 644 .LCFI19: 645 .cfi_def_cfa_offset 8 646 002c BD46 mov sp, r7 647 .LCFI20: 648 .cfi_def_cfa_register 13 649 @ sp needed 650 002e 80BD pop {r7, pc} 651 .cfi_endproc 652 .LFE133: 654 .text 655 .Letext0: 656 .file 2 "d:\\arm-gcc\\arm-none-eabi\\include\\machine\\_default_types.h" 657 .file 3 "d:\\arm-gcc\\arm-none-eabi\\include\\sys\\_stdint.h" 658 .file 4 "user_inc/common.h" 659 .file 5 "user_inc/soft_tattu.h" ARM GAS C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s page 16 DEFINED SYMBOLS *ABS*:00000000 soft_tattu.c C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s:24 .bss.tattu_device1:00000000 tattu_device1 C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s:21 .bss.tattu_device1:00000000 $d C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s:31 .bss.tattu_device2:00000000 tattu_device2 C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s:28 .bss.tattu_device2:00000000 $d C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s:34 .text.TattuCanRecvHookFunction:00000000 $t C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s:40 .text.TattuCanRecvHookFunction:00000000 TattuCanRecvHookFunction C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s:443 .text.CCITT_CRC16Init:00000000 CCITT_CRC16Init C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s:423 .text.TattuCanRecvHookFunction:00000288 $d C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s:434 .bss.CCITT_CRC16:00000000 CCITT_CRC16 C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s:431 .bss.CCITT_CRC16:00000000 $d C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s:437 .text.CCITT_CRC16Init:00000000 $t C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s:601 .text.CCITT_CRC_ARRAY:00000000 CCITT_CRC_ARRAY C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s:485 .text.CCITT_CRC16Init:00000028 $d C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s:490 .text.CCITT_CRCStep:00000000 $t C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s:496 .text.CCITT_CRCStep:00000000 CCITT_CRCStep C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s:590 .text.CCITT_CRCStep:0000006c $d C:\Users\zl835\AppData\Local\Temp\ccPCUDQi.s:595 .text.CCITT_CRC_ARRAY:00000000 $t UNDEFINED SYMBOLS memset memcpy HAL_GetTick