- 积分
 - 22
 
 
贡献45 
飞刀0 FD
注册时间2012-7-23
在线时间5 小时
 
 
 
  
扫一扫,手机访问本帖   
 | 
 
在TE2440开发板中写一个简单的驱动,在Init函数中将物理地址起始地址为0x1000_0000的32个地址映射为虚拟地址。将驱动编译完成后生NK.BIN文件,将NK.bin文件烧到开发板中。系统崩溃,断电重启后bootloader也不能启动。请问是什么原因。程序代码为 
#define FPGA_BASE_REG             (0x10000000) 
static volatile FPGA_MEM_REG *v_pIOPregs; 
typedef struct { 
        UINT32 ulAddr[32];                  // Port A - offset 0         
 
} FPGA_MEM_REG, *PFPGA_MEM_REG;   
 
DWORD FPG_Init(DWORD dwContext) 
{ 
v_pIOPregs = (volatile FPGA_MEM_REG *)VirtualAlloc(0, sizeof(FPGA_MEM_REG), MEM_RESERVE, PAGE_NOACCESS); 
        if (v_pIOPregs == NULL)  
        { 
                DEBUGMSG (1,(TEXT("v_pIOPRegs is not allocated\n\r"))); 
                isSuccess = 0; 
                //return TRUE; 
        } 
        else 
        { 
                if (!VirtualCopy((PVOID)v_pIOPregs, (PVOID)(FPGA_BASE_REG>>8), sizeof(FPGA_MEM_REG), PAGE_PHYSICAL|PAGE_READWRITE|PAGE_NOCACHE)) 
                { 
                                isSuccess=0; 
                                DEBUGMSG (1,(TEXT("v_pIOPRegs is not mapped\n\r"))); 
                } 
                 
                //return TRUE; 
        } 
        if(!isSuccess) 
        { 
                if(v_pIOPregs) 
                { 
                        VirtualFree((PVOID)v_pIOPregs,0,MEM_RELEASE); 
                } 
                v_pIOPregs=NULL; 
        } 
        RETAILMSG(1, (TEXT("::: FPG_InitS.\r\n")));  
 
        return isSuccess;    
} 
将映射部分注释掉后重新编译生成的NK.bin文件烧写后不影响bootloader。 |   
 
 
 
 |