我们的业务逻辑是EC20组件通过UART串口发送数据和接收数据,第一次业务逻辑里面有个获取网络状态,通过UART_write()函数,是可以顺利通过的,但是当第二次调用获取网络状态时,UART_write()函数就会发生阻塞,将time_out超时时间修改成300000(300ms)也出不来。具体卡在的代码处为:
if (!Semaphore_pend(Semaphore_handle(&(object->writeSem)), object->writeTimeout))
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.
我们的业务逻辑是EC20组件通过UART串口发送数据和接收数据,第一次业务逻辑里面有个获取网络状态,通过UART_write()函数,是可以顺利通过的,但是当第二次调用获取网络状态时,UART_write()函数就会发生阻塞,将time_out超时时间修改成300000(300ms)也出不来。具体卡在的代码处为:
if (!Semaphore_pend(Semaphore_handle(&(object->writeSem)), object->writeTimeout))
这种情况没有测试过,之前做过这种测试:EC20断开,将串口的收发连接到一起测试,遇到过串口收数信号量阻塞卡住的情况,这个问题当时就把收发分成两个任务处理就不阻塞了。现在我们应用代码业务比较多,就在考虑我们目前遇到的串口发送数据信号量阻塞的情况会不会也跟任务调度有关。我们目前的任务调度方式是:串口的发送数据和接收数据是一个单独的任务去调度,串口的初始化也是在这个单独的任务中完成的。阻塞模式下,我们这种要通过串口跟EC20交互的需求,在任务调度时有什么需要注意的么?