最近在做BLE 的研究 使用TI的 BLE-CC254x-1.3.2 协议栈
做好了串口测试做后 做发现模式 在预编译 输入 CC2540_MINIDK 编译后出现以下警告
Warning[w52]: More than one definition for the byte at address 0x6b in common segment INTVEC. It is defined in module "hal_uart" as well as in module "hal_key"
重复定义地址 0x6B ,看了数据手册发现 0x6b的地址是 P0 的终端向量
最后查看 串口和 key 的终端 函数 分别在 _hal_uart_dma.c 和 hal_key.c 文件中
@fn PortX Interrupt Handler
HAL_ISR_FUNCTION(port0Isr, P0INT_VECTOR)
@fn halKeyPort0Isr
HAL_ISR_FUNCTION( halKeyPort0Isr, P0INT_VECTOR )
两个函数 都在 P0INT_VECTOR 地址 P0INT_VECTOR VECT( 13, 0x6B ) /* Port 0 Inputs
是P0 的中断函数,相当中断函数两个地方定义 导致以上警告
在程序运行中会无法运行某些代码,为了解决这个问题,看看这两个终端到底做了些啥
/**************************************************************************************************
* @fn PortX Interrupt Handler
*
* @brief This function is the PortX interrupt service routine.
*
* @param None.
*
* @return None.
*************************************************************************************************/
#if (HAL_UART_DMA == 1)
HAL_ISR_FUNCTION(port0Isr, P0INT_VECTOR)
#else
HAL_ISR_FUNCTION(port1Isr, P1INT_VECTOR)
#endif
{
HAL_ENTER_ISR();
PxIFG = 0;
PxIF = 0;
dmaRdyIsr = 1;
CLEAR_SLEEP_MODE();
HAL_EXIT_ISR();
}
串口的中断是 主要 关闭睡眠模式 以及睡眠模式相关标志
/**************************************************************************************************
* @fn halKeyPort0Isr
*
* @brief Port0 ISR
*
* @param
*
* @return
**************************************************************************************************/
HAL_ISR_FUNCTION( halKeyPort0Isr, P0INT_VECTOR )
{
HAL_ENTER_ISR();
#if defined ( CC2540_MINIDK )
if ((HAL_KEY_SW_1_PXIFG & HAL_KEY_SW_1_BIT) || (HAL_KEY_SW_2_PXIFG & HAL_KEY_SW_2_BIT))
#else
if (HAL_KEY_SW_6_PXIFG & HAL_KEY_SW_6_BIT)
#endif
{
halProcessKeyInterrupt();
}
/*
Clear the CPU interrupt flag for Port_0
PxIFG has to be cleared before PxIF
*/
#if defined ( CC2540_MINIDK )
HAL_KEY_SW_1_PXIFG = 0;
HAL_KEY_SW_2_PXIFG = 0;
#else
HAL_KEY_SW_6_PXIFG = 0;
#endif
HAL_KEY_CPU_PORT_0_IF = 0;
CLEAR_SLEEP_MODE();
HAL_EXIT_ISR();
return;
}
KEY 主要完成的是 按键的扫描 和 关闭睡眠模式
TI 没有把 中断服务程序 放在 一起 统一 管理 导致 上述问题的出现
看了这些我想到大家应该知道怎么去解决这个问题了