- 博客(46)
- 收藏
- 关注
原创 上位机开发中的设计模式(3):装饰器模式
装饰器模式是一种结构型设计模式动态地给对象添加额外功能,而不改变其原有结构通过**包装(wrapping)**原始对象来提供增强功能遵循开闭原则(对扩展开放,对修改关闭)UML核心组件Component:定义原始对象的接口:原始对象的具体实现Decorator:持有Component引用并实现相同接口:具体的装饰器实现。
2025-06-14 11:38:49
590
原创 上位机开发过程中的设计模式体会(2):观察者模式和Qt信号槽机制
摘要: 观察者模式与Qt信号槽机制均用于对象间通信,核心目标是解耦和一对多通知。联系在于两者均支持事件驱动和松耦合设计,但区别显著:观察者模式需手动管理观察者列表(代码量大),适用于通用C++场景;信号槽依赖Qt框架,通过元对象系统自动处理连接,语法简洁且支持跨线程通信。选择依据:非Qt项目或需精细控制时选观察者模式;Qt项目优先信号槽,尤其涉及GUI或多线程。信号槽是观察者模式在Qt中的高阶封装,权衡性能换取开发效率。(150字)
2025-06-10 20:30:06
588
原创 上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
本文分享了QT/C++开发中三种创造型设计模式的应用体会。工厂方法模式通过动态配置生成不同测试对象,符合开闭原则但会增加子类复杂度;单例模式用于管理日志系统和独占设备,确保全局唯一实例但可能造成高耦合;生成器模式灵活构建SCPI设备对象,适合复杂构造场景但可能过度设计。这三种模式分别适用于创建相似对象、管理全局资源和构建复杂对象等场景,合理使用能显著提升代码的可维护性和扩展性。
2025-06-09 22:19:41
1021
原创 C++ QT 如何生成dll提供給python使用
在 Qt Creator 中生成一个包含device.dll(供 C++ 使用)和(通过 C 接口供 Python 调用)的项目,需要分步骤配置。
2025-04-02 22:39:31
669
原创 CMOS HBLANK和VBLANK
/ VBLANK 高字节 (0x0414 = 1044 行,含有效行 + VBLANK)[有效行1] [HBLANK] [有效行2] [HBLANK] ... [有效行N] [VBLANK(多行HBLANK)]一帧的垂直消隐期(VBLANK)由多行组成,每一行结束时都会有一个水平消隐期(HBLANK)。作用:为传感器提供时间完成当前行的读取,并准备下一行的扫描(例如复位模拟电路、切换行地址)。在全局快门传感器中,VBLANK 是曝光时间的一部分(曝光通常在 VBLANK 之前完成)。
2025-03-25 10:40:17
1456
原创 C++ QT chip layout tool开发浅思
工作中需要利用padlist + Chip size + Chip Center + Pixel size + Pixel Center生成一副Chip Layout tool SVG图像。
2024-12-20 17:47:55
368
原创 C++ QT UI日志更新
来异步地更新文本编辑器。这意味着更新文本编辑器的操作将在事件队列中排队,稍后由Qt的事件循环处理。这样做的好处是,如果这个函数是在非GUI线程中调用的,它可以安全地更新GUI组件,而不会违反Qt的线程安全规则。C++ QT进行Log记录,打印然后更新在UI上,一般可以通过QPlainTextEdit进行信息更新。但存在一个问题,可能在关闭exe时会因为访问已经release的对象造成内存溢出。确保了信号和槽的调用是异步的,即在接收者的事件处理线程中执行。可以使用以下方法进行log的记录。
2024-11-15 10:59:37
512
原创 C++ QT 工具日志异步分批保存
使用Qt的信号和槽机制,将文件写入操作异步化。您可以创建一个槽函数来处理文件写入,并在需要保存数据时发射一个信号,槽函数在接收到信号后异步执行文件写入操作。:类似于Linux的logcat技术,您可以将大量数据分批次写入文件,每次只处理一小部分数据,这样可以减少单次操作的时间,避免长时间的阻塞。这样可以确保主线程的响应性,不会因为长时间的文件操作而卡死。:将耗时的文件写入操作放在一个单独的线程中执行,这样可以避免阻塞主线程。多线程能力,将耗时任务交由子线程执行,避免主线程的长时间阻塞。
2024-11-12 09:52:00
502
原创 C++ QT 信号槽 connect
函数用于连接信号和槽。如果你尝试将同一个信号连接到同一个槽多次,Qt会确保槽函数被调用多次,每次信号发出时都会触发槽函数多次。槽函数中有状态改变或副作用,那么这些改变或副作用也会被多次执行,可能会导致逻辑错误或不一致的状态。:如果槽函数中涉及到内存分配或其他资源管理,多次调用可能会导致资源泄露或其他问题。槽函数会被调用三次。:这可能会导致不必要的性能开销,因为槽函数会被不必要地多次调用。,这样你可以根据需要处理这种情况,比如记录日志或者忽略重复连接。这样可以确保每次都是重新建立连接,避免重复连接的问题。
2024-11-01 15:15:19
629
2
原创 经历过的两款TestTool的架构简画
公司A野蛮而健壮基于Visual Studio ,以C++ 作为基础语言,用MFC写界面;测试对象是半模乃至整机阶段的手机;测试工具需要和手机、各个外部治具,Mes进行交互;使用者是各个自有工厂和代工厂公司B草创未久基于pycharm,以python语言进行脚本开发,没有UI界面测试对象是FPGA乃至整机阶段的蓝牙耳机测试工具需要交互的对象是耳机、手机,使用者是测试组成员。
2024-07-19 15:44:20
297
原创 C++ Debug:如何使用DbgHelp来为crash的release版本收集崩溃信息
【代码】C++ Debug:如何使用DbgHelp来为crash的release版本收集崩溃信息。
2024-04-09 09:36:18
456
原创 低功耗蓝牙BLE-Advertising State/Scanning State
低功耗蓝牙BLE-Advertising State/Scanning State
2022-05-16 20:44:04
872
1
转载 C++ essential(Day 3)
函数指针指向某种特定类型,函数的类型由其参数及返回类型共同决定,与函数名无关。举例如下: data_types (*func_pointer)( data_types arg1, data_types arg2, ...,data_types argn);eg:intadd(intnLeft,intnRight);//函数定义该函数类型为int(int,int),要想声明一...
2019-06-05 21:54:53
232
原创 C++ essential(Day 2)(重载函数和模板)
重载函数(overload function) 在C语言中,不允许函数有同名函数,C++通过重载函数名来避免这类麻烦。你可以在同一个程序里使用同名的两个或多个函数。函数名重载可以让函数使用起来更“自然”。使用了重载的程序也更容易读和写。 C++中声明重载的函数跟声明其它函数没什么不同。只不过它跟其它的某个函数重名。重载函数必须使用不同的变量,否则编译器没法区分它们。...
2019-06-04 20:51:16
237
原创 C++ essential(day 1)
对于一个完整的程序,在内存中的分布情况如下图: 栈区: 由编译器自动分配释放,像局部变量,函数参数,都是在栈区。会随着作用于退出而释放空间。栈由系统自动分配,速度较快,在windows下栈是向低地址扩展的数据结构,是一块连续的内存区域,大小是2MB。 堆区:程序员分配并释放的区域,像malloc(c),new(c++) 。堆需要程序员自己申请,并指明大小,速度比较慢。在C中用mall...
2019-06-04 20:05:23
286
原创 tensorboard 遇到的错误
1.writer=tf.summary.FileWriter("./",sess.graph)可以将graph保存到当前文件夹2.利用G: ,cd dir进入gragh的上级目录3.tensorboard --logdir=new(new为graph保存的当前目录)4.可以获得Starting TensorBoard b'54' at http://DESKTOP-FUCN962:...
2018-07-17 10:22:34
875
原创 两个月的懈怠
Numpy的基础:import numpy as npa_array=np.arange(-10,10)#产生一个步进为一的序列,从-10到9a_array.shape=(2,10)#变为2*10矩阵a_array[(a_array%2==1)]=0#将其中奇数位赋值为0。c_array=np.arange(70)c_array.shape=(2,7,50)#或者c_carry.resh
2018-01-18 22:23:08
289
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅