从Arduino C到Raspberry pi python - 在线程内部的volatile变量访问

时间:2014-11-18 07:37:33

标签: python c multithreading arduino raspberry-pi

我正在开发基于arduino的小型嵌入式系统,它使用中断来计算事件。 代码是这样的:

 volatile float count= 0;
 attachInterrupt(0, increaseCount, CHANGE); 

 void increaseCount(){
 ++count;
 }

count变量应该是volatile,以便在中断内访问它。 现在,我正在使用python在Raspberry pi上编写它。但是,python没有任何名为volatile的东西。那么,是否存在另一种在线程/事件期间增加变量的技术。 当事件发生并且变量增加时,python会给我错误。

  File "MyApp.py", line 5, in my_callback
  count += 1
  UnboundedLocalError: local variable 'count' referenced before assignment

任何帮助??

1 个答案:

答案 0 :(得分:3)

不,Python中没有volatile这样的东西,这是一个太低级别的概念。

您应该确保存在变量可以驻留的某些共享上下文(如对象实例),以便可以在两个上下文之间共享它。 Python将完成剩下的工作。

class MyApp(object):
  def __init__(self):
    self._counter = 0
    registerInterrupt(self.interruptHandler)

  def interruptHandler(self):
    self._counter += 1

  def getCount(self):
    return self._counter

这样的事情就足够了,当然你必须填写详细信息并进行必要的调用以创建MyApp的实例,并确保有一个函数registerInterrupt()这样就可以将回调设置到实例中。

另外,请注意C中的counter事件几乎不应该是float,这是非常奇怪的设计。