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.
我已经在论坛上搜索过,并查看了现有的 UART 单元测试和示例项目。
信息就在这里,我只需要一只手连接点。
为了提供背景信息,在项目的初始阶段,我们希望 通过 UART 推送记录器数据。
“记录器数据”是指您通常通过 System_printf()发送的标准调试日志,但它不是在 CCS 中打印出来,而是通过由 MSS 拥有的 UART 进行打印。
这里有很多示例,说明如何制作自己的使用 UART 的 printf 变体,但在这种情况下,它必须尽可能地高性能。
“性能”一词是主观的,因此要进一步阐述,我想构建这种日志记录机制,以使其具有很低的优先级,并且不会阻止任务执行,也不会从另一个任务中获取资源。
我认为这种类型的初始调试日志记录是“可以拥有的”,而不是系统的关键部分。 也就是说,我不希望这种机制影响雷达的执行或信号处理。 幸运的是,逻辑存在于 DSS 中,因此理论上它不应该产生影响,但你会得到这个想法。
根据我目前的调查,mmWave SDK 提供了两种主要的数据推送方法:
功能:
UART 写入()
描述:
-在启用中断的情况下将数据写入 UART。 将阻止任务执行,直到写入缓冲区中的所有数据
功能:
UART 写入 Polling()
描述:
-将数据写入 UART,轮询外围设备以等待写入新数据。 在所有数据写入 UART 之前,不会返回
在研究了这两个问题后,我仍然不清楚哪个问题最有意义。 根据上述描述,一个将“在写入所有数据之前不返回”,另一个将“阻止任务执行”。
我希望有一种方法让 UART 知道有数据要发送,一旦循环释放,它将在闲置时间协调事务。 这样资源争用最小,并且假设调用来自低优先级任务,其他高优先级任务可能会在需要时跳进并执行。
我的上述解释是否正确? 如果是这样,是否有首选哪条路由用于此方案(日志记录)?
谢谢!
您好,
此处的 UART 缓冲区是指与 UART 外围设备关联的缓冲区。 通常,对于此处提到的用例,需要将日志放入本地缓冲区(由 SW 维护,该软件会记录日志),并在任务有机会且 UART 是空闲时发送到 UART。 当 UART 外围缓冲区中的字节被发送出去时,将生成中断。 希望这能回答您的问题。
此致,
苏丹 K N
好的一点是,维护一个内部循环缓冲区是有道理的,它可以存储记录器数据。
在评论中:
“当任务有机会且 UART 是免费的时候”
是否有这样的功能的示例,即使用 UART 检查是否空闲,任务是否空闲? 这是否意味着使用 UART_writePolling()或 UART_write()?
谢谢!
您好,
这些示例在 C:\ti\mmWave_SDK_03_05_00_04\packages \ti\drivers\UART\test\xwr68xx 中提供。 如果您有任何疑问,请同时查看,并告诉我。
此致,
苏丹 K N
我在 上面提到了这些单元测试,我在发布前仔细检查了这些测试,但主要的问题是,您是使用 UART_writePolling()还是 UART_write()。 目标是在任务完成后不阻止和处理 UART。
当我查看上面提到的 API 说明时,它们似乎都表示它们是阻塞的,所以我只是想确保我先了解这部分。
功能:
UART 写入()
描述:
-在启用中断的情况下将数据写入 UART。 将阻止任务执行,直到写入缓冲区中的所有数据
功能:
UART 写入 Polling()
描述:
-将数据写入 UART,轮询外围设备以等待写入新数据。 在所有数据写入 UART 之前,不会返回
您好,
对于非阻塞,请使用 UART_WRTE()。
此致,
苏丹 K N