请教各位,CC2640使用串口中断读取数据,前五十次基本没有问题,五十次之后,会100%出现串口中断回调函数不运行的情况。
并非程序卡死,而是无法进入回调函数,即使每次读取的数据一样,也会出现不能读取的状况。
下面是我的初始化程序和回调程序,已排除因回调程写太多导致的问题。项目已进入交付阶段,特别紧急,请大家帮忙找出问题。感激不尽。
void Uart_Init(npiCB_t npiCBack)
{
if(!uartInitFlag)
{
NPITLUART_initializeTransport(tRxBuf, tTxBuf, npiCBack);
uartInitFlag = TRUE;
}
void NPITLUART_initializeTransport(Char *tRxBuf, Char *tTxBuf, npiCB_t npiCBack)
{
UART_Params params;
TransportRxBuf = tRxBuf;
TransportTxBuf = tTxBuf;
npiTransmitCB = npiCBack;
// Configure UART parameters.
UART_Params_init(¶ms);
params.baudRate = NPI_UART_BR;
params.readDataMode = UART_DATA_BINARY;
params.writeDataMode = UART_DATA_BINARY;
params.dataLength = UART_LEN_8;
params.stopBits = UART_STOP_ONE;
params.readMode = UART_MODE_CALLBACK;
params.writeMode = UART_MODE_CALLBACK;
params.readEcho = UART_ECHO_OFF;
params.readCallback = NPITLUART_readCallBack;
params.writeCallback = NPITLUART_writeCallBack;
// Open / power on the UART.
uartHandle = UART_open(Board_UART, ¶ms);
//Enable Partial Reads on all subsequent UART_read()
UART_control(uartHandle, UARTCC26XX_CMD_RETURN_PARTIAL_ENABLE, NULL);
#ifndef POWER_UNUSED//POWER_SAVING
// This call will start repeated Uart Reads when Power Savings is disabled
NPITLUART_readTransport();
#endif //!POWER_SAVING
return;
}
//串口调用函数
void UartCallBack(uint16_t rxLen, uint16_t txLen)
{ if((rxLen-2) > 5) //串口接收到数据 注意:此处的rxLen不能随便更改
{ //光标定时器关闭,当CursorFlag==1时
CursorTimer(0); //放在串口中,防止遮盖扫头数据 memset((char*)&targ,0,32); //清空targ.str数据 strncpy(targ.str,(char*)UART_GetRxBufferAddress(), rxLen-2);
memset(IDStr,0,26); //清空IDSTR数据
strncpy(IDStr,ID,strlen(ID));
strncat(IDStr,targ.str, rxLen-2); if(strlen(IDStr)<26) for(int i=( rxLen-2+3);i<26;i++) IDStr[i] = '\0';
if(HomePageFlag==0){
//——————————————————//modified by zhangyanjiao 20180209 去掉单条数据上传,修改FixaMenu-1
if(FixaMenu==4){
strncpy(Sett.OnlineCode,targ.str,OnlineCodeL); //数据存在SNV中 网点 }else if(FixaMenu==5){
strncpy(Sett.CentralCode,targ.str,CentralCodeL); //数据存储到缓存中 中心 }else if(FixaMenu==6){ strncpy(Sett.PurposeCode,targ.str,PurposeCodeL); //数据存在SNV中 目的地 } //————————————————————- }else{
if(Procedure[TaskFlag]==5)
{
strncpy(RWData.ExpressCode,targ.str,ExpressCodeL); //数据存储到缓存中 }
}
if(((Procedure[TaskFlag]==5 &&HomePageFlag==1)|| FixaMenu==4 || FixaMenu==5 || FixaMenu==6)&&StartScanFlag==1)
{
#ifdef LCD_F8x16
// LCD_P8x16Str(0, 2,(unsigned char *)IDStr); //打印扫头数据
#endif
UartFlag=1; }
}else
{
if(((Procedure[TaskFlag]==5 &&HomePageFlag==1)|| FixaMenu==4 || FixaMenu==5 || FixaMenu==6)&&StartScanFlag==1)
UartFlag =2; }}
user5029276:
没有使用低功耗模式
TI中文支持网


