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

📄 filter.lst

📁 基于陀螺仪原理的惯性导航程序 用于测量量角速度
💻 LST
字号:
ARM COMPILER V2.53,  filter                                                                22/09/07  23:08:05  PAGE 1   


ARM COMPILER V2.53, COMPILATION OF MODULE filter
OBJECT MODULE PLACED IN filter.OBJ
COMPILER INVOKED BY: D:\Keil\ARM\BIN\CA.exe filter.c ARM BROWSE DEBUG TABS(4) 

stmt  level    source

    1          /**********************************************************************
    2            filter.c file
    3            作者:lig&lij
    4            建立日期:2006-4-25
    5            修改日期:2006-4-25
    6            版本:V1.0
    7          **********************************************************************/
    8          
    9          #include <ADuC7020.H>
   10          #include"stdio.h"
   11          #include "my_type.h"
   12          #include "LED.H"
   13          #include "interrupt.h"
   14          #include "Timer.h"
   15          #include "UART.H"
   16          #include "ADC.h"
   17          #include "others.h"
   18          
   19          #define LEN  6   //移动算术平均的个数+2=SHIFT<<2+2
   20          #define SHIFT 2   //2^SHIFT
   21          ///////////////////////////////////////////////////
   22          //extern  uint16  AD_value[5];   
   23          
   24          ///////////////////////////////////////////////////
   25          uint8 pdata;    //移动指针
   26          uint8 pmax,pmin;   //记录数据表中最大值和最小值的位置,
   27                 //在一般的数据采集系统中,数据的长度>=8,
   28                 //因此用指针记录而不是直接记录最大值和最小值
   29          uint16 datas[LEN];
   30          
   31          uint16 szlb(uint16 _data)
   32          {  
   33   1      /****************************/
   34   1      /* 在调用此子程序前必须对 */
   35   1      /* pdata,datas[]数组,  */
   36   1      /* pmax,pmin进行初始化  */
   37   1      /****************************/
   38   1      
   39   1       uint8 i;
   40   1       uint32 average1=0;
   41   1       uint16 average=0;  //清零,用来计算平均值
   42   1       pdata=(pdata+1)%LEN; //指针下标在0到LEN-1上滑动
   43   1       datas[pdata]=_data;  //采样所得数据存入数据表中
   44   1       for(i=0;i<LEN;i++)
   45   1               average1+=datas[i]; //求所有数据总和
   46   1      
   47   1      /*******去除被认为是脉冲的数据******/
   48   1       if(_data>datas[pmax])
   49   1            pmax=pdata;   //得到最大值的指针
   50   1       else if(_data<datas[pmin])
   51   1            pmin=pdata;   //得到最小值的指针
   52   1       if(pdata==pmax)   //如果当前输入值将存入当前最大值的位置时
   53   1       {      //由以上方法将不可行,必须从其他位置中查找极值
   54   2            for(i=0;i<LEN;i++)
   55   2                if(datas[i]>datas[pmax])
   56   2                pmax=i;
   57   2       }
   58   1       else if(pdata==pmin)//如果当前输入值将存入当前最大值的位置时
   59   1       {      //由以上方法将不可行,必须从其他位置中查找极值
ARM COMPILER V2.53,  filter                                                                22/09/07  23:08:05  PAGE 2   

   60   2           for(i=0;i<LEN;i++)
   61   2                if(datas[i]<datas[pmin])
   62   2                 pmin=i;
   63   2       }
   64   1       average=average1-datas[pmax]-datas[pmin];//减去脉冲
   65   1      
   66   1       return (average>>SHIFT);    //求算术平均值
   67   1      }
ARM COMPILER V2.53,  filter                                                                22/09/07  23:08:05  PAGE 3   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE32 (?C?SDIV?A)



*** PUBLICS:
 PUBLIC         szlb?A
 PUBLIC         pdata
 PUBLIC         pmax
 PUBLIC         pmin
 PUBLIC         datas



*** DATA SEGMENT '?DT0?filter':
 00000000          datas:
 00000000            DS          12
 0000000C          pdata:
 0000000C            DS          1
 0000000D          pmax:
 0000000D            DS          1
 0000000E          pmin:
 0000000E            DS          1



*** CODE SEGMENT '?PR?szlb?A?filter':
   31: uint16 szlb(uint16 _data)
 00000000  E92D40F0  STMDB       R13!,{R4-R7,LR}
 00000004  E1A07000  MOV         R7,R0 ; _data
 00000008  ---- Variable '_data' assigned to Register 'R7' ----
   32: {  
 00000008            ; SCOPE-START
   40:  uint32 average1=0;
 00000008  E3A03000  MOV         R3,#0x0
 0000000C  ---- Variable 'average1' assigned to Register 'R3' ----
   41:  uint16 average=0;  //清零,用来计算平均值
 0000000C  E3A02000  MOV         R2,#0x0
 00000010  ---- Variable 'average' assigned to Register 'R2' ----
   42:  pdata=(pdata+1)%LEN; //指针下标在0到LEN-1上滑动
 00000010  E5100000  LDR         R0,=pdata ; pdata
 00000014  E5D00000  LDRB        R0,[R0,#0x0] ; pdata
 00000018  E2800001  ADD         R0,R0,#0x0001
 0000001C  E3A01006  MOV         R1,#0x6
 00000020  EBFFFFF6  BL          ?C?SDIV?A  ; Targ=0x0 ; ?C?SDIV?A
 00000024  E1A01000  MOV         R1,R0
 00000028  E1A01C01  MOV         R1,R1,LSL #24
 0000002C  E1A01C21  MOV         R1,R1,LSR #24
 00000030  E5100000  LDR         R0,=pdata ; pdata
 00000034  E5C01000  STRB        R1,[R0,#0x0] ; pdata
   43:  datas[pdata]=_data;  //采样所得数据存入数据表中
 00000038  E1A00007  MOV         R0,R7 ; _data
 0000003C  E5101000  LDR         R1,=pdata ; pdata
 00000040  E5D16000  LDRB        R6,[R1,#0x0] ; pdata
 00000044  E1A04006  MOV         R4,R6
 00000048  E1A04084  MOV         R4,R4,LSL #1
 0000004C  E5101000  LDR         R1,=datas ; datas
 00000050  E18100B4  STRH        R0,[R1,R4]
   44:  for(i=0;i<LEN;i++)
 00000054  E3A04000  MOV         R4,#0x0
 00000058  E1A01004  MOV         R1,R4 ; i
 0000005C  ---- Variable 'i' assigned to Register 'R1' ----
 0000005C  EA000008  B           L_3  ; Targ=0x84
 00000060          L_4:
   45:          average1+=datas[i]; //求所有数据总和
 00000060  E1A00001  MOV         R0,R1 ; i
 00000064  E1A05C00  MOV         R5,R0,LSL #24 ; i
 00000068  E1A05C25  MOV         R5,R5,LSR #24
 0000006C  E1A05085  MOV         R5,R5,LSL #1
ARM COMPILER V2.53,  filter                                                                22/09/07  23:08:05  PAGE 4   

 00000070  E5100000  LDR         R0,=datas ; datas
 00000074  E19000B5  LDRH        R0,[R0,R5]
 00000078  E0833000  ADD         R3,R3,R0 ; average1
 0000007C  E2811001  ADD         R1,R1,#0x0001 ; i
 00000080  E20110FF  AND         R1,R1,#0x00FF
 00000084          L_3:
 00000084  E1A00001  MOV         R0,R1 ; i
 00000088  E1A00C00  MOV         R0,R0,LSL #24 ; i
 0000008C  E1A00C20  MOV         R0,R0,LSR #24
 00000090  E3500006  CMP         R0,#0x0006
 00000094  BAFFFFF1  BLT         L_4  ; Targ=0x60
   48:  if(_data>datas[pmax])
 00000098  E5100000  LDR         R0,=pmax ; pmax
 0000009C  E5D00000  LDRB        R0,[R0,#0x0] ; pmax
 000000A0  E1A05000  MOV         R5,R0
 000000A4  E1A05085  MOV         R5,R5,LSL #1
 000000A8  E5100000  LDR         R0,=datas ; datas
 000000AC  E19000B5  LDRH        R0,[R0,R5]
 000000B0  E1A05000  MOV         R5,R0
 000000B4  E1A00007  MOV         R0,R7 ; _data
 000000B8  E1A00800  MOV         R0,R0,LSL #16 ; _data
 000000BC  E1A00820  MOV         R0,R0,LSR #16
 000000C0  E1500005  CMP         R0,R5
 000000C4  9A000002  BLS         L_6  ; Targ=0xD4
   49:       pmax=pdata;   //得到最大值的指针
 000000C8  E5100000  LDR         R0,=pmax ; pmax
 000000CC  E5C06000  STRB        R6,[R0,#0x0] ; pmax
 000000D0  EA00000D  B           L_7  ; Targ=0x10C
 000000D4          L_6:
   50:  else if(_data<datas[pmin])
 000000D4  E5100000  LDR         R0,=pmin ; pmin
 000000D8  E5D00000  LDRB        R0,[R0,#0x0] ; pmin
 000000DC  E1A05000  MOV         R5,R0
 000000E0  E1A05085  MOV         R5,R5,LSL #1
 000000E4  E5100000  LDR         R0,=datas ; datas
 000000E8  E19000B5  LDRH        R0,[R0,R5]
 000000EC  E1A05000  MOV         R5,R0
 000000F0  E1A00007  MOV         R0,R7 ; _data
 000000F4  E1A00800  MOV         R0,R0,LSL #16 ; _data
 000000F8  E1A00820  MOV         R0,R0,LSR #16
 000000FC  E1500005  CMP         R0,R5
 00000100  2A000001  BCS         L_7  ; Targ=0x10C
   51:       pmin=pdata;   //得到最小值的指针
 00000104  E5100000  LDR         R0,=pmin ; pmin
 00000108  E5C06000  STRB        R6,[R0,#0x0] ; pmin
 0000010C          L_7:
   52:  if(pdata==pmax)   //如果当前输入值将存入当前最大值的位置时
 0000010C  E5100000  LDR         R0,=pmax ; pmax
 00000110  E5D00000  LDRB        R0,[R0,#0x0] ; pmax
 00000114  E1A05000  MOV         R5,R0
 00000118  E1A00006  MOV         R0,R6
 0000011C  E1500005  CMP         R0,R5
 00000120  1A00001B  BNE         L_9  ; Targ=0x194
   54:       for(i=0;i<LEN;i++)
 00000124  E1A01004  MOV         R1,R4 ; i
 00000128  EA000013  B           L_12  ; Targ=0x17C
 0000012C          L_13:
   55:           if(datas[i]>datas[pmax])
 0000012C  E5105000  LDR         R5,=pmax ; pmax
 00000130  E5D55000  LDRB        R5,[R5,#0x0] ; pmax
 00000134  E1A06005  MOV         R6,R5
 00000138  E1A06086  MOV         R6,R6,LSL #1
 0000013C  E5105000  LDR         R5,=datas ; datas
 00000140  E19550B6  LDRH        R5,[R5,R6]
 00000144  E1A06005  MOV         R6,R5
 00000148  E1A05001  MOV         R5,R1 ; i
ARM COMPILER V2.53,  filter                                                                22/09/07  23:08:05  PAGE 5   

 0000014C  E1A07C05  MOV         R7,R5,LSL #24 ; i
 00000150  E1A07C27  MOV         R7,R7,LSR #24
 00000154  E1A07087  MOV         R7,R7,LSL #1
 00000158  E5105000  LDR         R5,=datas ; datas
 0000015C  E19550B7  LDRH        R5,[R5,R7]
 00000160  E1550006  CMP         R5,R6
 00000164  9A000002  BLS         L_10  ; Targ=0x174
   56:           pmax=i;
 00000168  E1A06001  MOV         R6,R1 ; i
 0000016C  E5105000  LDR         R5,=pmax ; pmax
 00000170  E5C56000  STRB        R6,[R5,#0x0] ; pmax
 00000174          L_10:
 00000174  E2811001  ADD         R1,R1,#0x0001 ; i
 00000178  E20110FF  AND         R1,R1,#0x00FF
 0000017C          L_12:
 0000017C  E1A05001  MOV         R5,R1 ; i
 00000180  E1A05C05  MOV         R5,R5,LSL #24 ; i
 00000184  E1A05C25  MOV         R5,R5,LSR #24
 00000188  E3550006  CMP         R5,#0x0006
 0000018C  BAFFFFE6  BLT         L_13  ; Targ=0x12C
   57:  }
 00000190  EA00001E  B           L_16  ; Targ=0x210
 00000194          L_9:
   58:  else if(pdata==pmin)//如果当前输入值将存入当前最大值的位置时
 00000194  E5105000  LDR         R5,=pmin ; pmin
 00000198  E5D55000  LDRB        R5,[R5,#0x0] ; pmin
 0000019C  E1500005  CMP         R0,R5
 000001A0  1A00001A  BNE         L_16  ; Targ=0x210
   60:      for(i=0;i<LEN;i++)
 000001A4  E1A01004  MOV         R1,R4 ; i
 000001A8  EA000013  B           L_20  ; Targ=0x1FC
 000001AC          L_21:
   61:           if(datas[i]<datas[pmin])
 000001AC  E5100000  LDR         R0,=pmin ; pmin
 000001B0  E5D00000  LDRB        R0,[R0,#0x0] ; pmin
 000001B4  E1A04000  MOV         R4,R0
 000001B8  E1A04084  MOV         R4,R4,LSL #1
 000001BC  E5100000  LDR         R0,=datas ; datas
 000001C0  E19000B4  LDRH        R0,[R0,R4]
 000001C4  E1A04000  MOV         R4,R0
 000001C8  E1A00001  MOV         R0,R1 ; i
 000001CC  E1A05C00  MOV         R5,R0,LSL #24 ; i
 000001D0  E1A05C25  MOV         R5,R5,LSR #24
 000001D4  E1A05085  MOV         R5,R5,LSL #1
 000001D8  E5100000  LDR         R0,=datas ; datas
 000001DC  E19000B5  LDRH        R0,[R0,R5]
 000001E0  E1500004  CMP         R0,R4
 000001E4  2A000002  BCS         L_18  ; Targ=0x1F4
   62:            pmin=i;
 000001E8  E1A04001  MOV         R4,R1 ; i
 000001EC  E5100000  LDR         R0,=pmin ; pmin
 000001F0  E5C04000  STRB        R4,[R0,#0x0] ; pmin
 000001F4          L_18:
 000001F4  E2811001  ADD         R1,R1,#0x0001 ; i
 000001F8  E20110FF  AND         R1,R1,#0x00FF
 000001FC          L_20:
 000001FC  E1A00001  MOV         R0,R1 ; i
 00000200  E1A00C00  MOV         R0,R0,LSL #24 ; i
 00000204  E1A00C20  MOV         R0,R0,LSR #24
 00000208  E3500006  CMP         R0,#0x0006
 0000020C  BAFFFFE6  BLT         L_21  ; Targ=0x1AC
   63:  }
 00000210          L_16:
   64:  average=average1-datas[pmax]-datas[pmin];//减去脉冲
 00000210  E5100000  LDR         R0,=pmax ; pmax
 00000214  E5D00000  LDRB        R0,[R0,#0x0] ; pmax
ARM COMPILER V2.53,  filter                                                                22/09/07  23:08:05  PAGE 6   

 00000218  E1A01000  MOV         R1,R0
 0000021C  E1A01081  MOV         R1,R1,LSL #1
 00000220  E5100000  LDR         R0,=datas ; datas
 00000224  E19000B1  LDRH        R0,[R0,R1]
 00000228  E1A02003  MOV         R2,R3 ; average1
 0000022C  E0422000  SUB         R2,R2,R0 ; average1
 00000230  E5100000  LDR         R0,=pmin ; pmin
 00000234  E5D00000  LDRB        R0,[R0,#0x0] ; pmin
 00000238  E1A01000  MOV         R1,R0
 0000023C  E1A01081  MOV         R1,R1,LSL #1
 00000240  E5100000  LDR         R0,=datas ; datas
 00000244  E19000B1  LDRH        R0,[R0,R1]
 00000248  E0422000  SUB         R2,R2,R0
 0000024C  E1A02802  MOV         R2,R2,LSL #16
 00000250  E1A02822  MOV         R2,R2,LSR #16
   66:  return (average>>SHIFT);    //求算术平均值
 00000254  E1A00002  MOV         R0,R2 ; average
 00000258  E1A00800  MOV         R0,R0,LSL #16 ; average
 0000025C  E1A00820  MOV         R0,R0,LSR #16
 00000260  E1A00120  MOV         R0,R0,LSR #2
 00000264            ; SCOPE-END
 00000264  E8BD00F0  LDMIA       R13!,{R4-R7}
 00000268  E8BD0008  LDMIA       R13!,{R3}
 0000026C  E12FFF13  BX          R3
 00000270          ENDP ; 'szlb?A'



Module Information          Static
----------------------------------
  code size            =    ------
  data size            =        15
  const size           =    ------
End of Module Information.


ARM COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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