从文档描述来看,RTC用到了,我的软件中用到了SysTick,产生一个1ms的中断信号,发现使用SysTick会导致蓝牙协议栈异常。是不是蓝牙协议栈使用了SysTick?还是1ms中断频率过高了?在1ms中断的ISR中只执行了很简单的任务,比如增加计数值之类。
此外TMOS_SystemProcess()这个函数在我的后台循环中一直执行,因为固件中还有其它的非TMOS任务,TMOS_SystemProcess()这个函数两次被后台调用的最大间隔是多少?
从文档描述来看,RTC用到了,我的软件中用到了SysTick,产生一个1ms的中断信号,发现使用SysTick会导致蓝牙协议栈异常。是不是蓝牙协议栈使用了SysTick?还是1ms中断频率过高了?在1ms中断的ISR中只执行了很简单的任务,比如增加计数值之类。
此外TMOS_SystemProcess()这个函数在我的后台循环中一直执行,因为固件中还有其它的非TMOS任务,TMOS_SystemProcess()这个函数两次被后台调用的最大间隔是多少?
SysTick 1ms中断,里面只有简单处理问题不大。
主要问题是“固件中还有其它的非TMOS任务”,原则上任务是一定要加到Toms里面执行的,否则可能导致断连或者连接问题。
实测只要使用SysTick,完全无法运行,里面的任务非常简单。就是几个变量增加,作为定时器用。
在CH57X_BLEInit函数中调用下面函数专门关闭了SysTick的中断:PFIC_DisableIRQ(SysTick_IRQn);
协议栈是用RTC实现的625us的定时器?看起来并没有使用SysTick,多次测试发现,只要不开启SysTick中断即可,开启SysTick中断会导致启用协议栈以后工作异常。把1ms中断换成TMR0的TMR0_IRQHandler就好了。