小编nek*_*tip的帖子

如何使python等待对象

python 3.5.1中,可以使用await/async,但是,要使用它(因为我不支持),你需要有一个等待对象.等待对象是一个定义__await__()返回迭代器的方法的对象.更多信息在这里.但我不能谷歌任何有这个的例子,因为大多数例子都有某种asyncio.sleep(x)来模仿等待对象.

我的最终目标是制作简单的websocket串口服务器,但是,我无法通过这第一步.这是我的(非工作代码).

import serial
import asyncio

connected = False
port = 'COM9'
#port = '/dev/ttyAMA0'
baud = 57600
timeout=1

class startser(object):

    def __init__(self, port, baud):
        self.port = port
        self.baud = baud       

    def openconn(self):       
        self.ser = serial.Serial(port, baud)

    async def readport(self):
        #gooo= await (self.ser.in_waiting > 0)
        read_byte = async self.ser.read(1).decode('ascii')        
        self.handle_data(read_byte)
        print ("42")  

    def handle_data(self, data):
        print(data)

serr=startser(port,baud)
serr.openconn()

loop = asyncio.get_event_loop()
#loop.run_forever(serr.readport())
loop.run_until_complete(serr.readport())
loop.close()

print ("finitto")

#with serial.Serial('COM9', 115200, timeout=1) as …
Run Code Online (Sandbox Code Playgroud)

python pyserial websocket async-await python-3.5

9
推荐指数
1
解决办法
4559
查看次数

在执行nointerrupts()函数时,新的中断是否会在中断()之后排队并执行?

AVR MCU(Arduino)会记住nointerrupts()部分中发生的所有中断吗?

void f1() {
  noInterrupts();
  // critical, time-sensitive code here
  interrupts();
}
//now jump to queued interrupts if any
Run Code Online (Sandbox Code Playgroud)

它会在之后执行interrupts()吗?

我问这个是因为在阅读了数据表之后,我觉得所有的中断都有它们的标志,所以这可能没问题.但我不是那么经验丰富,我可能会遗漏一些东西,因为其他教程总是模糊地说"不要在那里停留太长时间,因为当时根本不会发生中断".

为什么?

我有一个循环缓冲区,我从I2C中放入一些数据包(只要发生I2C中断,它们就被放置).我也偶尔在主循环中读取这个缓冲区,在不可预测的时间允许覆盖.

另外,我在相反的方向上使用相同的缓冲类(但是不同的实例)(I2C然后触发中断和读取).

我的问题是:我想在非中断读/写期间关闭中断,所以我可以确定我不会遇到I2C触发并覆盖当前从正常主循环读取的项目的情况.

我现在有种处理与前和读取后标志的情况,因此中断首先检查的项目是免费的,但我不是这种方法有信心,我想,使其与工作noInterrupts()interrupts()阅读主循环中.

谢谢.

avr arduino

2
推荐指数
1
解决办法
410
查看次数

当修改数组中的类元素时,它的行为就像是副本而不是引用

这是一个简单的事情,我不确定它是否可以在C++中像其他语言一样.事物的行为就像它是一个副本,但不是同一个对象.我希望如果这是结构,或其他一些值类型 - 这将是预期的行为,但对于类,我期望这表现得像我正在看"引用",即 - 与数组中的相同对象.我究竟做错了什么?

// Example program
#include <iostream>
#include <string>


class someclass
{
    public:        
    void setn(int n2);
    int n=10;
};

void someclass::setn(int n2){
    n=n2;
};


int main()
{
  someclass moreofthem[5];   
  someclass my=moreofthem[1];  
  std::cout << "start value: " << my.n << " as inital\n"; //10
  my.setn(2);  
  std::cout << "new value: " << my.n << " as expected\n"; //2
  std::cout << "value in list: " << moreofthem[1].n << " why?\n";  //10?

}
Run Code Online (Sandbox Code Playgroud)

c++ reference

1
推荐指数
1
解决办法
56
查看次数

标签 统计

arduino ×1

async-await ×1

avr ×1

c++ ×1

pyserial ×1

python ×1

python-3.5 ×1

reference ×1

websocket ×1