看看ad_uart.c中的代码,我可以看到以下内容:
Void ad_uart_write_async(uart_device dev, const char *wbuf, size_t wlen, ad_uart_user_cb cb,
void * user_data)
{
Uart_device_config *device = (Uart_device_config *) dev;
Uart_bus_dynamic_data *data =设备->bus_data;
if ((device->flags & AD_UART_DEVICE_FLAGS_LOCKING_ASYNC)) {
ad_uart_bus_acquire_ex (dev, AD_UART_RES_TYPE_WRITE);
}
数据- > write_cb = cb;
数据- > write_cb_data = user_data;
Hw_uart_send (device->bus_id, (const uint8_t *) wbuf, wlen, ad_uart_write_callback, dev);
}
当设置AD_UART_DEVICE_FLAGS_LOCKING_ASYNC时,似乎会调用“ad_uart_bus_acquire_ex(..)”函数。
我对这段代码的解释是,当使用async call函数时,如果设置了设备标志,我不需要自己调用ad_uart_bus_acquire_ex(..)。
如何配置UART或适配器,以设置此标志?
致以最亲切的问候
迪特尔
设备:
嗨,迪特尔,
让我检查一下你的问题,然后尽快回复你。
谢谢,PM_Dialog
嗨,迪特尔,
你能不能解释一下你的问题,并分享更多关于你想要实现的目标的信息?通常,我强烈建议您不要修改适配器和SDK文件。适配器应该在SDK提供的时候使用。如果您做了任何修改,也不能保证它们将按预期工作。
谢谢,PM_Dialog
你好,
我想知道如何在异步情况下使用uart适配器。传输模式。文档中的示例仅显示了普通(阻塞)模式。
因此,我查看了适配器代码(我肯定不想更改),我不清楚如何正确使用这段代码。这可以是像示例中那样的代码序列,也可以是在预期的用途是异步传输时如何正确配置UART的一些提示。
我希望这能让你明白我的问题。如果你需要更多的细节来回答我的问题,请告诉我。
致以最亲切的问候
迪特尔
嗨,迪特尔,
请问你指的是哪个例子?您应该使用所需的UART配置打开适配器,应该使用ad_uart_open()来打开适配器。然后,您应该执行ad_uart_write_async()用于异步UART写。最后,您应该使用,直到所有UART事务完成并关闭适配器(ad_uart_close)。
谢谢,PM_Dialog
你好,
我所讨论的示例在您的文档中:DA1468x软件平台参考文档
你在回答中描述的顺序正是我所执行的。所以这并没有真正的帮助。因此,我仔细研究了AD_UART_DEVICE_FLAGS_LOCKING_ASYNC的定义。这个标志在ad_uart_write_async(..)函数中被检查,以执行必要的调用ad_uart_bus_acquire_ex(dev, AD_UART_RES_TYPE_WRITE);
我最初的问题是如何配置这个标志设置的UART。现在我自己发现了它,我的应用程序现在按照预期运行。
问题的答案是:
不是在platform_devices.h文件中使用宏“UART_BUS(..)”,而是必须使用宏UART_DEV(..),因为这个宏也将接受“_flags”参数,在这里我可以放置AD_UART_DEVICE_FLAGS_LOCKING_ASYNC定义。
如果用户想要使用UART的_async -函数,最好将这个提示作为注释添加到文档中。
致以最亲切的问候
迪特尔
嗨,迪特尔,
谢谢分享你的解决方案。我已经要求在下次发布的文件中执行你提出的对文件的补充。
/ MHv