搜索
bottom↓
回复: 10

变量被修改的问题

[复制链接]

出0入0汤圆

发表于 2013-10-1 17:23:05 | 显示全部楼层 |阅读模式
LPC4337 + Keil4  Level0优化

通过Debug监视一个局部变量,发现其在一个毫不相干的判断语句后,其值被修改了。
  1.         if (fp->flag & FA__ERROR) return FR_INT_ERR;       
复制代码
上面的代码就是执行后被监视的局部变量值发生变化的语句。在注释后发现其下一条语句依然会把监视的值改掉。
是栈出了问题么?

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2013-10-1 21:02:34 | 显示全部楼层
一般这种问题还是需要自己调试,看汇编代码等,看变量的地址,如果是按正常顺序执行的话,肯定是在操作内存地址的时候变量才会变化。

出0入296汤圆

发表于 2013-10-1 23:02:36 | 显示全部楼层
检查系统栈是否足够大……
如果可能,拉map文件出来,大家才好帮你分析

出0入0汤圆

发表于 2013-10-2 01:41:22 | 显示全部楼层
也许是在线仿真的问题。
写个小程序煤烧进IC里做LED指示看看

出0入0汤圆

 楼主| 发表于 2013-10-2 16:58:36 | 显示全部楼层
Gorgon_Meducer 发表于 2013-10-1 23:02
检查系统栈是否足够大……
如果可能,拉map文件出来,大家才好帮你分析


这个是完整启动文件:

Stack_Size      EQU     0x0007000

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp

; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

;Heap_Size       EQU     0x00008000

Heap_Size       EQU     0x00000000



                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

                                EXTERN xPortSysTickHandler
                                EXTERN xPortPendSVHandler
                                EXTERN vPortSVCHandler

                PRESERVE8
                THUMB

; Vector Table Mapped to Address 0 at Reset

                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors

Sign_Value                EQU                0x5A5A5A5A

__Vectors       DCD     __initial_sp                      ; 0 Top of Stack
                DCD     Reset_Handler                     ; 1 Reset Handler
                DCD     NMI_Handler                       ; 2 NMI Handler
                DCD     HardFault_Handler                 ; 3 Hard Fault Handler
                DCD     MemManage_Handler                 ; 4 MPU Fault Handler
                DCD     BusFault_Handler                  ; 5 Bus Fault Handler
                DCD     UsageFault_Handler                ; 6 Usage Fault Handler
                DCD     Sign_Value                        ; 7 Reserved
                DCD     UnHandled_Vector                   ; 8 Reserved
                DCD     UnHandled_Vector                   ; 9 Reserved
                DCD     UnHandled_Vector                  ; 10 Reserved
                DCD     vPortSVCHandler                    ; 11 FreeRTOS SVCall Handler
                DCD     DebugMon_Handler                  ; 12 Debug Monitor Handler
                DCD     UnHandled_Vector                  ; 13 Reserved
                DCD     xPortPendSVHandler                 ; 14 FreeRTOS PendSV Handler
                DCD     xPortSysTickHandler                ; 15 FreeRTOS SysTick Handler

                ; External Interrupts
                                DCD                DAC_IRQHandler                                 ; 16 D/A Converter
                                DCD                MX_CORE_IRQHandler                        ; 17 M0/M4 IRQ handler (LPC43XX ONLY)
                                DCD                DMA_IRQHandler                                ; 18 General Purpose DMA
                                DCD                UnHandled_Vector                        ; 19 Reserved
                                DCD                FLASHEEPROM_IRQHandler                ; 20 ORed flash bank A, flash bank B, EEPROM interrupts
                                DCD                ETH_IRQHandler                                ; 21 Ethernet
                                DCD                SDIO_IRQHandler                                ; 22 SD/MMC
                                DCD                LCD_IRQHandler                                ; 23 LCD
                                DCD                USB0_IRQHandler                                ; 24 USB0
                                DCD                USB1_IRQHandler                                ; 25 USB1
                                DCD                SCT_IRQHandler                                ; 26 State Configurable Timer
                                DCD                RIT_IRQHandler                                ; 27 Repetitive Interrupt Timer
                                DCD                TIMER0_IRQHandler                        ; 28 Timer0
                                DCD                TIMER1_IRQHandler                        ; 29 Timer1
                                DCD                TIMER2_IRQHandler                        ; 30 Timer2
                                DCD                TIMER3_IRQHandler                        ; 31 Timer3
                                DCD                MCPWM_IRQHandler                        ; 32 Motor Control PWM
                                DCD                ADC0_IRQHandler                                ; 33 A/D Converter 0
                                DCD                I2C0_IRQHandler                                ; 34 I2C0
                                DCD                I2C1_IRQHandler                                ; 35 I2C1
                                DCD                SPI_IRQHandler                                ; 36 SPI (LPC43XX ONLY)
                                DCD                ADC1_IRQHandler                                ; 37 A/D Converter 1
                                DCD                SSP0_IRQHandler                                ; 38 SSP0
                                DCD                SSP1_IRQHandler                                ; 39 SSP1
                                DCD                UART0_IRQHandler                        ; 40 UART0
                                DCD                UART1_IRQHandler                        ; 41 UART1
                                DCD                UART2_IRQHandler                        ; 42 UART2
                                DCD                UART3_IRQHandler                        ; 43 UART3
                                DCD                I2S0_IRQHandler                                ; 44 I2S0
                                DCD                I2S1_IRQHandler                                ; 45 I2S1
                                DCD                SPIFI_IRQHandler                        ; 46 SPI Flash Interface
                                DCD                SGPIO_IRQHandler                        ; 47 SGPIO (LPC43XX ONLY)
                                DCD                GPIO0_IRQHandler                        ; 48 GPIO0
                                DCD                GPIO1_IRQHandler                        ; 49 GPIO1
                                DCD                GPIO2_IRQHandler                        ; 50 GPIO2
                                DCD                GPIO3_IRQHandler                        ; 51 GPIO3
                                DCD                GPIO4_IRQHandler                        ; 52 GPIO4
                                DCD                GPIO5_IRQHandler                        ; 53 GPIO5
                                DCD                GPIO6_IRQHandler                        ; 54 GPIO6
                                DCD                GPIO7_IRQHandler                        ; 55 GPIO7
                                DCD                GINT0_IRQHandler                        ; 56 GINT0
                                DCD                GINT1_IRQHandler                        ; 57 GINT1
                                DCD                EVRT_IRQHandler                                ; 58 Event Router
                                DCD                CAN1_IRQHandler                                ; 59 C_CAN1
                                DCD                UnHandled_Vector                        ; 60 Reserved
                                DCD                VADC_IRQHandler                         ; 61 VADC
                                DCD                ATIMER_IRQHandler                        ; 62 ATIMER
                                DCD                RTC_IRQHandler                                ; 63 RTC
                                DCD                UnHandled_Vector                        ; 64 Reserved
                                DCD                WDT_IRQHandler                                ; 65 WDT
                                DCD                UnHandled_Vector                        ; 66 M0s
                                DCD                CAN0_IRQHandler                                ; 67 C_CAN0
                                DCD         QEI_IRQHandler                                ; 68 QEI


;                IF      :LNOT::DEF:NO_CRP
;                AREA    |.ARM.__at_0x02FC|, CODE, READONLY
;CRP_Key         DCD     0xFFFFFFFF
;                ENDIF

                AREA    |.text|, CODE, READONLY

; Reset Handler

Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                                IMPORT  SystemInit
                                LDR                R0, =SystemInit
                                BLX                R0
                LDR     R0, =__main
                BX      R0
                ENDP

; Dummy Exception Handlers (infinite loops which can be modified)

NMI_Handler     PROC
                EXPORT  NMI_Handler               [WEAK]
                B       .
                ENDP
HardFault_Handler\
                PROC
                EXPORT  HardFault_Handler         [WEAK]
                B       .
                ENDP
MemManage_Handler\
                PROC
                EXPORT  MemManage_Handler         [WEAK]
                B       .
                ENDP
BusFault_Handler\
                PROC
                EXPORT  BusFault_Handler          [WEAK]
                B       .
                ENDP
UsageFault_Handler\
                PROC
                EXPORT  UsageFault_Handler        [WEAK]
                B       .
                ENDP
SVC_Handler     PROC
                EXPORT  SVC_Handler               [WEAK]
                B       .
                ENDP
DebugMon_Handler\
                PROC
                EXPORT  DebugMon_Handler          [WEAK]
                B       .
                ENDP
PendSV_Handler  PROC
                EXPORT  PendSV_Handler            [WEAK]
                B       .
                ENDP
SysTick_Handler PROC
                EXPORT  SysTick_Handler           [WEAK]
                B       .
                ENDP
UnHandled_Vector        PROC
                EXPORT  UnHandled_Vector          [WEAK]
                B       .
                ENDP

Default_Handler PROC

                EXPORT DAC_IRQHandler                     [WEAK]
                EXPORT MX_CORE_IRQHandler            [WEAK]
                                EXPORT DMA_IRQHandler                    [WEAK]
                EXPORT FLASHEEPROM_IRQHandler        [WEAK]
                                EXPORT ETH_IRQHandler                    [WEAK]
                                EXPORT SDIO_IRQHandler                    [WEAK]
                                EXPORT LCD_IRQHandler                    [WEAK]
                                EXPORT USB0_IRQHandler                    [WEAK]
                                EXPORT USB1_IRQHandler                    [WEAK]
                                EXPORT SCT_IRQHandler                    [WEAK]
                                EXPORT RIT_IRQHandler                    [WEAK]
                                EXPORT TIMER0_IRQHandler            [WEAK]
                                EXPORT TIMER1_IRQHandler            [WEAK]
                                EXPORT TIMER2_IRQHandler            [WEAK]
                                EXPORT TIMER3_IRQHandler            [WEAK]
                                EXPORT MCPWM_IRQHandler                    [WEAK]
                                EXPORT ADC0_IRQHandler                    [WEAK]
                                EXPORT I2C0_IRQHandler                    [WEAK]
                                EXPORT I2C1_IRQHandler                    [WEAK]
                EXPORT SPI_IRQHandler                    [WEAK]
                                EXPORT ADC1_IRQHandler                    [WEAK]
                                EXPORT SSP0_IRQHandler                    [WEAK]
                                EXPORT SSP1_IRQHandler                    [WEAK]
                                EXPORT UART0_IRQHandler                    [WEAK]
                                EXPORT UART1_IRQHandler                    [WEAK]
                                EXPORT UART2_IRQHandler                    [WEAK]
                                EXPORT UART3_IRQHandler                    [WEAK]
                                EXPORT I2S0_IRQHandler                    [WEAK]
                                EXPORT I2S1_IRQHandler                    [WEAK]
                                EXPORT SPIFI_IRQHandler             [WEAK]
                                EXPORT SGPIO_IRQHandler             [WEAK]
                                EXPORT GPIO0_IRQHandler                [WEAK]
                                EXPORT GPIO1_IRQHandler             [WEAK]
                                EXPORT GPIO2_IRQHandler                [WEAK]
                                EXPORT GPIO3_IRQHandler             [WEAK]
                                EXPORT GPIO4_IRQHandler             [WEAK]
                                EXPORT GPIO5_IRQHandler             [WEAK]
                                EXPORT GPIO6_IRQHandler                [WEAK]
                                EXPORT GPIO7_IRQHandler                [WEAK]
                                EXPORT GINT0_IRQHandler                [WEAK]
                                EXPORT GINT1_IRQHandler                [WEAK]
                                EXPORT EVRT_IRQHandler                    [WEAK]
                                EXPORT CAN1_IRQHandler                    [WEAK]
                                EXPORT VADC_IRQHandler                    [WEAK]
                                EXPORT ATIMER_IRQHandler            [WEAK]
                                EXPORT RTC_IRQHandler                    [WEAK]
                                EXPORT WDT_IRQHandler                    [WEAK]
                                EXPORT CAN0_IRQHandler                    [WEAK]
                                EXPORT QEI_IRQHandler                    [WEAK]

DAC_IRQHandler
MX_CORE_IRQHandler
DMA_IRQHandler
FLASHEEPROM_IRQHandler
ETH_IRQHandler
SDIO_IRQHandler
LCD_IRQHandler
USB0_IRQHandler
USB1_IRQHandler
SCT_IRQHandler
RIT_IRQHandler
TIMER0_IRQHandler
TIMER1_IRQHandler
TIMER2_IRQHandler
TIMER3_IRQHandler
MCPWM_IRQHandler
ADC0_IRQHandler
I2C0_IRQHandler
I2C1_IRQHandler
SPI_IRQHandler
ADC1_IRQHandler
SSP0_IRQHandler
SSP1_IRQHandler
UART0_IRQHandler
UART1_IRQHandler
UART2_IRQHandler
UART3_IRQHandler
I2S0_IRQHandler
I2S1_IRQHandler
SPIFI_IRQHandler
SGPIO_IRQHandler
GPIO0_IRQHandler
GPIO1_IRQHandler
GPIO2_IRQHandler
GPIO3_IRQHandler
GPIO4_IRQHandler
GPIO5_IRQHandler
GPIO6_IRQHandler
GPIO7_IRQHandler
GINT0_IRQHandler
GINT1_IRQHandler
EVRT_IRQHandler
CAN1_IRQHandler
VADC_IRQHandler
ATIMER_IRQHandler
RTC_IRQHandler
WDT_IRQHandler
CAN0_IRQHandler
QEI_IRQHandler

                B       .

                ENDP

                ALIGN

; User Initial Stack & Heap

                IF      :DEF:__MICROLIB

                EXPORT  __initial_sp
                EXPORT  __heap_base
                EXPORT  __heap_limit

                ELSE

                IMPORT  __use_two_region_memory
                EXPORT  __user_initial_stackheap
__user_initial_stackheap

                LDR     R0, =  Heap_Mem
                LDR     R1, =(Stack_Mem + Stack_Size)
                LDR     R2, = (Heap_Mem +  Heap_Size)
                LDR     R3, = Stack_Mem
                BX      LR

                ALIGN

                ENDIF

                                END

出0入0汤圆

 楼主| 发表于 2013-10-2 17:00:26 | 显示全部楼层
Gorgon_Meducer 发表于 2013-10-1 23:02
检查系统栈是否足够大……
如果可能,拉map文件出来,大家才好帮你分析


栈已经分配的很大了 ,堆没用到就没分配。内存一共是136K

出130入129汤圆

发表于 2013-10-2 17:09:21 来自手机 | 显示全部楼层
是否有些变量之间值传递没考虑位长?

出0入296汤圆

发表于 2013-10-2 17:24:11 | 显示全部楼层
wangxiaofei6485 发表于 2013-10-2 17:00
栈已经分配的很大了 ,堆没用到就没分配。内存一共是136K

变量被修改的另外一种情况就是栈过大,直接侵入到bss段或者no_init段了

出0入0汤圆

 楼主| 发表于 2013-10-8 10:14:36 | 显示全部楼层
本帖最后由 wangxiaofei6485 于 2013-10-8 10:17 编辑
Gorgon_Meducer 发表于 2013-10-2 17:24
变量被修改的另外一种情况就是栈过大,直接侵入到bss段或者no_init段了


之前发错了,以为MAP文件就是启动文件。现在重新发一份,麻烦看一下。
附件:完整的map文件


Memory Map of the image

  Image Entry point : 0x1a000115

  Load Region LR_IROM1 (Base: 0x1a000000, Size: 0x00008150, Max: 0x00080000, ABSOLUTE, COMPRESSED[0x0000802c])

    Execution Region RW_IRAM1 (Base: 0x10000000, Size: 0x00000c00, Max: 0x00008000, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x10000000   0x00000c00   Zero   RW         8448    .bss                endpoint.o


    Execution Region RW_RAM3 (Base: 0x10080000, Size: 0x00003200, Max: 0x0000a000, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x10080000   0x00003200   Zero   RW         1524    .bss                board_keil_mcb_18574357.o


    Execution Region ER_IROM1 (Base: 0x1a000000, Size: 0x00008000, Max: 0x00080000, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object
    。。。。。
    Execution Region RW_IRAM2 (Base: 0x20000000, Size: 0x00008cc8, Max: 0x00010000, ABSOLUTE, COMPRESSED[0x0000002c])

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x20000000   0x00000018   Data   RW          421    .data               generichid.o
    0x20000018   0x00000010   Data   RW         1117    .data               drv_lpc43xx.o
    0x20000028   0x00000081   Data   RW         1526    .data               board_keil_mcb_18574357.o
    0x200000a9   0x00000003   PAD
    0x200000ac   0x0000003c   Data   RW         5262    .data               tasks.o
    0x200000e8   0x0000000e   Data   RW         8211    .data               usbtask.o
    0x200000f6   0x00000003   Data   RW         8382    .data               devicestandardreq.o
    0x200000f9   0x00000003   PAD
    0x200000fc   0x00000034   Data   RW         8449    .data               endpoint.o
    0x20000130   0x00000003   Data   RW         8627    .data               usbcontroller.o
    0x20000133   0x00000002   Data   RW         8682    .data               hal_lpc18xx.o
    0x20000135   0x00000001   PAD
    0x20000136   0x00000011   Data   RW         9109    .data               mrfi.o
    0x20000147   0x00000001   PAD
    0x20000148   0x00000006   Data   RW         9594    .data               ff.o
    0x2000014e   0x00000002   PAD
    0x20000150   0x0000003f   Zero   RW          420    .bss                generichid.o
    0x2000018f   0x00000001   PAD
    0x20000190   0x000000fc   Zero   RW         5261    .bss                tasks.o
    0x2000028c   0x0000026c   Zero   RW         7880    .bss                lpc18xx_43xx_emac.o
    0x200004f8   0x00000308   PAD
    0x20000800   0x000012b0   Zero   RW         8825    .bss                endpoint_lpc18xx.o
    0x20001ab0   0x00000014   Zero   RW         8989    .bss                mx25l1606edrv.o
    0x20001ac4   0x00000203   Zero   RW         9107    .bss                mrfi.o
    0x20001cc7   0x00000001   PAD
    0x20001cc8   0x00007000   Zero   RW         1404    STACK               keil_freertos_startup_lpc18xx43xx.o

  Load Region LR_IROM2 (Base: 0x1b000000, Size: 0x0002acc8, Max: 0x00080000, ABSOLUTE)

    Execution Region ER_IROM2 (Base: 0x1b000000, Size: 0x0002acc8, Max: 0x00080000, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x1b000000   0x0002acc8   Data   RO         9844    .constdata          cc936.o
      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   Library Member Name

        92          0          0          0          0          0   __dczerorl2.o
         0          0          0          0          0          0   entry.o
         0          0          0          0          0          0   entry10a.o
         0          0          0          0          0          0   entry11a.o
         8          4          0          0          0          0   entry2.o
         4          0          0          0          0          0   entry5.o
         0          0          0          0          0          0   entry7b.o
         0          0          0          0          0          0   entry8b.o
         8          4          0          0          0          0   entry9a.o
        30          0          0          0          0          0   handlers.o
        36          8          0          0          0         68   init.o
        30          0          0          0          0         68   llshl.o
        32          0          0          0          0         68   llushr.o
        36          0          0          0          0         68   memcpya.o
        36          0          0          0          0        108   memseta.o
      1150         54          0          0          0        352   printf8.o
        98          0          0          0          0         92   uldiv.o
       160         26          0          0          0         92   amic.o
       276         24         64          0          0         96   atmel.o
       220         26          0          0          0         88   chi.o
       184         12          0          0          0         96   eon.o
       188         24          0          0          0         96   esmt.o
       352         44          0          0          0        232   falcon_details.o
       176         20          0          0          0         96   giga.o
       404         28        130          0          0         92   macronix.o
       376         40          0          0          0        184   numonyx.o
       236         24          0          0          0        112   spansion.o
      4848        116         84          0          0       1148   spifi_rom_api.o
       184         26        120          0          0         88   sst.o
       252         20          0          0          0        172   winbond.o

    ----------------------------------------------------------------------
      9418        500        400          0          0       3416   Library Totals
         2          0          2          0          0          0   (incl. Padding)

    ----------------------------------------------------------------------

      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   Library Name

      1560         70          0          0          0        824   mc_w.l
      7856        430        398          0          0       2592   spifi_drv_M4.lib

    ----------------------------------------------------------------------
      9418        500        400          0          0       3416   Library Totals

    ----------------------------------------------------------------------

==============================================================================


      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   

     31100       1804     176972        336      51576     423473   Grand Totals
     31100       1804     176972         44      51576     423473   ELF Image Totals (compressed)
     31100       1804     176972         44          0          0   ROM Totals

==============================================================================

    Total RO  Size (Code + RO Data)               208072 ( 203.20kB)
    Total RW  Size (RW Data + ZI Data)             51912 (  50.70kB)
    Total ROM Size (Code + RO Data + RW Data)     208116 ( 203.24kB)

==============================================================================

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-11-10 23:25:24 | 显示全部楼层
那得看你的局部变量是不是寄存器变量,注意局部变量是有很大可能被优化为寄存器类型,所以局部变量值在仿真时是不确定的
你最好还是根据反汇编看特定的寄存器值

出0入0汤圆

发表于 2013-11-11 09:10:24 | 显示全部楼层
学习啊,自己懂得太少了!~~~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 02:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表