我刚使用Dialog SDK,一直在阅读有关适配器的内容。我可以看到一个简单的解决方案,将挂起的写入写入队列,并使用ad_uart_write()在单个线程上下文中处理它们,这样就不会阻塞其他线程。我不太确定阅读…
是否可能调用ad_uart_read()和ad_uart_write()在同一时间(从不同的线程)互不干扰?我想到了一个UART RX线程,它简单地读取一个块或超时,将RX数据传递给应用程序,然后重复。我想这将具有强大的含义,保持RX启用,但它仅用于调试目的。
设备:
嗨UnicycleBloke,
由于您正在使用适配器,您不能同时从不同的线程调用ad_uart_read()和ad_uart_write()。这是适配器的概念。请注意,适配器是lld(低级别驱动程序)之上的另一层,并不是作为单独的任务实现的。因此,您可以直接使用UART lld(在hw_uart.h文件中描述)或UART适配器(在ad_uart.h文件中描述),而不干预UART lld。我们建议使用适配器来访问硬件外设,因为这不仅提供了对外设的访问,而且还确保当前正在访问它的其他任务暂停其操作,直到外设再次被释放。因此,如果另一个任务试图在同一时间访问同一外设,您不必担心。我强烈建议您看一下第12.3.1章的UART适配器示例UM-B-044用户手册:DA1468x软件平台参考(HTML)从我们的支持门户。
谢谢,PM_Dialog
谢谢你的回复。老实说,我更愿意写我自己的裸金属驱动程序(这是我已经做了与北欧,STM32, EFM32和其他部分),但太不熟悉的对话部分,目前做这一点,我的主要关心是正确管理电源。我觉得很奇怪,UART被适配器强迫成为半双工设备:这似乎是不需要的。
我将浏览一下这个例子。
谢谢。
嗨UnicycleBloke,
正如在前一篇文章中已经提到的,我们强烈建议使用适配器来访问硬件外设。如果您不喜欢使用适配器,那么第二种选择是使用LLD。这是我们可以提供支持的两种选择。在您的情况下,如果您想实现自己的驱动程序,我们将无法提供任何支持。是的,请浏览一下如何使用UART适配器的推荐示例。
谢谢,PM_Dialog