在使用4G模块时,我们使用了AT Client,但我们发现,在连续收发数据时,会发生at_client 不处理收到的数据的情况,后来跟踪进去,发现 at_client_getchar 中的 rt_sem_take 阻塞,全其实此时串口缓冲区是有数据所,所以怀疑 串口中断接收很频繁时,rt_sem_release与 rt_sem_take 没有正常工作
所以将 at_client_getchar接口修改一下,先读数据,如果没有数据再rt_sem_take阻塞之
另:此处串口收数据处理觉得很低效,使用普通串口RX中断时,每收到一个字节则 rt_sem_release 唤醒 client_parser 任务,太过频繁,有些串口有收idle中断,可以考虑用这个,或者直接使用定时器解包串口收数据缓冲区
不能读多个,因为读取的时候会清除串口缓冲区,而读取的数据有时候不能一次处理,AT指令要一行一行的处理。
我的出问题是因为串口缓冲区有数据,但确并没有唤醒AT Client 任务。