我CC1310的SPI使用的是SDK中的回调函数模式,其中使用了sem_timedwait(&slaveSem,&timeout),要实现在回调函数模式下spi传输的超时(3ms)退出,核心代码如下所示,这样使用是否正确,求解答!!!
struct timespec timeout;
clock_gettime(clock_realtime,&timeout);
timeout.tv_nsec += 3000000;
transferOK = SPI_transfer(slaveSpi,&transaction);
if(transferOK)
{
sem_timedwait(&slaveSem,&timeout);
}
Viki Shi:
if(transferOK) { sem_timedwait(&slaveSem,&timeout); } 我觉得不需要这个if判断,根据transferOK = SPI_transfer(slaveSpi,&transaction);这句,transferOK不成立的原因有很多,如果只是判断超时,建议把sem_timedwait(&slaveSem,&timeout);移出来。 推荐一个网友分享的类似用法:www.cnblogs.com/…/4085336.html
liu shr:
回复 Viki Shi:
这个判断是原来SDK例程中的,我可以去掉试一下,我试试这样做是否有效
liu shr:
回复 Viki Shi:
用这种方式试了下不太行啊,我这边数据老是接收有错。我主要就想有个超时退出的机制
Viki Shi:
回复 liu shr:
原例程测试下来什么问题?两种情况一样吗?
liu shr:
回复 Viki Shi:
原例程使用的时sem_wait(&slaveSem);测试时正确的,但是因为我的spi是slave模式,我想要实现spi传输中断时候的退出,所以使用sem_timedwait(&slaveSem,&timeout);,但是使用sem_timedwait(&slaveSem,&timeout);时候效果不太理想,传输有误码,不知道是不是我使用的有问题。
Viki Shi:
回复 liu shr:
排查下是不是时间参数使用有误