2440堆栈被修改
在对GPACON 进行操作时,用户堆栈会被修改。如果在调用嵌套函数的时候,会到导致函数返回值,返回位置不确定。 这个是在神马情况测的,单步调试吗? embedsky_lhh 发表于 2012-9-5 10:35 static/image/common/back.gif这个是在神马情况测的,单步调试吗?
嗯~
无论GPACON 在程序哪个地方赋值都会改变堆栈的值,而别的端口赋值则不会出现堆栈被修改。 冰火★逍遥 发表于 2012-9-5 13:23 static/image/common/back.gif
嗯~
无论GPACON 在程序哪个地方赋值都会改变堆栈的值,而别的端口赋值则不会出现堆栈被修改。
下到NANDFLASH里面运行,程序会由于指针的改变没有顺序执行,中间有段程序会跳过去。结果程序运行不正常。 冰火★逍遥 发表于 2012-9-5 13:27 static/image/common/back.gif
下到NANDFLASH里面运行,程序会由于指针的改变没有顺序执行,中间有段程序会跳过去。结果程序运行不正常。 ...
贴下你的代码,你是怎么操作的? embedsky_lhh 发表于 2012-9-6 09:21 static/image/common/back.gif
贴下你的代码,你是怎么操作的?
void Port_Init(void)
{
//CAUTION:Follow the configuration order for setting the ports.
// 1) setting value(GPnDAT)
// 2) setting control register(GPnCON)
// 3) configure pull-up resistor(GPnUP)
//32bit data bus configuration
//*** PORT A GROUP
//Ports: GPA22 GPA21GPA20 GPA19 GPA18 GPA17 GPA16 GPA15 GPA14 GPA13 GPA12
//Signal : nFCE nRSTOUT nFRE nFWEALE CLEnGCS5 nGCS4 nGCS3 nGCS2 nGCS1
//Binary :1 1 1, 1 1 1 1 ,1 1 1 1
//Ports: GPA11 GPA10GPA9 GPA8 GPA7 GPA6 GPA5 GPA4 GPA3 GPA2 GPA1GPA0
//Signal : ADDR26 ADDR25 ADDR24 ADDR23 ADDR22 ADDR21 ADDR20 ADDR19 ADDR18 ADDR17 ADDR16 ADDR0
//Binary :1 1 1 1 , 1 1 1 1 ,1 1 1 1
rGPACON = 0x7fffff;
//**** PORT B GROUP
//Ports: GPB10 GPB9 GPB8 GPB7 GPB6 GPB5 GPB4 GPB3 GPB2 GPB1 GPB0
//Signal : nXDREQ0 nXDACK0 nXDREQ1 nXDACK1 nSS_KBD nDIS_OFF L3CLOCK L3DATA L3MODE nIrDATXDEN Keyboard
//Setting: INPUTOUTPUT INPUTOUTPUT INPUT OUTPUT OUTPUT OUTPUT OUTPUT OUTPUT OUTPUT
//Binary : 00,01 00, 01 00 ,01 01, 01 01 ,01 01
//rGPBCON = 0x000150;(youlong)
rGPBCON = 0x015550;
rGPBUP= 0x7ff; // The pull up function is disabled GPB
//*** PORT C GROUP for youlong
//Ports: GPC15 GPC14 GPC13 GPC12 GPC11 GPC10 GPC9 GPC8GPC7 GPC6 GPC5 GPC4 GPC3GPC2GPC1 GPC0
//Signal : VD7 VD6 VD5 VD4 VD3 VD2 VD1VD0 LCDVF2 LCDVF1 LCDVF0 VM VFRAME VLINE VCLK LEND
//Binary :10 10, 10 10, 10 10, 10 10, 10 10,10 10 , 10 10 , 10 10
//rGPCCON = 0xaaaaaaaa;
//rGPCUP= 0xffff; // The pull up function is disabled GPC
//*** PORT C GROUP
//Ports: GPC15 GPC14 GPC13 GPC12 GPC11 GPC10 GPC9 GPC8GPC7 GPC6 GPC5 GPC4 GPC3GPC2GPC1 GPC0
//Signal : VD7 VD6 VD5 VD4 VD3 VD2 VD1VD0 LCDVF2 LCDVF1 LCDVF0 VM VFRAME VLINE VCLK LEND
//Binary :10 10, 10 10, 10 10, 10 01, 01 01,01 10 , 10 10 , 10 10
rGPCCON = 0xaaa956aa;
rGPCUP= 0xffff; // The pull up function is disabled GPC
//*** PORT D GROUP
//Ports: GPD15 GPD14 GPD13 GPD12 GPD11 GPD10 GPD9 GPD8 GPD7 GPD6 GPD5 GPD4 GPD3 GPD2 GPD1 GPD0
//Signal : VD23VD22VD21VD20VD19VD18VD17 VD16 VD15 VD14 VD13 VD12 VD11 VD10 VD9VD8
//Binary : 10 10, 10 10, 10 10, 10 10 , 10 10 , 10 10 , 10 10 ,10 10
rGPDCON = 0xaaaaaaaa;
rGPDUP= 0xffff; // The pull up function is disabled GPD
//*** PORT E GROUP
//Ports: GPE15GPE14 GPE13 GPE12 GPE11 GPE10 GPE9 GPE8 GPE7GPE6GPE5 GPE4
//Signal : IICSDA IICSCL SPICLK SPIMOSI SPIMISO SDDATA3 SDDATA2 SDDATA1 SDDATA0 SDCMD SDCLK IN
//Binary :10 10,10 10,10 10 ,10 10 , 10 10, 10 00,
//-------------------------------------------------------------------------------------------------------
//Ports:GPE3 GPE2GPE1 GPE0
//Signal :IN IN IN IN
//Binary :00 00,00 00
//rGPECON = 0xaaaaaaaa;
//rGPEUP= 0xffff; // The pull up function is disabled GPE
rGPECON = 0xa02aa800; // For added AC97 setting
rGPEUP= 0xffff;
//*** PORT F GROUP
//Ports: GPF7 GPF6 GPF5 GPF4 GPF3 GPF2GPF1 GPF0
//Signal : nLED_8 nLED_4 nLED_2 nLED_1 nIRQ_PCMCIA EINT2 KBDINT EINT0
//Setting: Output Output Output Output EINT3 EINT2 EINT1EINT0
//Binary :01 01 ,01 01, 10 10, 10 10
//rGPFCON = 0x55aa;
rGPFCON = 0x5500;
rGPFUP= 0xff; // The pull up function is disabled GPF
rGPFDAT |= (1 << 0) | (1 << 1) | (1 << 2) | (1 << 4) ;//将键盘对应的四个引脚置为高电平,完成初始化工作
//*** PORT G GROUP
//Ports: GPG15 GPG14 GPG13 GPG12 GPG11 GPG10 GPG9 GPG8 GPG7 GPG6
//Signal : nYPONYMON nXPON XMONEINT19 DMAMODE1 DMAMODE0 DMASTART KBDSPICLK KBDSPIMOSI
//Setting: nYPONYMON nXPON XMONEINT19Output Output Output SPICLK1 SPIMOSI1
//Binary : 11 11 , 11 11, 10 01 , 01 01 , 11 11
//-----------------------------------------------------------------------------------------
//Ports: GPG5 GPG4 GPG3 GPG2 GPG1 GPG0
//Signal : KBDSPIMISO LCD_PWREN EINT11 nSS_SPI IRQ_LAN IRQ_PCMCIA
//Setting:SPIMISO1LCD_PWRDN EINT11 nSS0 EINT9 EINT8
//Binary : 11 11 ,10 11,10 10
rGPGCON = 0x00a2aaaa;// GPG9 input without pull-up
rGPGUP= 0xffff; // The pull up function is disabled GPG
//*** PORT H GROUP
//Ports:GPH10 GPH9GPH8 GPH7GPH6GPH5 GPH4 GPH3 GPH2 GPH1GPH0
//Signal : CLKOUT1 CLKOUT0 UCLK nCTS1 nRTS1 RXD1 TXD1 RXD0 TXD0 nRTS0 nCTS0
//Binary : 10 ,10 10 , 11 11, 10 10 , 10 10 , 10 10
rGPHCON = 0x00faaa;
rGPHUP= 0x7ff; // The pull up function is disabled GPH
// Added for S3C2440X, DonGo
//*** PORT J GROUP
//Ports: GPJ12 GPJ11 GPJ10 GPJ9 GPJ8 GPJ7 GPJ6 GPJ5 GPJ4 GPJ3 GPJ2 GPJ1 GPJ0
//Signal : CAMRESET CAMPCLKOUT CAMHREF CAMVSYNC CAMPCLKIN CAMDAT CAMDAT CAMDAT CAMDAT CAMDAT CAMDAT CAMDAT CAMDAT
//Binary : 10 10 10 10 10 10 10 10 10 10 10 10 10
rGPJCON = 0x02aaaaaa;
rGPJUP= 0x1fff; // The pull up function is disabled GPH
//External interrupt will be falling edge triggered.
rEXTINT0 = 0x22222222; // EINT
rEXTINT1 = 0x22222222; // EINT
rEXTINT2 = 0x22222222; // EINT
}void sys_init(void)
{
Port_Init();
Gpio_Init();
Isr_Init();
setlocale(LC_ALL, "C");
}void Main(void)
{
U8 m,n;
U8 Addr_temp;
S32 i,j;
U32 CRC_TEMP1,CRC_TEMP2;
S32 XXX;
S32 YYY;
U32 ADC_Time=1000;
U32 mpll_val = 0 ;
sys_init();
// __rt_lib_init(0,0);
//init FCLK=400M, so change MPLL first
mpll_val = (92<<12)|(1<<4)|(1); embedsky_lhh 发表于 2012-9-6 09:21 static/image/common/back.gif
贴下你的代码,你是怎么操作的?
由于函数里面调用的函数,现场保存于堆栈之中,在0X33ff57d8位置,正常为0x30001013。执行完 rGPACON = 0x7fffff之后,堆栈0X33ff57d8 位置变为 0x30001A3C。一至于跳出函数时返回的位置不对。
页:
[1]