📄 dataprocess.lst
字号:
00000018 END_INIT
ARM COMPILER V2.42, DataProcess 17/01/09 22:24:15 PAGE 5
00000018 ratioint:
00000018 DS 4
0000001C countadjust:
0000001C BEGIN_INIT
0000001C 00000BB8 DD 0xBB8
00000020 END_INIT
00000020 utem:
00000020 DS 4
00000024 uco2tem:
00000024 DS 4
00000028 ureftem:
00000028 DS 4
0000002C ratiointendh:
0000002C BEGIN_INIT
0000002C 00 DB 0x0
0000002D END_INIT
0000002D ratiointendl:
0000002D BEGIN_INIT
0000002D 00 DB 0x0
0000002E END_INIT
0000002E rr1:
0000002E BEGIN_INIT
0000002E 00 DB 0x0
0000002F END_INIT
0000002F rr2:
0000002F BEGIN_INIT
0000002F 00 DB 0x0
00000030 END_INIT
00000030 factor:
00000030 DS 1
00000031 a2:
00000031 DS 1
00000032 a1:
00000032 DS 1
00000033 flagadjust:
00000033 BEGIN_INIT
00000033 01 DB 0x1
00000034 END_INIT
00000034 text:
00000034 BEGIN_INIT
00000034 00 DB 0x0
00000035 END_INIT
00000035 ttflag:
00000035 DS 1
*** CODE SEGMENT '?PR?DataProc?T?DataProcess':
31: void DataProc() //数据采集数据处理
00000000 B5F0 PUSH {R4-R7,LR}
00000002 B089 SUB R13,#0x24
32: {
00000004 ; SCOPE-START
33: float baseline = 950; //基线值
00000004 4800 LDR R5,=0x446D8000
00000006 ---- Variable 'baseline' assigned to Register 'R5' ----
34: float baseline2 = 0; //基线参考值
00000006 2700 MOV R7,#0x0
00000008 ---- Variable 'baseline2' assigned to Register 'R7' ----
35: float tempslop = 0.5; //co2浓度计算用的温度补偿系数(可改动系数*****************************)
00000008 4800 LDR R2,=0x3F000000
0000000A ---- Variable 'tempslop' assigned to Register 'R2' ----
39: int count = 1000; //评价计算用的平均次数
0000000A 48FA LDR R0,=0x3E8
0000000C 9002 STR R0,[R13,#0x8] ; count
40: int lapcount = 1; //time int
0000000E 2001 MOV R0,#0x1
00000010 9003 STR R0,[R13,#0xC] ; lapcount
ARM COMPILER V2.42, DataProcess 17/01/09 22:24:15 PAGE 6
41: int rr = 16; ////呼吸率
00000012 2010 MOV R0,#0x10
00000014 9004 STR R0,[R13,#0x10] ; rr
42: int basetemp = 3100; //预设基准温度
00000016 4800 LDR R0,=0xC1C
00000018 9005 STR R0,[R13,#0x14] ; basetemp
45: unsigned char rrflag = 0; //呼吸率计算用的标志位
0000001A 2100 MOV R1,#0x0
0000001C A806 ADD R0,R13,#0x18
0000001E 7001 STRB R1,[R0,#0x0] ; rrflag
46: unsigned char rrflag2 = 0;
00000020 A807 ADD R0,R13,#0x1C
00000022 7001 STRB R1,[R0,#0x0] ; rrflag2
47: unsigned char lapflag = 0; //出现呼吸间隔的标志位
00000024 A808 ADD R0,R13,#0x20
00000026 7001 STRB R1,[R0,#0x0] ; lapflag
49: unsigned char flagtemp = 1;
00000028 2401 MOV R4,#0x1
0000002A ---- Variable 'flagtemp' assigned to Register 'R4' ----
51: uco2=uco2*3/4+((float)uco2tem)/4; //对uco2,uref进行平均预处理
0000002A 4800 LDR R1,=0x40400000
0000002C 9800 LDR R0,[R13,#0x0] ; uco2
0000002E F7FF BL ?C?FPMUL?T ; T=0x0001 (1) ; ?C?FPMUL?T
00000030 FFE7 BL ?C?FPMUL?T ; T=0x0001 (2) ; ?C?FPMUL?T
00000032 4800 LDR R6,=0x40800000
00000034 1C31 MOV R1,R6
00000036 F7FF BL ?C?FPDIV?T ; T=0x0001 (1) ; ?C?FPDIV?T
00000038 FFE3 BL ?C?FPDIV?T ; T=0x0001 (2) ; ?C?FPDIV?T
0000003A 1C03 MOV R3,R0
0000003C 4800 LDR R0,=uco2tem ; uco2tem
0000003E 6800 LDR R0,[R0,#0x0] ; uco2tem
00000040 F7FF BL ?C?FCAST?T ; T=0x0001 (1) ; ?C?FCAST?T
00000042 FFDE BL ?C?FCAST?T ; T=0x0001 (2) ; ?C?FCAST?T
00000044 1C31 MOV R1,R6
00000046 F7FF BL ?C?FPDIV?T ; T=0x0001 (1) ; ?C?FPDIV?T
00000048 FFDB BL ?C?FPDIV?T ; T=0x0001 (2) ; ?C?FPDIV?T
0000004A 1C01 MOV R1,R0
0000004C 1C18 MOV R0,R3
0000004E F7FF BL ?C?FPADD?T ; T=0x0001 (1) ; ?C?FPADD?T
00000050 FFD7 BL ?C?FPADD?T ; T=0x0001 (2) ; ?C?FPADD?T
00000052 9000 STR R0,[R13,#0x0] ; uco2
52: uref=uref*3/4+((float)ureftem)/4;
00000054 4800 LDR R1,=0x40400000
00000056 9801 LDR R0,[R13,#0x4] ; uref
00000058 F7FF BL ?C?FPMUL?T ; T=0x0001 (1) ; ?C?FPMUL?T
0000005A FFD2 BL ?C?FPMUL?T ; T=0x0001 (2) ; ?C?FPMUL?T
0000005C 4800 LDR R1,=0x40800000
0000005E F7FF BL ?C?FPDIV?T ; T=0x0001 (1) ; ?C?FPDIV?T
00000060 FFCF BL ?C?FPDIV?T ; T=0x0001 (2) ; ?C?FPDIV?T
00000062 1C03 MOV R3,R0
00000064 4800 LDR R0,=ureftem ; ureftem
00000066 6800 LDR R0,[R0,#0x0] ; ureftem
00000068 F7FF BL ?C?FCAST?T ; T=0x0001 (1) ; ?C?FCAST?T
0000006A FFCA BL ?C?FCAST?T ; T=0x0001 (2) ; ?C?FCAST?T
0000006C 4800 LDR R1,=0x40800000
0000006E F7FF BL ?C?FPDIV?T ; T=0x0001 (1) ; ?C?FPDIV?T
00000070 FFC7 BL ?C?FPDIV?T ; T=0x0001 (2) ; ?C?FPDIV?T
00000072 1C01 MOV R1,R0
00000074 1C18 MOV R0,R3
00000076 F7FF BL ?C?FPADD?T ; T=0x0001 (1) ; ?C?FPADD?T
00000078 FFC3 BL ?C?FPADD?T ; T=0x0001 (2) ; ?C?FPADD?T
0000007A 9001 STR R0,[R13,#0x4] ; uref
53: ratio=(uco2/uref)*1000-(utem*0.8-basetemp)*tempslop; //CO2浓度的基本计算式
0000007C 4800 LDR R0,=utem ; utem
0000007E 6800 LDR R0,[R0,#0x0] ; utem
00000080 F7FF BL ?C?FCAST?T ; T=0x0001 (1) ; ?C?FCAST?T
ARM COMPILER V2.42, DataProcess 17/01/09 22:24:15 PAGE 7
00000082 FFBE BL ?C?FCAST?T ; T=0x0001 (2) ; ?C?FCAST?T
00000084 4800 LDR R1,=0x3F4CCCCD
00000086 F7FF BL ?C?FPMUL?T ; T=0x0001 (1) ; ?C?FPMUL?T
00000088 FFBB BL ?C?FPMUL?T ; T=0x0001 (2) ; ?C?FPMUL?T
0000008A 1C03 MOV R3,R0
0000008C 9805 LDR R0,[R13,#0x14] ; basetemp
0000008E F7FF BL ?C?FCAST?T ; T=0x0001 (1) ; ?C?FCAST?T
00000090 FFB7 BL ?C?FCAST?T ; T=0x0001 (2) ; ?C?FCAST?T
00000092 1C01 MOV R1,R0
00000094 1C18 MOV R0,R3
00000096 F7FF BL ?C?FPSUB?T ; T=0x0001 (1) ; ?C?FPSUB?T
00000098 FFB3 BL ?C?FPSUB?T ; T=0x0001 (2) ; ?C?FPSUB?T
0000009A 1C11 MOV R1,R2 ; tempslop
0000009C F7FF BL ?C?FPMUL?T ; T=0x0001 (1) ; ?C?FPMUL?T
0000009E FFB0 BL ?C?FPMUL?T ; T=0x0001 (2) ; ?C?FPMUL?T
000000A0 1C02 MOV R2,R0
000000A2 9901 LDR R1,[R13,#0x4] ; uref
000000A4 9800 LDR R0,[R13,#0x0] ; uco2
000000A6 F7FF BL ?C?FPDIV?T ; T=0x0001 (1) ; ?C?FPDIV?T
000000A8 FFAB BL ?C?FPDIV?T ; T=0x0001 (2) ; ?C?FPDIV?T
000000AA 4800 LDR R1,=0x447A0000
000000AC F7FF BL ?C?FPMUL?T ; T=0x0001 (1) ; ?C?FPMUL?T
000000AE FFA8 BL ?C?FPMUL?T ; T=0x0001 (2) ; ?C?FPMUL?T
000000B0 1C11 MOV R1,R2
000000B2 F7FF BL ?C?FPSUB?T ; T=0x0001 (1) ; ?C?FPSUB?T
000000B4 FFA5 BL ?C?FPSUB?T ; T=0x0001 (2) ; ?C?FPSUB?T
000000B6 1C06 MOV R6,R0 ; ratio
000000B8 ---- Variable 'ratio' assigned to Register 'R6' ----
56: if(countadjust != 0){
000000B8 4800 LDR R0,=countadjust ; countadjust
000000BA 6802 LDR R2,[R0,#0x0] ; countadjust
000000BC 2A00 CMP R2,#0x0
000000BE D100 BEQ $+4
000000C0 E0BE B L_1 ; T=0x00000240
57: if(countadjust > 1000){
000000C4 48FA LDR R0,=0x3E8
000000C6 4282 CMP R2,R0
000000C8 D80A BHI L_3 ; T=0x000000E0
60: baseline2 = baseline2 + ratio/count; //10秒进行平均处理,得到新基准baseline2
000000CA 9802 LDR R0,[R13,#0x8] ; count
000000CC F7FF BL ?C?FCAST?T ; T=0x0001 (1) ; ?C?FCAST?T
000000CE FF98 BL ?C?FCAST?T ; T=0x0001 (2) ; ?C?FCAST?T
000000D0 1C01 MOV R1,R0
000000D2 1C30 MOV R0,R6 ; ratio
000000D4 F7FF BL ?C?FPDIV?T ; T=0x0001 (1) ; ?C?FPDIV?T
000000D6 FF94 BL ?C?FPDIV?T ; T=0x0001 (2) ; ?C?FPDIV?T
000000D8 1C01 MOV R1,R0
000000DA 1C38 MOV R0,R7 ; baseline2
000000DC F7FF BL ?C?FPADD?T ; T=0x0001 (1) ; ?C?FPADD?T
000000DE FF90 BL ?C?FPADD?T ; T=0x0001 (2) ; ?C?FPADD?T
000000E0 1C07 MOV R7,R0 ; baseline2
61: }
000000E2 L_3:
62: countadjust--;
000000E2 4800 LDR R0,=countadjust ; countadjust
000000E4 1C11 MOV R1,R2
000000E6 3901 SUB R1,#0x1
000000E8 6001 STR R1,[R0,#0x0] ; countadjust
63: if(countadjust==1001&&flagtemp==1){
000000EA 4800 LDR R0,=countadjust ; countadjust
000000EC 6800 LDR R0,[R0,#0x0] ; countadjust
000000EE 4800 LDR R1,=0x3E9
000000F0 4288 CMP R0,R1
000000F2 D10C BNE L_4 ; T=0x0000010E
000000F4 1C20 MOV R0,R4 ; flagtemp
000000F6 0600 LSL R0,R0,#0x18 ; flagtemp
ARM COMPILER V2.42, DataProcess 17/01/09 22:24:15 PAGE 8
000000F8 0E00 LSR R0,R0,#0x18
000000FA 2801 CMP R0,#0x1
000000FC D107 BNE L_4 ; T=0x0000010E
64: utem=ADCChannel(3); //在20秒末取温度值,作为basetemp
000000FE 2003 MOV R0,#0x3
00000100 F7FF BL ADCChannel?T ; T=0x0001 (1)
00000102 FF7E BL ADCChannel?T ; T=0x0001 (2)
00000104 4800 LDR R1,=utem ; utem
00000106 6008 STR R0,[R1,#0x0] ; utem
65: basetemp=utem;
00000108 4800 LDR R0,=utem ; utem
0000010A 6800 LDR R0,[R0,#0x0] ; utem
0000010C 9005 STR R0,[R13,#0x14] ; basetemp
66: flagtemp=0;
0000010E 2400 MOV R4,#0x0
67: }
00000110 L_4:
68: if(flagadjust==0&&(abs(ratio-baseline)>55)){
00000110 4800 LDR R0,=flagadjust ; flagadjust
00000112 7800 LDRB R0,[R0,#0x0] ; flagadjust
00000114 2800 CMP R0,#0x0
00000116 D114 BNE L_5 ; T=0x00000142
00000118 1C29 MOV R1,R5 ; baseline
0000011A 1C30 MOV R0,R6 ; ratio
0000011C F7FF BL ?C?FPSUB?T ; T=0x0001 (1) ; ?C?FPSUB?T
0000011E FF70 BL ?C?FPSUB?T ; T=0x0001 (2) ; ?C?FPSUB?T
00000120 F7FF BL ?C?CASTF?T ; T=0x0001 (1) ; ?C?CASTF?T
00000122 FF6E BL ?C?CASTF?T ; T=0x0001 (2) ; ?C?CASTF?T
00000124 F7FF BL abs?T ; T=0x0001 (1)
00000126 FF6C BL abs?T ; T=0x0001 (2)
00000128 2837 CMP R0,#0x37 ; abs?T
0000012A DD0A BLE L_5 ; T=0x00000142
69: rrflag=1;
0000012C 2101 MOV R1,#0x1
0000012E A806 ADD R0,R13,#0x18
00000130 7001 STRB R1,[R0,#0x0] ; rrflag
70: lapflag=1; //
00000132 A808 ADD R0,R13,#0x20
00000134 7001 STRB R1,[R0,#0x0] ; lapflag
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -