当前位置: 首页 > news >正文

最有效的网站推广费用可以玩小游戏的网站

最有效的网站推广费用,可以玩小游戏的网站,xampp下wordpress,科讯怎么建设网站上位机版#xff08;Python#xff09;要实现根据串口接收结果高效切换四个 while 循环函数#xff0c;我们可以采用状态机模式#xff0c;配合非阻塞串口读取来设计程序结构。这种方式可以实现快速切换#xff0c;避免不必要的资源消耗。下面是一个高效的实现方案#x…上位机版Python要实现根据串口接收结果高效切换四个 while 循环函数我们可以采用状态机模式配合非阻塞串口读取来设计程序结构。这种方式可以实现快速切换避免不必要的资源消耗。下面是一个高效的实现方案使用状态变量控制当前执行的循环并通过非阻塞方式检查串口数据 import serial import time import threading from enum import Enum# 定义状态枚举清晰表示四个不同状态 class State(Enum):STATE_1 1STATE_2 2STATE_3 3STATE_4 4class SerialStateMachine:def __init__(self, portCOM3, baudrate9600, timeout0.1):# 初始化串口self.ser serial.Serial(port, baudrate, timeouttimeout)self.current_state State.STATE_1 # 默认初始状态self.running True # 程序运行标志self.lock threading.Lock() # 线程锁确保状态切换安全# 启动串口监听线程self.serial_thread threading.Thread(targetself._serial_listener, daemonTrue)self.serial_thread.start()def _serial_listener(self):串口监听线程非阻塞读取指令while self.running:if self.ser.in_waiting 0:# 读取并处理串口数据command self.ser.readline().decode().strip()self._process_command(command)time.sleep(0.01) # 短暂休眠降低CPU占用def _process_command(self, command):处理接收到的命令切换状态command_map {1: State.STATE_1,2: State.STATE_2,3: State.STATE_3,4: State.STATE_4,exit: None # 退出程序}new_state command_map.get(command)if new_state is None and command exit:self.running Falseprint(收到退出指令程序将终止)elif new_state:with self.lock:self.current_state new_stateprint(f切换到状态: {new_state})def state_1_loop(self):第一个循环函数start_time time.time()while True:# 检查是否需要切换状态with self.lock:if self.current_state ! State.STATE_1:return# 状态1的业务逻辑elapsed time.time() - start_timeprint(f状态1运行中 - {elapsed:.2f}秒, end\r)# 控制循环频率避免CPU占用过高time.sleep(0.1)def state_2_loop(self):第二个循环函数start_time time.time()while True:with self.lock:if self.current_state ! State.STATE_2:return# 状态2的业务逻辑elapsed time.time() - start_timeprint(f状态2运行中 - {elapsed:.2f}秒, end\r)time.sleep(0.1)def state_3_loop(self):第三个循环函数start_time time.time()while True:with self.lock:if self.current_state ! State.STATE_3:return# 状态3的业务逻辑elapsed time.time() - start_timeprint(f状态3运行中 - {elapsed:.2f}秒, end\r)time.sleep(0.1)def state_4_loop(self):第四个循环函数start_time time.time()while True:with self.lock:if self.current_state ! State.STATE_4:return# 状态4的业务逻辑elapsed time.time() - start_timeprint(f状态4运行中 - {elapsed:.2f}秒, end\r)time.sleep(0.1)def run(self):主运行函数根据当前状态执行相应循环state_mapping {State.STATE_1: self.state_1_loop,State.STATE_2: self.state_2_loop,State.STATE_3: self.state_3_loop,State.STATE_4: self.state_4_loop}print(程序启动等待串口指令...)print(发送 1-4 切换状态发送 exit 退出程序)while self.running:# 获取当前状态对应的函数并执行current_func state_mapping.get(self.current_state)if current_func:current_func()time.sleep(0.05)# 清理资源self.ser.close()print(\n程序已退出)if __name__ __main__:try:# 根据实际情况修改串口参数machine SerialStateMachine(portCOM3, baudrate9600)machine.run()except serial.SerialException as e:print(f串口错误: {e})except KeyboardInterrupt:print(\n用户中断程序) 这个程序结构的高效性体现在以下几个方面独立串口监听线程使用单独的线程处理串口数据接收避免阻塞主循环确保指令能被及时处理。状态机设计通过枚举类型明确定义四个状态使状态切换逻辑清晰易于维护和扩展。非阻塞检查每个循环函数内部定期检查状态是否变化一旦收到切换指令能立即退出当前循环切换到新状态。线程安全使用线程锁保证状态变量的线程安全访问避免多线程操作导致的状态不一致。资源控制每个循环都有适当的休眠时间避免 CPU 占用过高。使用时只需通过串口发送 1、2、3、4 即可切换到相应的循环发送 exit 则退出程序。你可以根据实际需求在四个状态循环函数中实现具体的业务逻辑。Openmv版MincroPython在 OpenMV 上提升代码逻辑的运行反应速度需要结合其硬件特性基于 MicroPython资源有限主打机器视觉和应用场景状态切换、串口通信、实时处理进行针对性优化。以下是具体的优化方向和实现方法一、代码结构优化减少冗余与阻塞OpenMV 的 CPU 性能有限如 H7 型号为 480MHz但 MicroPython 解释执行效率低于原生 C需避免冗余计算和长时间阻塞。1. 简化状态切换逻辑减少检查开销原状态机中若使用threading.Lock等线程同步机制会引入额外开销。OpenMV 的线程支持较弱无真正多线程仅为分时调度可改用轻量状态变量 非阻塞检查。示例用全局变量直接存储状态无需锁在循环中快速检查状态是否变化避免复杂的上下文切换。 import time from pyb import UART# 状态定义用整数代替Enum减少属性查找开销 STATE_1 1 STATE_2 2 STATE_3 3 STATE_4 4 current_state STATE_1# 串口初始化非阻塞模式 uart UART(3, 115200) # 根据实际引脚配置 uart.init(115200, timeout_char10) # 缩短超时时间快速返回def check_serial():非阻塞读取串口指令直接修改全局状态global current_stateif uart.any(): # 检查是否有数据比in_waiting更高效cmd uart.readline().strip().decode()if cmd 1:current_state STATE_1elif cmd 2:current_state STATE_2# ... 其他状态def state_1():while current_state STATE_1:# 业务逻辑避免复杂计算check_serial() # 循环内快速检查串口time.sleep_ms(10) # 短延迟平衡响应速度与CPU占用# 主循环 while True:if current_state STATE_1:state_1()elif current_state STATE_2:state_2()# ... 其他状态 2. 避免嵌套循环与深层调用嵌套循环会增加栈开销和条件判断时间尽量将逻辑扁平化。减少函数调用层级OpenMV 的函数调用开销较高核心逻辑可适当 “内联”避免频繁调用小函数。二、硬件资源优化利用 OpenMV 专属特性1. 优化串口通信效率降低波特率若无需高速通信可将波特率从 115200 降至 9600减少误码率和处理时间。固定指令格式用单字节指令如b1代替字符串1避免复杂的字符串解析decode()、strip()耗时。 # 优化直接处理字节避免字符串转换 def check_serial_fast():global current_stateif uart.any():cmd uart.read(1) # 读取1字节指令if cmd b1:current_state STATE_1elif cmd b2:current_state STATE_2 使用中断接收OpenMV 的 UART 支持中断uart.irq()可在数据到达时立即触发处理避免循环中轮询的开销。 def uart_irq_handler(uart):global current_statecmd uart.read(1)if cmd b1:current_state STATE_1# ...# 注册中断 uart.irq(handleruart_irq_handler, triggerUART.IRQ_RXNE) # 接收非空时触发 2. 控制循环延迟平衡响应与性能原代码中time.sleep(0.1)100ms可能导致响应滞后可缩短至time.sleep_ms(10)10ms但需避免过度缩短导致 CPU 占用过高反而卡顿。用pyb.millis()毫秒级定时器替代time.time()减少时间获取的开销time.time()返回浮点数计算耗时。 # 优化用毫秒计时减少计算开销 def state_1():start_ms pyb.millis()while current_state STATE_1:elapsed pyb.millis() - start_ms# ... 业务逻辑time.sleep_ms(10) # 10ms延迟响应更快 三、内存管理减少 GC垃圾回收干扰OpenMV 的内存较小如 H7 为 32MB频繁的内存分配会触发 GC导致卡顿。1. 预分配内存避免动态创建对象循环中避免频繁创建列表、字符串等对象提前定义并复用。 # 优化前每次循环创建新字符串 while True:print(f状态1运行中: {elapsed}ms) # f-string会动态创建字符串# 优化后复用缓冲区 buf bytearray(32) # 预分配缓冲区 while True:# 用sprintf格式化到缓冲区C风格更快buf[:] b # 清空pyb.uart_write_str(uart, 状态1: %dms\n % elapsed) # 避免字符串拼接 2. 禁用自动 GC手动触发自动 GC 会在内存不足时突然执行导致卡顿。可禁用自动 GC在空闲时手动触发。 import gcgc.disable() # 禁用自动垃圾回收def state_1():while current_state STATE_1:# ... 业务逻辑if pyb.millis() % 1000 0: # 每1秒手动回收一次gc.collect() 四、固件与工具链优化1. 使用最新固件OpenMV 官方会持续优化固件如提升 MicroPython 执行效率、修复硬件驱动 bug最新固件通常比旧版本运行更快。烧录方法通过 OpenMV IDE 的「Tools → Install Firmware」直接升级确保型号匹配。2. 开启代码编译优化OpenMV IDE 支持将 Python 代码编译为字节码.mpy执行速度比纯脚本.py快 30% 以上。操作「Tools → Save as .mpy」将main.py编译为main.mpy放入 SD 卡OpenMV 会优先执行.mpy。五、避免耗时操作阻塞主循环1. 减少打印输出print()会通过 USB 串口传输数据速度慢且阻塞执行。调试完成后应删除冗余打印或用条件编译关闭。 DEBUG False # 发布时设为Falseif DEBUG:print(调试信息) # 仅调试时输出 2. 分离耗时任务如图像处理若涉及摄像头图像处理尽量使用 OpenMV 内置的 C 实现函数如img.find_blobs()避免用纯 Python 处理像素速度极慢。将图像处理与状态切换分离在单独的短周期内处理图像结果存入全局变量状态循环仅读取结果不直接处理。总结关键优化点简化状态逻辑用全局变量 轻量检查替代线程和锁。优化串口用中断接收 字节指令减少解析开销。控制延迟缩短sleep时间至 10-50ms平衡响应与性能。内存管理预分配对象 手动 GC避免卡顿。利用硬件特性用内置函数C 实现、编译.mpy文件。通过以上方法可显著提升 OpenMV 代码的响应速度尤其适合需要快速切换状态的串口控制场景。
http://www.zqtcl.cn/news/77066/

相关文章:

  • 免抵退税在哪个网站做建设门户网站需要注意什么
  • 广告公司寮步网站建设陕西西安网站建设公司
  • 哪些做调查问卷挣钱的网站咨询公司网站设计
  • 校园门户网站开发需求h5制作软件有中文版吗
  • wordpress 前台密码昆山做网站优化
  • 交易网站开发合同公司建设电子商务网站的目的
  • 网站制作超链接怎么做app开发公司 上海
  • 易思企业网站管理系统无锡网站设计公司排名
  • 腾讯云 门户网站建设网络营销专业背景
  • 网站服务器送一年多用户 开源oa 系统
  • 网站的规划与创建sogo提交网站入口
  • 做营销型网站哪家好如何帮网站
  • 怎么建设英文网站seo搜索优化软件
  • 网站营销软文急招二级建造师
  • 道滘做网站创建企业手机微信网站门户
  • wordpress 取消自适应厦门做网站优化的公司
  • 家政服务 技术支持 东莞网站建设珠海特价做网站
  • 做外贸单网上都做的那些网站wordpress半透明主题
  • 中国住房和建设部厅查询网站网站开发全科班
  • 网站上传大文件wordpress 倒计时
  • 网站后缀有哪些wordpress如何去掉amp
  • 徐州网站建设xzqjw平邑网站开发
  • 北京高端网站设计自己做的网站某个网页打开很慢
  • 免费企业建站模板wp做网站
  • 局域网站建设模版个人网站怎么建立要多少钱
  • 网站建设的重要性意义黑龙江省住房和城乡建设厅网站
  • 建设部网站施工员查询广东东莞厚街买婬女
  • 西安企业门户网站建设推广品牌
  • 合肥个人做网站北京网站备案拍照地点
  • 海口建设公司网站wordpress 滑动菜单