- 博客(45)
- 资源 (1)
- 收藏
- 关注
原创 【嵌入式】STM32利用arm-dsp库进行PID调节控制
在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称 PID 控制,又称 PID调节。其原理介绍教科书以及网上已经有大量资料,本文着重介绍在嵌入式设备中,如何快速上手进行PID控制。...
2021-05-07 19:45:49 9755 22
原创 【嵌入式】STM32利用arm-dsp库进行FIR滤波
目录一、Matlab中的FIR实验1.搭建原始信号2.设计FIR滤波器3.FIR滤波4.滤波前后对比二、嵌入式平台FIR滤波移植1.arm-dsp库移植2.获得FIR滤波系数3.基于arm-dsp的FIR程序4.滤波结果-与Matlab比对三、总结电力电子应用中,往往需要对电流、电压信号进行采样,滤除干扰频段的信号,或者保留、提取感兴趣的频段的信号。通过模拟滤波往往难以达到较好的效果,因此需要采用数字滤波器。常用的数字滤波器有IIR、FIR滤波器两种。FIR 滤波器最重要的优点就是由于不存在系统极点,F
2021-04-28 16:54:11 21285 29
原创 【Matlab】Qt Matlab混合编程——以曲线拟合为例
一、概要在编写Qt应用时,若想用到比较复杂的算法,如拟合、FFT等,没有现成的C/C++库。而这些在Matlab中都是很容易实现的,那么有没有一种方法可以让Qt“不劳而获”得调用Matlab的算法呢?其实方法有两种:1. 对于不同编程语言,完全可以通过【公共内存】的方式实现交互,这类似于进程间通讯。简单来说,可以Qt与Matlab共同读写同一文件,比如Qt将原始数据放入文件,Matlab检测到后对原始数据进行计算,然后将结果放到这个文件中供Qt读取。2. Matlab的m文件可以编译为Qt可以调用的
2021-01-11 19:24:14 7320 24
原创 【物联网】esp8266+云服务器搭建物联网通道
一 概要接触过一些物联网云平台,如阿里云、华为云、腾讯云、机智云等,要想使一个嵌入式设备接入物联网平台,一般需要一下几个步骤:1.通过2G、4G、NB-IOT、WIFI等手段让你的嵌入式设备能接入公网;2.将物联网云平台生成的设备密钥写入嵌入式设备,其中,这个密钥相当于设备唯一ID;3.在云平台创建“数据节点”、“控制节点”等。4.移植云平台的SDK程序到你的嵌入式设备。以上2、3、4步确实能通过云平台现有的功能来极大的提高设备接入物联网的效率。但想真正理解物联网、云平台,还需要自己研究、或者说
2020-11-18 19:29:04 4689 1
原创 【嵌入式】利用arm-DSP库进行FFT计算,获得信号的频谱、幅值及相位(下)
代码终于要来了,那么咱们就一步一步来。核心代码就三个文件——data.c data.h ffttest.c,其中data.c data.h为数据的准备部分,数据当然来自Matlab。ffttest.c里才是干货。(旁白:么看过上的自行翻阅。。)一.data.c/data.h数据准备data.h#ifndef _DATA_H#define _DATA_H#include "arm_math...
2019-08-24 17:09:20 11223 29
原创 【嵌入式】利用arm-DSP库进行FFT计算,获得信号的频谱、幅值及相位(上)
电力系统中往往掺杂谐波,而FFT可以将谐波检测出来,具有较大的实用价值。今天主要讲一下在STM32中如何利用dsp库进行快速傅里叶计算,从而得出信号的频谱幅值以及相位。一、Matlab简单搭建1.谐波检测搭建通过50Hz正弦波叠加100Hz、200Hz的正弦波得到叠加后畸变的波形,这个波形主要用来进行FFT运算进行谐波检测。模型很简单如图1所示,三个正弦波相位相同、频率不同,幅值分别为5、1...
2019-08-24 16:42:35 28753 19
原创 【嵌入式】J-Link Commander + map文件 + asm文件 离线定位crash崩溃
嵌入式开发中,最令人头疼的就是遇到程序崩溃的问题,对于稳定性要求极高的场合,这无疑是重大事故。导致程序崩溃的原因一般分为四种:HardFault、MemManage、BusFault、UsageFault。对于各种Fault的解释和引起原因,可以自行百度,本文主要讲解在各种Fault发生后,如何利用JLink Commander保存异常现场,并在此基础上通过map、asm文件寻找导致异常的真凶。...
2022-07-08 13:37:56 1772 1
原创 【嵌入式】FreeRTOS的移植、任务运行状态以及源码的优化改进
目录前言一、FreeRTOS移植的注意事项二、任务运行状态的获取三、任务运行状态的源码优化前言FreeRTOS因其简洁小巧、功能齐全而深受嵌入式领域欢迎,如下图所示,除Linux外,FreeRTOS为全球嵌入式领域市场份额最多的实时操作系统。与之对标的uCOS、RTX、ThreadX等都被远远的甩在其后。加之近年又被亚马逊收购,FreeRTOS的应用应该会进一步扩大。网上已有很多各实时操作系统的对比,我也使用过几种操作系统包括FreeRTOS、uCOS等,但FreeRTOS给我的最深的印象就是移植方便,
2021-12-07 08:43:06 4055
原创 【嵌入式】STM32通过PHY芯片实现Macraw透传
前言单片机接入有线网络(RJ45双绞线、光纤等)时,可使用外接集成了mac、phy、协议层的网络芯片,如CH395、W5500、DM9051等,这些芯片只靠SPI、串口、并口等即可实现单片机接入有线网络。且上述芯片除了TCP、UDP等常规网络协议,还支持Macraw模式。Macraw模式在一些电力系统中有广泛的应用,因为Macraw模式可以在以太网链路的基础上,任意规定自己的通讯协议,而不必非要使用TCP、UDP等常规网络协议。Macraw帧格式如下所示,数据域不得超过1500字节,当数据域小于46字
2021-03-23 18:23:57 4071 6
原创 【嵌入式】嵌入式设备实现网络功能——综述
前言随着物联网的推进,以及一些特殊应用场合下对网络功能的要求,网络功能在嵌入式设备中已经成为常客。对于大部分物联网应用场景,网络功能的任务就是实现设备无线接入外网,从而进行数据通讯,无论协议是TCP、UDP、MQTT中的哪一种。对于一些特殊场合的应用,网络功能的任务是是嵌入式设备通过RJ45网口、光纤接口等有线方式实现局域网内通讯,或者点对点通讯。实现方式一、无线网络的实现物联网方向的应用,大多是基于无线通讯方式。市面上已经有很多芯片、模块可供使用。比如应用在wifi的ESP8266模块、应用在
2021-03-23 10:56:59 1486 3
原创 【开源小项目】室内环境远程监测系统
一、前言此开源小项目纯属个人需求突发奇想,适用于以下场合:1.需要获取室内温湿度、空气质量;2.需要远程获取;3.室内没有电源,没有wifi热点;基于以上3个需求,指定了以下方案:1.温湿度采集使用DHT11传感器,空气质量使用SGP30传感器;2.远程获取,需要搭建云服务器,刚好双十一花50买了个linux百度云服务器,正好可以在这上边写server端;同时,为了方便远程获取数据,基于QtforAndroid编写手机APP,只要能上网,即可通过TCP/IP连接至云服务器拉取数据;3.没有电
2021-02-04 10:24:33 1570 2
原创 【编辑器】STM32CubeMx生成的代码改为4空格制表符缩进
STM32CubeMx生成的代码默认是2字节缩进,而大多数人更喜欢的是4字节制表符缩进。那么如何方便的将其生成的代码按4字节制表符缩进呢?利用VSCode可以轻松实现这一需求。以下图为例,在CubeMx生成的代码中编写几行伪码,可以发现2空格的缩进是真的难受。。先点击右下角【空格】,然后在下拉框中点击使用tab缩进。然后选择4,即制表符为4个空格。最后,在代码编辑界面任意一处右击,在弹出菜单中选择格式化文档。最后,即可得到看起来舒服的4字节制表符缩进格式。...
2020-12-22 11:26:04 6369 3
原创 【嵌入式】STM32输出SPWM实现逆变
一、SPWM逆变原理逆变是一个成熟的技术,无论是单极性逆变还是双极性逆变,都离不开SPWM调制。对于H桥全桥逆变,使用的是双极性SPWM逆变,因此本文只针对双极性逆变进行讲解,对于其硬件原理,可以参照【单相全桥逆变电路工作过程】。SPWM逆变的精髓就是【冲量等效原理】——将一周期正弦波等分为N段,每段的长度为T,可以算出任意一段的积分面积S(即正弦波在T时间段内与横轴围成的面积),如果在每一段T时间段内,SPWM波与横轴围成的面积都等于T内正弦波的定积分S,那么在后级对SPWM进行滤波后即可得到正弦波。
2020-12-22 11:09:04 23428 10
原创 【Matlab】Curve曲线拟合后如何获得高精度参数
一 出现的问题Matlab的Curve工具是非常使用的曲线拟合工具,关于它的使用网上一搜一大把。一直以来,我也在使用它进行曲线拟合,而且一直用的很好,没有感觉到不对,直到今天出现了这样一个情况:在拟合完一条3次多项式曲线后,直接将红框中的参数扔到C语言里参与计算了。在C中的程序如下所示: res = -2.121e05*pow(x,3) + 6.302e05*pow(x,2) - 6.241e05*x + 2.06e05这个式子与Curve中的参数完全吻合,而真正到计算时,res会返回一个“令
2020-11-03 18:49:23 5705 6
原创 【嵌入式】HardFault原因定位
1.简介在Linux下出现程序跑飞时,如段错误(segment fault),往往可以借助CoreDump结合gdb快速定位引起段错误的程序。而在单片机调试时,发生类似段错误时会进入硬件错误HardFault,引发HardFault异常中断,以STM32F4系列为例,当发生HardFault异常时会进入如下中断服务函数,在调试阶段失能看门狗的情形下,将会进入死循环。void HardFault_Handler(void){ while (1) { }}2.HardFault的主要诱因Ha
2020-09-02 18:47:11 3521 4
原创 【嵌入式】一招规范Verilog的if...else语句
在做FPGA、CPLD时可以选择VHDL语言和Verilog语言,刚接触FPGA开发,VHDL和Verilog都简单的接触学习了一下。排除两者在功能实现、具体细节上的差异,作为经常使用C语言的人来说,Verilog语言在语法上显得更有亲和力。Verilog支持if…else if…else…的判断语法结构,与C语言类似,且也支持判断语句嵌套,支持某判断分支下执行多条语句。虽然与C语言类似,但以为它没有大括号{}的说法,使得在书写较为复杂的逻辑时显得乱糟糟,看上去一头雾水。如在if…else if…else
2020-08-24 11:14:06 7615 2
原创 【嵌入式】任意波特率的合理计算——高波特率、低误差
一、概要使用UART串口时往往比较喜欢配置波特率为标准的9600、115200等,而实际应用中需要更高的波特率。如果在配置UART波特率时任意输入一个很高的波特率,如200000,那么很有可能因为单片机的波特率寄存器配置方法,导致实际的波特率与200000相差很大,往往当误差大于2%时就不能稳定通讯了。因此,在获得尽量高的波特率的同时,还要保证尽量小的波特率误差,最粗暴的方式就是把目标波特率范围内的所有波特率都算一遍,然后取波特率高且误差小的。二、STM32F4波特率的计算方法以stm32f4系列为例
2020-08-08 16:13:22 8490 2
原创 【嵌入式】STM32+STM32CubeMX调试AD7606记录
AD7606是16位多通道同步采样芯片,可以处理±10V和±5V的真双极性输入信号,并最大支持200kSPS的吞吐速率采样,特别适合于电力系统中正弦波电压电流的采样。别看AD7606是64-LQFP的封装,多达64脚,但其配置、使用非常方便。AD7606不用通过读写寄存器进行工作状态的配置,直接通过外部引脚的上下拉来进行配置,一般工程应用中主要涉及以下几个配置:1.基准源选择;2.并行、串行通讯选择;3.测量范围选择;4.过采样选择。由于项目中并不需要高达200kSPS的采样率,故选择了一定倍数
2020-08-03 15:16:31 12184 27
原创 【嵌入式】测量值与数字信号发生器输出值形成2倍关系的原因
最近在使用泰克AFG1062数字信号发生器时遇到了一个小问题:用信号发生器输出频率0.1Hz、赋值-5V~5V的方波信号,如下图所示。用AD采样芯片解算的采样值一直为±10V,同时用福禄克测量值也为±10V,是设定值的两倍。产生这个问题的原因在于测量设备(即AD芯片、万用表)与输出设备(即信号发生器)的阻抗不匹配。一开始信号发生器设置的负载阻抗为50Ω,如下图红框所示。而通过阅读AD芯片的芯片手册得知,其输入阻抗为1MΩ,而福禄克万用表的输入阻抗也为高阻抗。这导致了信号发生器的负载阻抗与测量设备的负载阻
2020-07-25 16:27:28 3963 1
原创 【Linux】定时器发出的SIGALRM信号与sleep、usleep、select、poll等函数冲突的解决办法
在Linux应用编程时,有需要用到定时器的场合,类似于单片机内的定时器中断——规定时间到了之后执行特定代码。一、定时器的使用简介以下为定时器的一个简单例子,初始化定时器后每隔一秒调用一次TimerFuc进行打印。#include <stdio.h>#include <stdlib.h>#include <signal.h>#include <time.h>#include <sys/time.h>void TimerFuc(){
2020-07-20 16:07:47 3682 1
原创 【Linux】将4G模组挂载为网卡,利用socket进行网络通讯
在使用4g模组时,传统单片机的做法是mcu通过串口连接模组,通过AT指令结合串口收发实现对4g模组的操作,最终目的是实现tcp、udp等网络通信。而在linux中编程中,通常以建立socket套接字的形式进行网络通讯,在linux-arm开发板上,若要实现4g通讯,且还想保留socket的通讯方式,则需要将4g模组通过usb连接arm板,挂载为linux的一张网卡,从而通过这张网卡进行socket通讯。这很像早年的usb无线上网卡,设备里要插一张SIM卡,然后用usb连接电脑,电脑就可以用它上网了。要实现
2020-07-10 19:38:50 6342 4
原创 【Linux】移植USB、CH340驱动到arm板,并作测试
手里的linux-arm开发板引出了USB接口,可以接各种设备进行控制、通讯。单片机开发中我们经常用到基于CH340芯片的TTL转USB小模块进行单片机与电脑间的通信。为了验证开发板
2020-07-01 16:56:49 7269 2
原创 【Opencv】OSD反色处理
通过上一篇博文【海思】利用opencv给海思抓拍图像加OSD,现在已经可以在摄像头抓拍照片的基础上进行OSD叠加了,同时也实现了背景色透明的OSD叠加。基于上一篇结尾留出的小问题,今天利用Opencv实现了叠加字体的反色,从而使得OSD在图片中更为突出。具体思路如下:1、获取OSD中每个字符将要叠加到原图的区域2、根据区域获取原图在此区域的平均灰度值3、若平均灰度值大于某一值(即偏白色),则将OSD位图相应区域重画为黑色,否则(偏黑色)不做处理,因为生成的字符串是本来就是白色的。我封装了一个函数,
2020-06-04 11:59:40 1692
原创 【海思】利用opencv给海思抓拍图像加OSD
上一篇博文【海思图像视频OSD准备——移植freetype、SDL、SDL_ttf到开发板】已能利用freetype+SDL+SDL_ttf的方式生成字串位图了。现在以抓拍为例,介绍一种OSD的方法。可以明确的是:我们可以通过海思的region区域管理来实现OSD的叠加,也可以通过opencv的方式实现OSD的叠加。由于海思已有现成的sample_region来实现OSD了,那我就通过另一种方式——opencv叠加OSD。1、图像叠加摄像头拍照后,将编码数据赋值给opencv的Mat图像处理类,然后读入
2020-06-03 19:24:41 2821
原创 【海思】图像视频OSD准备——移植freetype、SDL、SDL_ttf到开发板
在图像视频监控中,需要在画面中增加监控地点、时间戳等水印,通过我之前写的【opencv交叉编译移植到linux-arm开发板,并做测试】已经可以利用opencv方便的将时间戳打到抓拍的图像上。使用opencv打水印虽然简单方便,但存在两个缺点:1.putText不可放置中文;2.应用在视频OSD显然是不方便的,因为海思的region区域管理通常以bmp位图叠加的方式进行OSD,通过阅读官方SDK例程的sample_region源码可以看出,其例程是读入已有的bmp文件叠加在视频流中,例程中bmp是死的,
2020-06-02 18:40:08 4063 7
原创 【Qt】将数据导出到csv文件
实际项目中有存储大量数据到表格的需求。最开始我使用的是Qtxlsx,将数据导出为excel表格。Qtxlsx插件的好处在于跨平台,相比于Qt自带的excel表格操作类,Qtxlsx不要求宿主机上安装有office,同时其读写速度远超过Qt原生excel操作类。但Qtxlsx也有缺点,一是需要编译、移植库等一系列操作后才可以使用;二是存储大量数据(几十万条数量级)时,其对内存的占用会迅速爬升,十万条100字段的数据,轻轻松松占到2G内存。这如果移植到嵌入式平台将是致命的缺点。幸好有csv这般轻量级、易操作
2020-05-20 17:39:54 6574 8
原创 【Qt】导入SQLite数据库到QTableView
上一篇博文中已经实现了Qt对SQLite的基本操作方法。如果我们有在Qt中显示SQLite数据库数据的需求,QTableView是最佳的选择,不同于QTableWidget的是,它可以链接到外部数据库,从而在QTableView中操作外部数据库。在上一篇源码的基础上,需要在头文件头包含#include <QSqlQueryModel>并在主界面中加入一个tableview,界面变成以下这样。我将要在下面的tabview中显示数据库中的数据。上一篇源码中,点击【读取该表内所有记录】后,
2020-05-20 17:04:14 4388
原创 【Qt】操作SQLite数据库
SQLite是一个进程内的轻量级嵌入式数据库,它的数据库就是一个文件,实现了自给自足、无服务器、零配置的、事务性的SQL数据库引擎。Qt为SQLite操作提供了相应的接口,可以使我们在程序能轻松完成对SQLite数据库的创建、删除、插入、改写、查找等操作。下面以一个小例子说明Qt操作SQLite数据库。一.简单界面写一个简单的页面,用于测试打开数据库、建表、插入、读表操作。二.源码主要的注释都写在了源码中,不难发现Qt对SQLite操作的关键就是组一条符合SQLite语法的命令,然后调用sql_
2020-05-20 16:45:32 1766
原创 【Linux】多进程管道通信,及select、poll函数在其中的应用
管道是最常用的进程间的通信方法。通常的实验例程为——创建管道->创建进程->父进程通过管道发送数据->子进程通过管道接收数据并显示。如下代码所示,需要的东西都写在注释中。#include <stdio.h>#include <unistd.h>#include <sys/wait.h>int main(){ int res; char *buf = "this is data to trans"; //管道发送的
2020-05-08 19:23:09 1332
原创 【Linux】一种多线程创建、监视手段
目前对Linux的多进程、多线程理解还不够深入。在现有理解的基础上,写了一套多线程的创建、维护例程。具备以下特性:1.批量创建,类似于注册;2.批量监视;3.重启机制直接上代码,注释很详细#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>...
2020-05-07 19:18:23 531 1
原创 【Linux】利用eclipse远程调试目标板程序
在单片机开发中,都可以利用iar或keil等ide,用仿真器对单片机进行调试。而在linux-arm开发中,应用程序运行在目标板的linux系统下,高效的调试能大大提高开发效率。这个过程自然少不了linux下的调试神器gdb。但问题在于,我现在要调试的是目标板的程序——交叉编译后运行在目标板的程序,而且还要进行远程调试。这里就带来了两个问题:1.如何远程连接目标板,并使程序进入调试状态;2.调试...
2020-05-06 17:34:24 1444 1
原创 【Linux】opencv交叉编译移植到linux-arm开发板,并做测试
1.下载源码使用opencv3.4.1,官网下载。下载后解压获得opencv-3.4.1文件夹,进入后新建一个文件夹并进入,用于后续的交叉编译。mkdir arm-buildcd arm-build2.安装环境安装cmake以及图形界面配置的cmake-guisudo apt-get install cmakesudo apt-get install cmake-gui3.c...
2020-05-04 21:48:46 9113 15
原创 【Linux】安装opencv4避坑指南
linux环境:虚拟机Ubuntu16.04如果要安装opencv3.x.x,请移步Linux学习之安装OpenCV3.4.1,只要按步骤来就没有问题。问题是如果安装opencv4.x.x,那么上述就行不通了。下面给出linux下安装opencv4的步骤:1.安装依赖sudo apt-get install cmake sudo apt-get install build-essenti...
2020-04-28 14:42:30 7458 2
原创 【嵌入式】NTC(热敏电阻)曲线拟合在嵌入式中的应用
NTC热敏电阻是低成本测温的有效手段,一般厂家都会提供一个阻值-温度表,通过查表获得温度值。之所以给个表,是因为阻值-温度表是非线性的。所以写程序时要把这个表写进程序,一般占用几百个字节,对于大多数MCU来说可以忽略。今天在群里遇到一个有意思的问题,一哥们的MCU片上flash只有16K,把几百字节的NTC表加入程序后直接不够用了,咨询该怎么办。我的办法是:通过matlab做一个阻值-温度的拟...
2020-04-14 17:32:06 3822 6
原创 【嵌入式】自己写mktime、localtime函数
世纪秒指自1970年1月1日0时0分0秒至某一日期时间经过的秒数。有些应用场景中,需要将日期时间转换为世纪秒,或者将世纪秒转换为日期时间。c/c++库中已经有相关的函数,由time.h中的mktime函数和localtime函数分别实现上述两个转换。但在嵌入式设备中,time.h往往只能实现32位的世纪秒运算,最大支持到2038年;且mktime、localtime默认的时间基准年份都是1970...
2020-04-02 19:08:14 2839 3
原创 【嵌入式】4G模组+MCU成功接入阿里云物联网步骤备忘
利用模组+MCU的方式接入阿里云物联网有两种选择:1.选择模组内集成了阿里云SDK的模组厂商,这样就可以通过简单的AT指令实现接入阿里云及消息通讯;2.使用模组内部未集成阿里云SDK的模组,而是在MCU上集成阿里云SDK,再通过调用相关API实现上云和通讯。因手头上暂时没有集成了阿里云SDK的模组,且使用集成了SDK的模组的话实现上云并没有什么道道,故选择了从将SDK移植到MCU上的方式,以下上...
2020-03-09 17:07:12 6507 9
原创 【嵌入式】整洁有序的在存储设备中存储数据,并在windows下模拟eeprom实现
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...
2019-12-23 17:10:07 679
原创 【Linux】基于Linux系统的云服务器TCP server编写,多线程并发
腾讯云、华为云等可以申请个人云服务器,一般为15-30天。其作用是使你获得一个公网IP,使得任意设备都可以由这个IP向你发起通讯。同时提供24小时在线的云虚拟机,作为服务器,云虚拟机一般安装linux系统,并能通过SSH远程登陆虚拟机并进行linux下的终端操作。说通俗点就是腾讯给你提供一个安装了linux的虚拟机,主机在腾讯那,并给你提供了固定的公网IP,相当于你有了一个公网IP和一个linux...
2019-11-09 16:12:22 1096
原创 【Qt】Qt for Android创建AndroidManifest.xml调用java
用Qt编写跨平台的安卓程序虽然便捷,但也有很大的局限性,对手机硬件的开关读写等都需要调用原生的java接口,而Qt已经提供了c++调用java的JNI接口。从网上搜了不少帖子,基本没有一个能用的,不知是否我操作有勿,毕竟从没接触过java。现通过阅读《Qt on Android核心编程》一书,并结合自己的实践,成功通过Qt编写安卓程序,调用java对手机的wifi进行操作。还是那句话,通道一旦打...
2019-11-06 18:53:32 2397 4
转载 【Qt】Qt for Android开发环境搭建
版权声明:本文为CSDN博主「triple_羊」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/yonug1107716573/article/details/80927625进来要搞一下跨平台上位机,Qt无疑是最便捷的选择。从CSDN上搜了一篇比较实用的Qt环境搭建教程如上。实践后,需要注意的是ndk...
2019-11-06 15:53:49 332
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人