天嵌 ARM开发社区

 找回密码
 注册
查看: 4492|回复: 6

2440堆栈被修改

[复制链接]
冰火★逍遥 发表于 2012-9-5 09:33:26 | 显示全部楼层 |阅读模式
在对GPACON 进行操作时,用户堆栈会被修改。如果在调用嵌套函数的时候,会到导致函数返回值,返回位置不确定。
embedsky_lhh 发表于 2012-9-5 10:35:21 | 显示全部楼层
这个是在神马情况测的,单步调试吗?
 楼主| 冰火★逍遥 发表于 2012-9-5 13:23:21 | 显示全部楼层
embedsky_lhh 发表于 2012-9-5 10:35
这个是在神马情况测的,单步调试吗?

嗯~
无论GPACON 在程序哪个地方赋值  都会改变堆栈的值,而别的端口赋值则不会出现堆栈被修改。
 楼主| 冰火★逍遥 发表于 2012-9-5 13:27:29 | 显示全部楼层
冰火★逍遥 发表于 2012-9-5 13:23
嗯~
无论GPACON 在程序哪个地方赋值  都会改变堆栈的值,而别的端口赋值则不会出现堆栈被修改。

下到NANDFLASH里面运行,程序会由于指针的改变没有顺序执行,中间有段程序会跳过去。结果程序运行不正常。
embedsky_lhh 发表于 2012-9-6 09:21:57 | 显示全部楼层
冰火★逍遥 发表于 2012-9-5 13:27
下到NANDFLASH里面运行,程序会由于指针的改变没有顺序执行,中间有段程序会跳过去。结果程序运行不正常。 ...

贴下你的代码,你是怎么操作的?
 楼主| 冰火★逍遥 发表于 2012-9-6 11:12:25 | 显示全部楼层
embedsky_lhh 发表于 2012-9-6 09:21
贴下你的代码,你是怎么操作的?
  1. void Port_Init(void)
  2. {
  3.     //CAUTION:Follow the configuration order for setting the ports.
  4.     // 1) setting value(GPnDAT)
  5.     // 2) setting control register  (GPnCON)
  6.     // 3) configure pull-up resistor(GPnUP)  

  7.     //32bit data bus configuration  
  8.     //*** PORT A GROUP
  9.     //Ports  : GPA22 GPA21  GPA20 GPA19 GPA18 GPA17 GPA16 GPA15 GPA14 GPA13 GPA12  
  10.     //Signal : nFCE nRSTOUT nFRE   nFWE  ALE   CLE  nGCS5 nGCS4 nGCS3 nGCS2 nGCS1
  11.     //Binary :  1     1      1  , 1   1   1    1   ,  1     1     1     1
  12.     //Ports  : GPA11   GPA10  GPA9   GPA8   GPA7   GPA6   GPA5   GPA4   GPA3   GPA2   GPA1  GPA0
  13.     //Signal : ADDR26 ADDR25 ADDR24 ADDR23 ADDR22 ADDR21 ADDR20 ADDR19 ADDR18 ADDR17 ADDR16 ADDR0
  14.     //Binary :  1       1      1      1   , 1       1      1      1   ,  1       1     1      1         
  15.     rGPACON = 0x7fffff;

  16.     //**** PORT B GROUP
  17.     //Ports  : GPB10    GPB9    GPB8    GPB7    GPB6     GPB5    GPB4   GPB3   GPB2     GPB1      GPB0
  18.     //Signal : nXDREQ0 nXDACK0 nXDREQ1 nXDACK1 nSS_KBD nDIS_OFF L3CLOCK L3DATA L3MODE nIrDATXDEN Keyboard
  19.     //Setting: INPUT  OUTPUT   INPUT  OUTPUT   INPUT   OUTPUT   OUTPUT OUTPUT OUTPUT   OUTPUT    OUTPUT
  20.     //Binary :   00  ,  01       00  ,   01      00   ,  01       01  ,   01     01   ,  01        01  
  21.     //rGPBCON = 0x000150;(youlong)
  22.     rGPBCON = 0x015550;
  23.     rGPBUP  = 0x7ff;     // The pull up function is disabled GPB[10:0]

  24.     //*** PORT C GROUP for youlong
  25.     //Ports  : GPC15 GPC14 GPC13 GPC12 GPC11 GPC10 GPC9 GPC8  GPC7   GPC6   GPC5 GPC4 GPC3  GPC2  GPC1 GPC0
  26.     //Signal : VD7   VD6   VD5   VD4   VD3   VD2   VD1  VD0 LCDVF2 LCDVF1 LCDVF0 VM VFRAME VLINE VCLK LEND  
  27.     //Binary :  10   10  , 10    10  , 10    10  , 10   10  , 10     10  ,  10   10 , 10     10 , 10   10
  28.     //rGPCCON = 0xaaaaaaaa;      
  29.     //rGPCUP  = 0xffff;     // The pull up function is disabled GPC[15:0]
  30.    
  31.     //*** PORT C GROUP
  32.     //Ports  : GPC15 GPC14 GPC13 GPC12 GPC11 GPC10 GPC9 GPC8  GPC7   GPC6   GPC5 GPC4 GPC3  GPC2  GPC1 GPC0
  33.     //Signal : VD7   VD6   VD5   VD4   VD3   VD2   VD1  VD0 LCDVF2 LCDVF1 LCDVF0 VM VFRAME VLINE VCLK LEND  
  34.     //Binary :  10   10  , 10    10  , 10    10  , 10   01  , 01     01  ,  01   10 , 10     10 , 10   10
  35.     rGPCCON = 0xaaa956aa;      
  36.     rGPCUP  = 0xffff;     // The pull up function is disabled GPC[15:0]     

  37.     //*** PORT D GROUP
  38.     //Ports  : GPD15 GPD14 GPD13 GPD12 GPD11 GPD10 GPD9 GPD8 GPD7 GPD6 GPD5 GPD4 GPD3 GPD2 GPD1 GPD0
  39.     //Signal : VD23  VD22  VD21  VD20  VD19  VD18  VD17 VD16 VD15 VD14 VD13 VD12 VD11 VD10 VD9  VD8
  40.     //Binary : 10    10  , 10    10  , 10    10  , 10   10 , 10   10 , 10   10 , 10   10 ,10   10
  41.     rGPDCON = 0xaaaaaaaa;      
  42.     rGPDUP  = 0xffff;     // The pull up function is disabled GPD[15:0]

  43.     //*** PORT E GROUP
  44.     //Ports  : GPE15  GPE14 GPE13   GPE12   GPE11   GPE10   GPE9    GPE8     GPE7  GPE6  GPE5   GPE4  
  45.     //Signal : IICSDA IICSCL SPICLK SPIMOSI SPIMISO SDDATA3 SDDATA2 SDDATA1 SDDATA0 SDCMD SDCLK IN
  46.     //Binary :  10     10  ,  10      10  ,  10      10   ,  10      10   ,   10    10  , 10     00  ,     
  47.     //-------------------------------------------------------------------------------------------------------
  48.     //Ports  :  GPE3   GPE2  GPE1    GPE0   
  49.     //Signal :  IN     IN    IN      IN  
  50.     //Binary :  00     00  ,  00      00
  51.     //rGPECON = 0xaaaaaaaa;      
  52.     //rGPEUP  = 0xffff;     // The pull up function is disabled GPE[15:0]
  53.         rGPECON = 0xa02aa800; // For added AC97 setting      
  54.     rGPEUP  = 0xffff;     

  55.      //*** PORT F GROUP
  56.     //Ports  : GPF7   GPF6   GPF5   GPF4      GPF3     GPF2  GPF1   GPF0
  57.     //Signal : nLED_8 nLED_4 nLED_2 nLED_1 nIRQ_PCMCIA EINT2 KBDINT EINT0
  58.     //Setting: Output Output Output Output    EINT3    EINT2 EINT1  EINT0
  59.     //Binary :  01      01 ,  01     01  ,     10       10  , 10     10
  60.     //rGPFCON = 0x55aa;
  61.         rGPFCON = 0x5500;
  62.     rGPFUP  = 0xff;     // The pull up function is disabled GPF[7:0]
  63.         rGPFDAT |= (1 << 0) | (1 << 1) | (1 << 2) | (1 << 4) ;//将键盘对应的四个引脚置为高电平,完成初始化工作

  64.     //*** PORT G GROUP
  65.     //Ports  : GPG15 GPG14 GPG13 GPG12 GPG11    GPG10    GPG9     GPG8     GPG7      GPG6   
  66.     //Signal : nYPON  YMON nXPON XMON  EINT19 DMAMODE1 DMAMODE0 DMASTART KBDSPICLK KBDSPIMOSI
  67.     //Setting: nYPON  YMON nXPON XMON  EINT19  Output   Output   Output   SPICLK1    SPIMOSI1
  68.     //Binary :   11    11 , 11    11  , 10      01    ,   01       01   ,    11         11
  69.     //-----------------------------------------------------------------------------------------
  70.     //Ports  :    GPG5       GPG4    GPG3    GPG2    GPG1    GPG0   
  71.     //Signal : KBDSPIMISO LCD_PWREN EINT11 nSS_SPI IRQ_LAN IRQ_PCMCIA
  72.     //Setting:  SPIMISO1  LCD_PWRDN EINT11   nSS0   EINT9    EINT8
  73.     //Binary :     11         11   ,  10      11  ,  10        10
  74.     rGPGCON = 0x00a2aaaa;// GPG9 input without pull-up
  75.     rGPGUP  = 0xffff;    // The pull up function is disabled GPG[15:0]

  76.     //*** PORT H GROUP
  77.     //Ports  :  GPH10    GPH9  GPH8 GPH7  GPH6  GPH5 GPH4 GPH3 GPH2 GPH1  GPH0
  78.     //Signal : CLKOUT1 CLKOUT0 UCLK nCTS1 nRTS1 RXD1 TXD1 RXD0 TXD0 nRTS0 nCTS0
  79.     //Binary :   10   ,  10     10 , 11    11  , 10   10 , 10   10 , 10    10
  80.     rGPHCON = 0x00faaa;
  81.     rGPHUP  = 0x7ff;    // The pull up function is disabled GPH[10:0]

  82.         // Added for S3C2440X, DonGo
  83.         //*** PORT J GROUP
  84.     //Ports  : GPJ12   GPJ11       GPJ10    GPJ9    GPJ8      GPJ7      GPJ6      GPJ5      GPJ4      GPJ3      GPJ2      GPJ1     GPJ0
  85.     //Signal : CAMRESET CAMPCLKOUT CAMHREF CAMVSYNC CAMPCLKIN CAMDAT[7] CAMDAT[6] CAMDAT[5] CAMDAT[4] CAMDAT[3] CAMDAT[2] CAMDAT[1] CAMDAT[0]
  86.     //Binary :   10      10       10        10       10        10        10        10       10         10        10        10      10
  87.     rGPJCON = 0x02aaaaaa;
  88.     rGPJUP  = 0x1fff;    // The pull up function is disabled GPH[10:0]
  89.    
  90.     //External interrupt will be falling edge triggered.
  91.     rEXTINT0 = 0x22222222;    // EINT[7:0]
  92.     rEXTINT1 = 0x22222222;    // EINT[15:8]
  93.     rEXTINT2 = 0x22222222;    // EINT[23:16]
  94. }
复制代码
  1. void sys_init(void)
  2. {       
  3.         Port_Init();
  4.         Gpio_Init();       
  5.         Isr_Init();
  6.         setlocale(LC_ALL, "C");
  7. }
复制代码
  1. void Main(void)
  2. {
  3.        
  4.         U8 m,n;
  5.         U8 Addr_temp;
  6.         S32 i,j;
  7.         U32 CRC_TEMP1,CRC_TEMP2;
  8.         S32 XXX[2];
  9.         S32 YYY[2];
  10.         U32 ADC_Time=1000;
  11.         U32 mpll_val = 0 ;

  12.         sys_init();

  13. //         __rt_lib_init(0,0);
  14.         //init FCLK=400M, so change MPLL first
  15.         mpll_val = (92<<12)|(1<<4)|(1);       
复制代码
 楼主| 冰火★逍遥 发表于 2012-9-6 11:26:50 | 显示全部楼层
embedsky_lhh 发表于 2012-9-6 09:21
贴下你的代码,你是怎么操作的?

由于函数里面调用的函数,现场保存于堆栈之中,在0X33ff57d8位置,正常为0x30001013。执行完    rGPACON = 0x7fffff之后,堆栈0X33ff57d8 位置变为 0x30001A3C。一至于跳出函数时返回的位置不对。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-29 12:53 , Processed in 1.046868 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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