- 博客(68)
- 资源 (1)
- 收藏
- 关注
原创 C++ 和 QML 之间的信号连接机制
QML 中的处理函数名必须以 “on” 开头后面跟着信号名(首字母大写)参数数量和类型必须匹配。如果不需要处理某个信号,可以不定义对应的处理函数。
2025-04-04 09:34:00
143
原创 MinGW-w64安装(gcc,g++,make安装)
如果你之前安装不完整或 make 不能用,可以按照下面的方法重新安装。如果 mingw32-make 可以用但 make 不能用,可以创建一个 make.bat,让 make 自动调用 mingw32-make。如果你希望拥有完整的 Linux-like 环境,并且需要 make、gdb 等工具,MSYS2 是最好的选择。如果你不想用 MSYS2,而只需要 MinGW-w64 编译器,可以用官方安装器。然后,你的 MinGW-w64 已经安装完成,并且 make 也能用!
2025-02-12 15:35:52
1762
原创 QT5导出数据库数据耗时长问题
这是一个传入数据表的日期和文件保存路径,然后根据日期组合成数据表,在把三个数据表的数据合并后导出成csv文件的函数,经过优化导出6000行数据,从87678ms缩短到563ms。
2025-02-05 14:17:16
441
原创 通用指针void*转换为函数指针时强制转换
强制类型转换在C语言中是必要的,尤其是在处理指针和与API交互时。尽管它可能导致未定义行为,但在正确使用的情况下,它可以提高代码的灵活性和可读性。关键在于确保您了解转换的类型,并在使用转换后的指针时遵循正确的调用约定,以避免潜在的问题。
2025-01-08 15:53:46
445
原创 freeRTOS的SemaphoreHandle_t信号量,xSemaphoreCreateBinary()、xSemaphoreCreateCounting()、xSemaphoreCreateMu
有时候可能大家还会看到这种的信号量,这个是CMSIS-RTOS v2 的互斥量句柄类型。用于与 CMSIS-RTOS API 兼容的互斥量操作,它的功能和xSemaphoreCreateMutex()创建的信号量是一样的。*osMutexId_t 和 xSemaphoreCreateMutex() 的作用本质上是相同的,都是用来创建和操作互斥信号量的,它们的主要区别在于 API 层面 和 支持的标准。,可以用于各种类型的信号量,包括二进制信号量、计数信号量和互斥信号量。,用于标识一个信号量对象。
2025-01-03 10:12:37
467
原创 二分法效率和for循环比较效
如果数组是已排序的,使用二分查找在 72 MHz 的单片机上查找值为 8 的元素,耗时大约 874 纳秒,效率远高于普通循环。若 array[mid] > target,更新 right = mid - 1,大约 1 条指令。若 array[mid] < target,更新 left = mid + 1,大约 1 条指令。比较操作 (array[mid] == target):1 条指令。比较操作 (array[i] == 8):1 条指令。数组读取 (array[i]):1 条指令。
2024-12-30 15:53:29
896
原创 单片机代码运行时间计算
分析循环的指令数:1. 初始化循环变量 (int i = 0):1 条指令。4. 比较操作 (array[i] == 8):1 条指令。假设数组中没有早停条件(即必须遍历整个数组),遍历 500 个元素的总指令数为:总时间计算:执行 3000 条指令所需时间为:3000 \times 20.83 , \text{ns} = 62.49 , \mu\text{s}结论:在 48 MHz 的单片机上,遍历一个长度为 500 的数组,并判断是否有值等于 8,大约需要 62.5 微秒。接下来看代码中需要的指令数。
2024-12-30 11:46:28
370
原创 结构体校验码异常
问题出在结构体对齐上,虽然校验码在最后的位置,但是由于结构体对齐的问题,实际结构体是4字节对齐,会在最后面补上2字节。所以在计算结构体校验码的时候做法是减去最后两个校验码,但是校验码并不在这里,而是更前面的2个字节,所以就会出现,在第一次算完校验码,写入 后,在读取在算校验码,就不对了。因为第一次计算算入了刚才的校验码结果作为校验数据。为了让校验码在最后两个字节,需要在它前面手动补齐2字节,作为占位符。调试的时候,发现加在结构体后面的校验码总是不对,在此做个笔记。这样得到的结果就对了,最后2为是校验码。
2024-12-10 22:40:15
195
原创 NuGet包离线安装方法
runtime.native.System.IO.Ports是你要安装的报名,替换成你需要的就可以。工具->nuget包管理器->程序包管理器设置->程序包源-> + ->更新->确定。在某项情况下,我们的计算机是无法直接连接外网的,这个时候就只能用离线安装的方法了。把下载的nuget.exe放在任意目录下,然后在此目录用命令行下载。然后安装包就会显示出来,在根据操作安装就可以了。然后就会把安装包下载下来。工具,然后用这个工具下载。
2023-08-14 17:10:53
3223
原创 Qt Bridge for Adobe Photoshop安装
从Qt Design Studio 2.3开始, the Qt Bridge 也将支持 Adobe XD.Adobe XD 插件将放在 QtDesignStudio\xd_bridge里。从Qt Design Studio 2.3开始, the Qt Bridge 也将支持 Adobe XD.Adobe XD 插件将放在 QtDesignStudio\xd_bridge里。这个链接:https://doc.qt.io/qtdesignstudio/qtbridge-overview.html。
2023-08-13 22:17:14
778
原创 QT 自定义图片按钮
这里是引用,https://gitee.com/feiyangqingyun。根据一位Qt博主的开源代码学习一下,顺便做个笔记。
2023-02-01 10:03:46
1422
原创 QT里面Q_PROPERTY的使用
它的返回值类型必须为属性类型或者属性类型的引用或者指针。**Q_PROPERTY()**是一个宏,用来在一个类中声明一个属性property,由于该宏是qt特有的,需要用moc进行编译,故必须继承于QObject类。它用来设置属性值,它的返回值必须为void型,而起必须要含有一个参数。一个reset函数能够把property设置成其默认状态,它也是可选的。如果定义,它提供了一个信号这个信号在值发生改变时会自动被触发。如果定义了"STODE"属性表明这是一直存在的。类型,属性名和READ(读)方法是必须的。
2023-01-30 16:23:27
704
原创 28YBJ-48步进电机不转
单四拍电机不转双四拍电机不转单双八拍如图所示28YBJ-48步进电机:表示的是直径28,4相8拍 ,J表示减速电机。
2022-09-25 22:57:45
980
原创 MKD调试下载的时候提示:Contents mismatch at: xxxxxxxxH (Flash=xxH Required=xxH)
编译完下载的时候提示如下错误:))....详情:1、用的是极海的apm32f030c8t6单片机,flash64K,ram8k2、编译的代码35K原因分析:1、首先想到的是容量超范围了,但是反复确认过就是64K的单片机没有错,那不是这个问题2、尝试这把代码改小,改成26K,在下载,又可以了,没有报这个错误了;再把代码改成35K,还是下载不了,难道真的是容量不够,单片机厂家容量虚表?不至于吧3、用flash下载生产的hex文件,没问题。...
2022-08-30 09:35:59
2685
原创 QT5关于屏幕的设置
以往获取屏幕分辨率的方法是用,但是QT5之后淘汰了,需要用QGuiApplication这个类来操作了新的方法如下QWidget窗口的部分显示有关的功能QT中,GUI最终都继承自QWidget,所的调用update()都是基类QWidget的update()。基础函数:paintEvent(QPaintEvent*)函数是QWidget类中的虚函数,用于ui的绘制,会在多种情况下被其他函数自动调用,比如update()时repaint(),被调用之后,立即执行重绘,因此repaint是最快的upd
2022-06-24 15:30:40
2031
原创 QT5 qss样式表加载 有变量的方式
一、简单的可以直接加载,把样式表放里面就可以了,像这样 QFile styleFile(":/style/style.qss"); if(styleFile.open(QIODevice::ReadOnly)) { QString setStyleSheet(styleFile.readAll()); a.setStyleSheet(setStyleSheet); styleFile.close(); }else {
2022-01-06 11:26:37
2228
原创 Keil编译器--结构体指针函数;结构体作为参数时,不能调用结构体指针函数
Keil编译器很多奇葩的地方,比如很多程序的写法在keil编译器里面实现是实现不了的,并且不报错,而且莫名其妙的死机。结构体里面有函数指针时,直接调用是可以的,但是在当结构体作为参数传入函数时,调用就会出现硬件中断。相同的方法在其它编译器中是正常运行的,比如QT自动的编译器typedef struct{ uint8_t soCharging;//充电状态 uint8_t soDsarging;//放电状态 uint8_t soChargMos;//充电MOS uint8_t soDsargMo
2021-07-21 10:24:23
2000
3
原创 QT5添加lib链接库
LIBS += -LE:/project/QT/usbcan_info/ -lControlCANLIBS += 后面跟的是lib库-L 后面跟的是路径-lControlCAN 是lib库的名称LIBS += 是在pro同目录下的,默认也是搜索它的目录开始
2020-12-22 21:00:35
1545
原创 PyQt5 串口通讯QSerialPort
串口如何通讯?引用串口类,实例化一个对象,链接串口对象的接收槽函数,ok引入一个串口类,实例化一个对象#引入一个串口类,from PyQt5.QtSerialPort import QSerialPort,QSerialPortInfo#实例化一个对象self.com = QSerialPort()#链接串口对象的接收函数self.com.readyRead.connect(self.readSerialPortInfo)#定义一个函数作为串口数据接收的槽函数def readSeria
2020-12-12 21:29:02
5640
5
原创 MDK中One ELF Section per Function选项功能
MDK中One ELF Section per Function选项功能会把程序中未调用的函数给优化掉,不参与编译。
2020-11-03 15:51:46
1590
原创 STM32硬件中断的时候软件复位是没用的
1、当STM32单片机发生硬件中断以后,在硬件中断里面用软件复位单片机是可以复位的,但是复位后很大概率还是出现硬件中断。2、硬件中断后再次烧录可以运行的程序无法继续运行,重新上电后才可以运行。...
2020-11-03 14:57:12
819
原创 三元锂SOC-OCV修正
按照以下OCV表制作修正电量:设计思路:在5-10,10-15.。。。。。之间认为容量随电压的变化是线性的,在温度-20–10,-10-0,0-10…之间认为容量随温度的变化也是线性的。//soc 当前SOC//temperature 当前温度//voltage 当前电压quint8 MainWindow::OCVAdjust(quint8 soc,quint8 temperature,quint16 voltage){ qint8 temperatur
2020-10-14 09:30:33
7693
2
原创 将.py文件打包成.exe可执行程序,pyinstaller不是内部或者外部命令
1. 安装pyinstaller模块pip install pyinstaller用pyinstaller生成可执行文件exe进入到需要打包的py文件所在目录,执行以下指令,在文件目录下即可找到dist文件夹,打开即可找到生成的exe文件#pyinstaller 选项 Python 源文件(这个是带GUI程序的,就是一个黑框)pyinstaller -F main.py#pyinstaller 选项 Python 源文件,-w就是取消(这个是不带GUI程序的,就是一个黑框)pyinsta
2020-10-09 11:47:30
1783
2
原创 運算中數據類型的轉換
` quint16 aa = 0x21;//protocolData.at(length+2); quint16 bb = 0xfd;//protocolData.at(length+3); quint16 cc = aa*256; cc = cc + (bb&0x00ff); quint16 dd = cc + bb; //cc = 0x21fd; //dd = 0x20fd`.
2020-05-16 11:45:46
225
原创 移位和加减运算符的处理
wCRCin = (wCRCin>>8) + (wCRCin<<8);getCrc16 = (data[step]<<8) + data[step+1];这些地方需要加(),否则无法得到正确的数值
2020-04-04 23:23:25
224
原创 c语言同一行变量重复改变
startAddr = data[step++] + data[step++]<<8;count = data[step++] + data[step++]<<8; IAR报这个错误:变量“step”(在第182行声明)(或通过某种间接方式得到的值)被修改了不止一次,没有插入Warning[Pa079]: undefined behavior: variable “...
2020-04-04 23:21:10
615
原创 指针作为形参赋值
void testPoint(int *p,int a){ *p = a;} int test1 = 200; int test2 = 0; testPoint(&test2,test1); test1 = 50; qDebug()<<test2; 输入test2 = 200;这里是给test2指针所指向的地址赋值。另外一种错误的写法:这里是把a...
2019-12-14 14:32:51
1173
原创 STM8定时器
stm8的定时器有三种类型,但是每一个系列的都会有所差异,有些只有其中的几个,如下:TIM1;高级定时器TIM2,TIM3,TIM5:通用定时器TIM4,TIM6:基本定时器(这是8位的定时器,其它的16位)三类寄存器的配置都有所差异,下面例举TIM2的定时器写法:void timerInit(){ CLK_PeripheralClockConfig(CLK_Peripheral_...
2019-12-12 14:51:44
1057
原创 STM8单片机时钟
时钟源有四种:外部高速晶振(HSE 1-16MHZ)内部高速RC振荡器(HSI 16MHZ)外部低速晶振(LSE 32.768)内部低速RC振荡器(LSI 38KHZ)系统默认配置的时钟为HSI的8分频既2MHz外部时钟配置HSE:CLK_DeInit() ; 复位所有时钟寄存器CLK_HSICmd(Enables); 使能或禁能内部高速振荡器CLK_HSECo...
2019-12-12 14:38:42
816
原创 Qt5.13 发布程序提示Driver not loaded Driver not loaded
如果本地连接可以,放到别的电脑连接不成,提示这个错误的时候,应该就是缺少MySQL的两个文件,这两个文件在用qt自动的工具打包的时候不会自动添加进去,只会把MySQL的库添加进去,但是库需要调用这两个文件。libeay32.dll,ssleay32.dll。这两个文件在MySQL的安装路径下。...
2019-10-26 22:35:21
1837
原创 QT5 线性图
QT官方例子,曲线图如下图axisX->append("low", 10);axisX->append("optimal", 20);axisX->append("high", 30);axisX->setRange(0, 30);axisY->append("slow", 10);axisY->append("med", 20);axisY-...
2019-10-17 17:40:26
430
原创 QT5 区域图
引用QT官方例子,如下图基本思路是:1、先画先QLineSeries,给线加上点QLineSeries2、再把QLineSeries加到区域序列QAreaSeries里面来3、把QAreaSeries加到QChart里4、把QChart加到QChartView里,完工int main(int argc, char *argv[]){ QApplication a(argc, ...
2019-10-17 16:46:40
554
原创 QT5 Drilldown的柱状图
柱状图每一块下面还有一个柱状图。这里用QT官方的例子做个笔记。QT += charts基本思路:1、新建一个类DrilldownBarSeries继承自QStackedBarSeries类,实现4个方法: - mapDrilldownSeries(int index, DrilldownBarSeries *drilldownSeries)//存储DrilldownBarSeries对象...
2019-10-17 16:29:42
631
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人