1

我正在 BeagleBoneBlack 上开发应用程序。嵌入式 linux 对我来说很新 =/

我面临的问题是我想实现 RS485 通信,我使用 SeriaLib-Library 编写了一段 C++-Code,目前使用专用 GPIO 来切换 RS485 接口的方向。到目前为止一切都很好。

要编写消息,函数 write 用于以下

write(fd,Message,Lenght);

唯一的问题是在最后一个字节写入总线后立即切换 DIRECTION-Pin =(

在微控制器上开发时,对各种中断等做出反应是没有问题的。

有什么解决方案 - 在内核深处?- 成功传输消息后直接切换引脚?

4

1 回答 1

2

通常在小型微控制器上,在读取最后一个字符后,您可以启用传输完成中断,或者只是在发送例程中忙于等待传输完成标志,然后禁用驱动程序。

但是,一些较重的 MCU 没有传输完成中断,并且多任务操作系统可能不喜欢忙等待(如果您在轮询之间让步,则会引入不希望的延迟)。我想到了两种处理方法。

  1. 由于您要禁用驱动程序,因此听起来您只有一个双向对,并且将接收您传输的所有内容。再加上一些状态跟踪,您可以使用接收中断来知道您的最后一个字符已发送,并禁用驱动程序。(如果其他人阻塞总线,还要处理 RX 错误)

  2. 确定从入队最后一个字符到传输完成的波特率相关时间,并为该时间量设置定时器中断,然后在 ISR 中禁用驱动程序。

于 2014-01-15T16:19:49.447 回答