器件型号:CC3220
工具/软件:TI-RTOS
我一直在搜索相关帖子以解决此问题、但我尚未找到解决方案。 我们在随机运行任务/系统的一段时间后得到此错误。 我们无法看到何时生成错误的模式。 错误的地址与我们的一个信标相关联。 这个信号量在我们的一个定时器中断内设定。 它用于向要运行的另一个任务发出信号。 请参阅随附的图像以供参考。 我们需要尽快解决方案。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
器件型号:CC3220
工具/软件:TI-RTOS
我一直在搜索相关帖子以解决此问题、但我尚未找到解决方案。 我们在随机运行任务/系统的一段时间后得到此错误。 我们无法看到何时生成错误的模式。 错误的地址与我们的一个信标相关联。 这个信号量在我们的一个定时器中断内设定。 它用于向要运行的另一个任务发出信号。 请参阅随附的图像以供参考。 我们需要尽快解决方案。
struct ti_SysBIOS_KNL_Semaphore_Structt{ TI_SYSBIOS_KNL_Event_Handle __f0; XDC_UINT __F1; TI_SYSBIOS_KNL_Semaphore_Mode __f2; 易失性 XDC_UINT16 __f3; TI_SYSBIOS_KNL_Queue_Struct__F4; xdc_runtime_Types_CordAddr __name; };
您引用了什么空指针?
结果表明、内核并未完全从嵌套中断中解压、因为未发送的中断被放置到矢量表中。
这是客户代码的问题
uartHandle = UART_OPEN (Board_UART1、uartParams);
UARTIntRegister (UARTA1_base、customerFxn);//问题!
最后一行是改写内核的发送程序函数,该函数将调用 TI 驱动程序的 UART 函数(UARTCC32XX_hwiIntFxn)。
下面是问题的发生方式
UART ISR 置为有效(优先级224)并运行发送程序的存根函数的 customerFxn ...no。
NWP 中断触发并运行调度程序存根、该存根调用_SlDrvRxIrqHandler。 注意:这会取代 UART ISR、因为 NWP 具有更高的优先级(32)
_SlDrvRxIrqHandler 执行其任务并返回到调度程序存根。 存根看到它是嵌套的(通过 HW 寄存器)、因此不会对整个调度程序进行彻底的解除
UART ISR 完成其业务并退出(不会解除调度员的缠绕)。 任务处理已锁定
任务调用 semaphore_pend 并获取断言(或者如果断言被禁用…进入杂草)。
有几种不同的方法可以解决此问题、但我们使用了以下方法来最大限度地减少对现有代码的影响:
uartHandle = UART_OPEN (Board_UART1、uartParams);
KEY = Hwi_disable();
hwiHandle = Hwi_getHandle (INT_UARTA1);
Hwi_setFunc (hwiHandle、customerFxn、0);
Hwi_restore (key);
现在、该功能仍会派送并正确松开。 注意:UART1上的 UART_READ/WRITE 未在代码中完成。 客户 Fxn 正在做它所需要的一切。 其他选项在长期运行中更清晰(按照设计使用 UART_READ/WRITE、编写您自己的 UART 驱动程序等)。
Todd