首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于CAN总线访问的Popen的更快替代方案?

用于CAN总线访问的Popen的更快替代方案?
EN

Stack Overflow用户
提问于 2013-05-05 09:23:41
回答 1查看 1.9K关注 0票数 1

我目前正在使用Popen向一个实用程序发送指令(canutils...特别是cansend功能)。

整个函数如下所示。

代码语言:javascript
复制
def _CANSend(self, register, value, readWrite = 'write'):
    """send a CAN frame"""
    queue=self.CANbus.queue
    cobID = hex(0x600 + self.nodeID)     #assign nodeID
    indexByteLow,indexByteHigh,indexByteHigher,indexByteHighest = _bytes(register['index'], register['objectDataType'])
    subIndex = hex(register['subindex'])
    valueByteLow,valueByteHigh,valueByteHigher,valueByteHighest = _bytes(value, register['objectDataType'])
    io = hex(COMMAND_SPECIFIER[readWrite])
    frame = ["cansend", self.formattedCANBus, "-i", cobID, io, indexByteLow, indexByteHigh, subIndex, valueByteLow, valueByteHigh, valueByteHigher, valueByteHighest, "0x00"]
    Popen(frame,stdout=PIPE)
    a=queue.get()
    queue.task_done()
    return a

我遇到了一些问题,因为我试图快速连续地发送帧( Popen帧实际上执行发送帧的命令),但发现Popen行的执行时间大约为35ms……每隔一条线都不到两个我们。

所以..。有什么更好的方法可以更快地调用cansend函数(也是canutils实用程序的一部分……_CANSend是上面调用的python函数)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-05 10:34:14

我怀疑大部分时间是由于每次运行cansend时forking的开销造成的。为了摆脱它,您需要一种不必为每次发送创建新进程的方法。

根据this blog post的说法,Python3.3支持SocketCAN。它应该让你的程序直接创建和使用CAN套接字。这可能是你想要的方向。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16380528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档