看看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 = device->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(..)”函数。
我对这段代码的解释是,当使用异步调用函数时,如果设置了设备标志,我不需要自己调用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