wxc5678 发表于 2010-12-2 15:27:28

问题求解……急……谢谢

我写了一段关于串口的小程序,通过JTAG用AXD调试的时候,运行一切正常。但是下载到NAND Flash中运行的时候不能正常的运行,有遇到这种情况的兄弟没啊? 麻烦解答一下谢谢

wxc5678 发表于 2010-12-2 20:05:15

代码如下:
//Startup.s
; 起动文件。初始化C程序的运行环境,然后进入C程序代码。


                IMPORT        Main                ; 声明C程序中的Main()函数

                AREA        Start,CODE,READONLY        ; 声明代码段Start
                ENTRY                                ; 标识程序入口
                CODE32                                ; 声明32位ARM指令       
                       
Reset        LDR                SP,=0x40003F00

   
           
            B                Main                ; 跳转到C程序代码Main()函数
           
            END

//Main.c

#include "stdio.h"

#define GPHCON (*(volatile unsigned long *)0x56000070)
#define GPHDAT(*(volatile unsigned long *)0x56000074)
#define GPHUP(*(volatile unsigned long *)0x56000078)
#define ULCON0(*(volatile unsigned long *)0x50000000)
#define UCON0(*(volatile unsigned long *)0x50000004)
#define UFCON0(*(volatile unsigned long *)0x50000008)
#define UMCON0(*(volatile unsigned long *)0x5000000c)
#define UTRSTAT0(*(volatile unsigned long *)0x50000010)
#define UTXH0   (*(volatile unsigned long *)0x50000020)
#define URXH0   (*(volatile unsigned long *)0x50000024)
#define UBRDIV0   (*(volatile unsigned long *)0x50000028)



//LED设置
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)

//设置LED接口为输出
#define GPB5_out (1<<(5*2))
#define GPB6_out (1<<(6*2))
#define GPB7_out (1<<(7*2))
#define GPB8_out (1<<(8*2))

#define PCLK 50000000
#define UART_CLK PCLK
#define UART_BAUD_RATE 115200
#define UART_BRD ((UART_CLK / (UART_BAUD_RATE*16))-1)

void uart0_init(void)
{
        GPHCON |=0Xa0;
        GPHUP =0X0c;
        ULCON0=0x03;
        UCON0 =0x05;
        UFCON0=0x00;
        UMCON0=0x00;
        UBRDIV0=UART_BRD;
}

void putc12(unsigned char c)
{
        while(!(UTRSTAT0 & 0x04));
       
        UTXH0=c;
}


unsigned char getc12(void)
{
        while(!(UTRSTAT0 & 0x01));
       
        return URXH0;
}
void sleep(int i)
{
        int j;
        for(j=0;j<=i;j++);
}

int Main(void)
{
        unsigned char c;
        GPBCON=GPB5_out | GPB6_out | GPB7_out | GPB8_out;
       
       uart0_init();
        GPBDAT ^= (15<<5);
        while(1)
        {
                c=getc12();
                sleep(10000);
                if(c=='1')
                {       
                        GPBDAT ^= (1<<5);
                        putc12(c);
                }
                if(c=='2')
                {
                        GPBDAT ^= (2<<5);
                        putc12(c);
                }
                if(c=='3')
                {
                        GPBDAT ^= (4<<5);
                        putc12(c);
                }
                if(c=='4')
                {
                        GPBDAT ^= (8<<5);
                        putc12(c);
                }
        }
        return 0;
}

用AXD调试的时候一切如程序设计一样正常运行,但是烧入NAND Flash中 就无反应或者不能按照程序设计流程运行。
1。请问这是什么原因啊?
2.当在AXD中调试的时候程序的运行环境和烧入NAND Flash中,代码的运行环境有什么区别吗?

菜鸟问题,麻烦高手指教呵呵……

吕氏春秋8266 发表于 2010-12-2 22:19:08

本帖最后由 吕氏春秋8266 于 2010-12-2 22:27 编辑

LDR                SP,=0x40003F00
你可以考虑一下,当调用C语言程序时,会进行堆栈操作,个人感觉你的指针设置不正确,好象不在SDRAM中,也不在CPU内部4KRAM中,因为没测试,不敢下肯定结论,从NAND启动,它在CPU内部4KRAM中运行,你的启动代码也没有启动SDRAM,不要把堆栈放在SDRAM中!你可以把堆栈指针改在4K范围内试试看,个人看法,仅供参考!

WTW11897 发表于 2011-4-24 22:17:26

{:3_41:}{:3_52:} 感觉有点道理
页: [1]
查看完整版本: 问题求解……急……谢谢