当前位置: 代码迷 >> WinCE >> 6410 wince debug.c 调试串口的疑义
  详细解决方案

6410 wince debug.c 调试串口的疑义

热度:422   发布时间:2016-04-28 12:26:35.0
6410 wince debug.c 调试串口的疑问
+++++++++现象:SMDK6410.bat(57):里如果把全部debug串口都屏蔽掉
@REM set BSP_DEBUGPORT=SERIAL_UART0
@REM set BSP_DEBUGPORT=SERIAL_UART1
@REM set BSP_DEBUGPORT=SERIAL_UART2
@REM set BSP_DEBUGPORT=SERIAL_UART3

wince可以正常使用,4个串口可以当做普通串口正常使用。

++++++++++不明白为何是这样:
1、oalib\source里有如下定义,看起来是BSP_DEBUGPORT如果为定义,相应的DEBUG_PORT也就为定义,所有文件里搜索也未发现对该宏的其他定义。

!IF "$(BSP_DEBUGPORT)" == "SERIAL_UART0"
CDEFINES=$(CDEFINES) -DDEBUG_PORT=0
!ENDIF

!IF "$(BSP_DEBUGPORT)" == "SERIAL_UART1"
CDEFINES=$(CDEFINES) -DDEBUG_PORT=1
!ENDIF

!IF "$(BSP_DEBUGPORT)" == "SERIAL_UART2"
CDEFINES=$(CDEFINES) -DDEBUG_PORT=2
!ENDIF

!IF "$(BSP_DEBUGPORT)" == "SERIAL_UART3"
CDEFINES=$(CDEFINES) -DDEBUG_PORT=3
!ENDIF

2、debug.c里,如果DEBUG_PORT未定义,应该是编译时出现INVALID_DEBUG_PORT未定义的错误,但是编译通过,且可以正常运行。 
++++++++++疑问1:为何编译时不出现INVALID_DEBUG_PORT未定义的错误
++++++++++疑问2:即使不出现1的错误,那么由于DEBUG_PORT未定义,那么g_pUARTReg的值未修改,仍旧是NULL,为何g_pUARTReg->ULCON等访问不挂掉?
static volatile S3C6410_UART_REG *g_pUARTReg = NULL;
VOID OEMInitDebugSerial()
{
    UINT32 logMask;
    UINT32 DivSlot;
    float Div;

    //OALMSG(TRUE, (TEXT("[OAL] ++OEMInitDebugSerial()\n\r")));

    // At this moment we must suppress logging.
    //
    logMask = dpCurSettings.ulZoneMask;
    dpCurSettings.ulZoneMask = 0;

    // Map SFR Address
    //
    if (g_pUARTReg == NULL)
    {
#if    (DEBUG_PORT == DEBUG_UART0)
        // UART0
        g_pUARTReg = (S3C6410_UART_REG *)OALPAtoVA(S3C6410_BASE_REG_PA_UART0, FALSE);
#elif (DEBUG_PORT == DEBUG_UART1)
        // UART1
        g_pUARTReg = (S3C6410_UART_REG *)OALPAtoVA(S3C6410_BASE_REG_PA_UART1, FALSE);
#elif (DEBUG_PORT == DEBUG_UART2)
        // UART2
        g_pUARTReg = (S3C6410_UART_REG *)OALPAtoVA(S3C6410_BASE_REG_PA_UART2, FALSE);
#elif (DEBUG_PORT == DEBUG_UART3)
        // UART3
        g_pUARTReg = (S3C6410_UART_REG *)OALPAtoVA(S3C6410_BASE_REG_PA_UART3, FALSE);
#else
        INVALID_DEBUG_PORT        // Error
#endif
    }

    if (g_pGPIOReg == NULL)
    {
        g_pGPIOReg = (S3C6410_GPIO_REG *)OALPAtoVA(S3C6410_BASE_REG_PA_GPIO, FALSE);
    }

    if (g_pSysConReg == NULL)
    {
        g_pSysConReg = (S3C6410_SYSCON_REG *)OALPAtoVA(S3C6410_BASE_REG_PA_SYSCON, FALSE);
    }
//省略一部分代码
    // Initialize UART
    //
  相关解决方案