- 博客(117)
- 资源 (16)
- 收藏
- 关注
原创 13.5-“制作一款私有IAP串口下载小工具”之STM32的Bootloader代码编写(包含源码)
一、开发环境与工具STM32CubeMX、TrueSTUDIO、J-Flash V6.32f芯片:STM32L072KBUx二、使用CubeMx新建工程与配置说明使用CubeMX通过芯片型号新建工程。需要配置如下内容:配置系统时钟下载程序的SWD口一个定时器(开启中断)一个串口(开启接收中断)配置过程及详细参数如以下截图所示:注意:只要能实现同样功能即可,不强制必须使用串口1或定时器7。三、通信协议构架代码在单片中需要接收来自上位机的数据,并安装协议规定格式反馈数据。比
2020-08-05 23:59:41 2374 1
原创 13.4-“制作一款私有IAP串口下载小工具”之STM32的Bootloader设计说明
一、原理简要说明从上一章可知,IAP更新程序的原理,就是在单片机flash中的划分出两个区域,分别叫做Bootloader区域和一个App区域。芯片上电启动的时候,会默认运行Bootloader,然后bootloader来做逻辑判断,bootloader会等待5s左右,如果在5s之内收到需要更新固件的命令,则进行固件更新,否则的话,判断芯片中是否已经有之前的可用app。如果有,跳转过去执行app。否则的话继续保持在“等待固件下载模式”。这就是bootloader的大概原理。二、Bootloader逻辑说
2020-08-05 23:37:43 1289
原创 13.3-“制作一款私有IAP串口下载小工具”之上位机软件设计说明(包含源码)
一、原理简要说明实现IAP下载,本质上相当于把单片机编程软件编译生成的bin文件,传递到“单片机的Flash”中。而在传递的过程中可以使用任何数据传输通道,比如:串口,蓝牙,网络等。而传输bin文件的协议可以采用一些标准的格式,也可以完全自定义一个协议。总之,只要满足把bin文件传输到单片机的Flash即可。本文所描述的传递方式采用:串口+私有协议。二、上位机IAP下载工具的功能设计bin文件选择框和选择按钮用于从电脑磁盘上选择一个要传输到单片机的bin文件。串口通信以及协议实现用于和下位机单
2020-08-05 23:25:40 2358
原创 13.2-“制作一款私有IAP串口下载小工具”之串口IAP的通信协议设计
一、前言本章以“串口IAP”来讲解IAP的实现过程。因此,在这里讲一下,具体通过怎样的技术与协议,来把“固件”文件传递到芯片的bootloader中。串口通信方式与参数约定可以使用“RS232”或“RS485”来组成通信链路。串口通信参数约定如下:波特率:57600数据位:8bits校验:None停止位:1 bit二、协议约定协议规则CRC校验码 = [命令类型码 + 命令码 + 命令参数]一个完整封包 = [包头 + 包长 + 命令类型码 + 命令码 + 命令参数 + CRC
2020-08-05 23:22:11 1112
原创 13.1-自己开发一个“单片机烧写工具”!不是开玩笑吧?原来如此^~^(OTA升级)
听到这个"需求"的第一反应“这是开玩笑吧”。我是是一个普通的码农,怎么可能开发出了那么复杂的东西。带着一头冷汗,开始查资料中…原来如此,有一种下载程序的方式叫做“IAP”。 悬着的心终于放了下来。原来“给单片机烧写程序”的实质就是把“编译”好的“程序二进制文件”复制到芯片的flash中,和从电脑传电影到MP4播放器上是相似的原理。只不过现在这个“电影”是 “程序二进制文件”,而单片机就是这个“二进制程序”的“播放器”。一、前言(需求背景)需求背景就是“远程更新硬件设备的芯片程序(固件)”。在开发硬
2020-08-05 23:17:12 4194
原创 8.3-写代码必须要写注释吗?(为什么现实中不写注释?)
一、写代码要写注释“写代码要写注释”自从学编程,这就话就伴随着你。可见注释的重要性。注释的作用:说明函数的功能说明函数参数的意思说明函数这样设计的原理(计算公式)说明函数的使用场景作者和日期说明变量的作用函数调用方法与注意事项总之为了能让读这个函数的人明白这个函数的功能,可以注释各种各样的信息。而没有这些注释文字,就不太容易看懂函数的功能与调用用方法。没有注释的情况下,隔一段时间之后,自己也看懂的自己所写函数的功能了。因此,很多书籍、老师、领导、同事、包括你自己,都会告诉你“一定要写
2020-07-19 23:36:36 4301 4
原创 8.2-源码“目录结构”命名规范与“文件名、函数名、变量名”命名规范
一、为什么要规范代码格式?为了写出简洁整齐的代码简洁易读的代码,便于自己日后阅读,同时也方便和你协作开发软件的同事阅读你的代码。尤其在多人协作开发的时候非常重要。因此写代码的时候需要遵循一定的格式规范。规范内容一般包括:函数命名格式、变量命名格式、大小写、缩进、花括号位置、特殊含义的前缀或后缀、注释格式等。避免写出“一次性代码”有的代码,让人一看就想删除了,然后重新实现,重新编码。这就是有一个编码规范的重要性。也就是说你写的代码,不仅仅要实现逻辑功能。还要保证代码的可读性。方便你自己阅读,也
2020-07-19 18:44:36 3357
原创 1.7-工控上位机软件开发平台介绍
一、前言前面几章一直没有提到上位机的另一个主要使用场合,即“工业上位机软件”。主要是因为本人没有接触过,不敢贸然发表见解类的文章。最近在机缘巧合下,对“工业上位机软件”有了一些初步的了解。在这里和大家分享一下。注意本节的内容还不够专业全面,只适合对“工控软件”进行一个初步的了解。二、工业“自动化”控制系统的组成在工业生产过程中,最重要的是安全,其次是稳定。工业生产环境中可以常见大如“吊车”般的设备、有毒气体、强碱、强酸、几千度的高温、易燃易爆气体、高压水蒸气。所以容不得半点错误,出错就意味着要死人,因
2020-07-19 14:57:47 16088
原创 1.6-程序员必须要会“英语”吗?(会英语在编程中的优势)
一、前言(程序员必须要会“英语”吗?)当然不是必须了!可以说一个完全不懂英语的人都可以完成编程工作(用拼音或字母代替)。比如如下代码://有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数int main(){ int i,j,k; for(i=1;i<5;i++) for(j=1;j<5;j++) for (k=1;k<5;k++) if (i != k && i
2020-07-19 01:25:31 11526
原创 4.5-那些漂亮软件是怎么做出来的?为啥自己做的好丑
一、前言大公司制作的软件都非常好看,比如“360安全大师”、“QQ音乐”等。使用同样的开发平台,为啥人家的软件那么好看,而自己开发的软件总是呈现一股“怀旧风格”。那么这些漂亮的软件是怎样做出来的,使用了哪些技术呢?二、分析软件“吃藕”的原因“看这个软件做的这么吃藕,是哪个程序员开发的?”“软件做的丑,关程序员什么事!”程序员只负责开发代码和功能实现。哪懂什么原型图设计、UI设计图绘制。因...
2020-04-14 16:32:48 2052 2
原创 4.4-软件开发中,“UI设计图”的作用与绘制方法说明
一、为什么要绘制软件UI设计图作用和意义UI设计图为软件设计的最终效果图。软件UI设计图可以精确的描述软件最终的形态,包括控件样式、控件尺寸、控件配色、控件交互方式、布局样式、字体样式和尺寸。除了可以通过UI设计图看到软件的最终效果,UI设计图也是软件界面编程的最终依据。同时在软件编程中,实现软件最终界面所使用的图片和图标就是从UI设计图中裁剪出来的。谁设计UI设计图一般有专门的“...
2020-04-12 22:37:25 2697
原创 4.3-软件开发中,“原型图”的作用与绘制方法说明
一、为什么要绘制软件原型图原型图的作用原型图是一种动态模拟软件最终形态的图。原型图主要用于和领导或目标客户确认软件的最终呈现效果。原型图可以生动的展示最终效果并支持初步的模拟操作和测试,因此可以用于验证软件设计理念,以及接收修改意见和设计缺陷反馈。虽然绘制原型图会花费一些时间,但是能避免之后多次修改软件造成的额外人工浪费和资金浪费。一般来说,绘制原型图和软件功能的确定是由"产品经理"来完...
2020-04-11 21:29:06 17881 2
原创 12.4-在Qt中使用Log4Qt输出Log文件,看这一篇就足够了
文章目录一、为啥要使用第三方Log库,而不用平台自带的Log库二、Log4j系列库的功能介绍与基本概念三、Log4Qt库的基本介绍四、将Log4qt组装成为一个单独模块五、使用配置文件的方式配置Log4Qt六、使用代码的方式配置Log4Qt七、在Qt工程中引入Log4Qt库模块的方法八、获取示例中的源代码一、为啥要使用第三方Log库,而不用平台自带的Log库首先要说明的是,在平时开发和调试中开...
2020-04-11 01:50:04 12893 14
原创 12.5-使用Qt实现跨平台C++崩溃捕获,看这一篇就足够了(Breakpad)
一、软件奔溃捕获的意义应用程序发布后,不能保证百分百没有bug并引发崩溃。因此,在出现崩溃的情况下需要记录崩溃详情并给用户弹出崩溃提示对话框,提示用户重启软件以及上报(上传)崩溃。这样做意义是:能保证软件在使用过程中发现的bug都能被收集起来,并根据崩溃详情修改bug,然后发布修复bug的版本。如果软件在使用过程中直接闪退没有任何提示,不仅用户体验不好,还无法获取崩溃的原因。之后更具用户反馈...
2020-04-08 20:46:00 10714 31
原创 26-Qt在有多个屏幕的电脑上,在一个屏幕中居中显示软件窗口
参考以下代码即可实现软件在多屏幕电脑的其中一个屏幕的中间显示。支持跨平台。 MainWindow w; //获取当前软件所在屏幕的序号 int currentScreenIndex = a.desktop()->screenNumber(&w); //这个获取指定屏幕获取其屏幕分辨率的方法 警告deprecated //QR...
2020-04-05 18:49:29 1298
原创 4.2-软件开发中,“思维导图”的作用与绘制方法介绍
一、怎样从”需求“转变为”软件功能“呢?做一个软件,你肯定是有一个明确的想法或需求,比如你是外包公司接了一个甲方的需求,或者领导和你说要做一个做软件,并告诉了你基本的需求。需要你根据这个“需求”设计出软件的“具体实现功能”。这个时候,就需要你根据对需求的理解,并结合软件开发的知识来设计软件的功能。具体怎样设计呢?总不能仅仅在脑子里想一想吧。因此,你需要把每个需求点对应的软件设计写下来。一般是用...
2020-04-02 23:57:13 2985
原创 1.5-在公司被称作“某工”,一起来了解上位机程序员都和哪些人打交道
一、前言本书主要讲解“上位开发”相关的知识。既然是上位机软件开发,因此此职位肯定是在仪器仪表等硬件设备相关的公司。那么与“上位机程序员”相处在一起的同事们都在哪些职位呢?同时“上位机程序员”和这些职位有哪些工作上的合作与沟通呢?接下来一起来了解一下吧!二、常见岗位以及与“上位机程序员”的交集研发经理或项目经理岗位职责:带领团队、需求分析、技术方案选择、团队招聘和培养、任务分解。与上...
2020-03-30 22:19:06 4582
原创 4.1-了解软件是怎样一步一步设计出来的,最完整的软件开发流程
一、软件开发从0到1的各个阶段启动阶段公司领导确认项目组团队组成,包括产品经理、研发项目经理、研发工程师、测试团队等。明确项目管理制度,每个阶段的成果产物需要进行相应的评审,评审有相应的《会议纪要》;从项目启动起,研发项目经理每周提供《项目研发周报》;测试阶段,测试工程师每周提供《项目测试周报》。负责人输出产物描述产品经理调研文档了解项目背景,了解项目相关人员的...
2020-03-29 22:26:24 2829 1
原创 12.3-Windows下使用NSIS打包QT应用程序安装包,看这一篇就足够了(包括第三方Lib库)
一、准备需要打包的文件准备可执行程序文件使用Qt Creater或visual Studio+qt插件生成目标软件的Release版本。把生成的软件复制到一个单独的目录中。打开CMD命令行,切换到刚才创建的目录中,使用“windeployqt”命令来查找并添加当前软件的qt依赖库。命令详情如下:windeployqt LedStripEditor.exe命令执行完成以后,在刚才所创建...
2020-03-28 22:14:33 1481
原创 12.2-MacOS下打包QT应用程序为DMG包,看这一篇就足够了(包括第三方Lib库)
一、前言在MacOS系统中,应用软件的安装目录,就在应用软件自己里面。因此所谓安装macos软件,就是直接把应用软件复制到你想安装的目录即可。当然标准的应用软件安装目录为“/Applications”。这种安装目录就在软件自己里面的方式叫做“bundle”。所谓的bundle是指,软件是以目录的形式存在,目录中有主可执行程序和此程序所依赖的库文件,以及此软件相关的配置文件和图标等。只是在mac...
2020-03-28 15:51:13 2664 4
原创 25-Qt使用定时器快速刷新QLabel导致CPU占用太高的解决方法
一、问题描述使用Qt开发中,遇到了实时更新“UI上的状态文字”的时候,CPU占用非常高的问题。且随着时间积累CPU占用达到了99.3%。并导致软件界面反应卡顿(卡死)的现象。二、原因分析跟踪并调试代码发现最终导致CPU占用非常高,居然是在最后的显示阶段照常的。本案例中,软件使用1秒刷新16次的定时器,刷新“状态文字”,如下代码所示(从实际代码总简化):void Init() { t...
2020-03-25 20:34:27 6952
原创 3.3-上位机与下位机通信构架源代码编写与使用方法说明
一、测试框架所使用的示例命令定义本框架的示例代码所使用的命令协议规定如下:CRC校验码 = [命令类型码 + 命令码 + 命令参数]一个完整封包 = [包头 + 包长 + 命令类型码 + 命令码 + 命令参数 + CRC校验码 + 包尾]包头:FF包尾:EE FC FF EA包长:0A (除去包头和包尾的长度, 包长包括自己的长度)命令类型码:0x01:上位机给下位机设置的命...
2020-03-19 01:24:55 4837
原创 3.2-上位机与下位机的“私有协议”通信构架设计
一、前言在上一章中已经介绍了协议设计和封包设计。那么怎样把这些设计优美的落实为代码的形式呢。使用几个函数就可以实现,但是不够优美和实用,因此本章主要介绍一个协议层构架。使用构架的优点如下:所有协议命令整合到一个类中方便管理和修改构架可以方便协议的扩展构架实现了协议层和逻辑层的解耦构架实现了通信层和协议层的解耦构架实现了通信线程和UI线程的分割二、通信构架的需求分析(框架具有的功能...
2020-03-19 01:14:22 6044 8
原创 C#的winform中跨线程更新UI,非UI线程更新UI线程中的控件
方法一BeginInvoke(new MethodInvoker(delegate{ button.Enabled = false; //替换为你的Ui代码 }));方法二this.Invoke((EventHandler)delegate { button.Enabled = false; //替换为你的Ui代码 }); ...
2020-03-18 22:18:41 907 1
原创 3.1-上位机与下位机私有协议设计与封包设计(CRC校验算法)
一、前言通信协议的定制相当于上位机与下位机之间的桥梁,因此协议定制对于上位机开发与下位机开发非常重要,非常关键。至与提到的协议定制,那么上位机与下位机直接的通信有没有标准的协议可以参考呢?或者有没有现成的库可以直接使用呢?答案是否定的。即便是有也未必适合你。因为对于不同的上位机与下位机,有不同的通信方式、不同的数据特点、对传输速度要求不同、对传输稳定性要求不同等,从而导致没有一个唯一的通信协议标...
2020-03-07 15:54:35 4973 9
原创 2.10-上位机软件怎样选择合适的通信方式?
一、常用的上位机与下位的连接方式串口232串口485有线网络无线网络Wi-FiUSB通信蓝牙二、选择连接方式的一般依据在选择上位与下位机连接方式的时候,一般要考虑的依据如下:是否需求无线通信是否要求通信防干扰传输距离有多远对传输速度有什么要求连接便捷性是否有要求是否对通信稳定性要求高根具数据的特点考虑通信方式根据不同上位机设备选择不同通信方式三、各种通信方...
2020-03-01 17:26:14 5750
原创 2.9-局域网查找设备的实现代码(支持有虚拟网卡)
一、前言前面2章分别介绍了“局域网查找设备原理”和“查找局域网设备时候,有虚拟网卡的处理办法”。本章为前2章所提原理的实现代码。使用Qt开发平台和c#winform开发平台分别给出代码实现。二、使用Qt实现局域网设备查找效果图功能类设计规划由于代码比较多,建议阅读源代码。这里仅对代码结构以及类功能设计做介绍,以方便阅读源码。command/crc.h/cpp生成与检验CRC校...
2020-03-01 17:25:07 1692 1
原创 2.8-局域网查找设备时有虚拟网卡干扰的编程处理方法(网络UDP广播包发不出去)
一、遇到问题的描述在开发“局域网查找设备”这个功能时候,一般都会使用局域网广播技术。常见的问题时在编写程序的时候在自己电脑上使用没有问题,但是在用户或测试机器上,出现“无法查找到设备的问题”。使用WireShark软件监听局域网,可以发现是在自己软件查找设备的时候,没有正常发送出去局域网广播。二、找到问题的真正原因初步找到原因既然是广播没有发送出去,那就开始调试与测试,经过在多台电脑上对...
2020-03-01 17:21:47 1711 1
原创 2.7-局域网查找设备的原理
一、前言在上位机软件开发中离不开要连接下位机设备(如果离开了就不算是上位机软件了)。而连接设备的方式如果做不好,非常影响使用使用者的体验。想要做好就一个方向,那就是实现连接设备的“傻瓜化”(就像当时傻瓜相机的发明一样)。对应到上位机软件的设备连接就是实现自动化或半自动化连接设备。尽量避免让用户“填”或“选”)。比如,用户打开软件查找设备发现好几个串口号,那么用户该选哪个号连接呢?只能一个一个的试...
2020-03-01 17:12:38 3756 2
原创 2.6-使用C#Winform开发Tcp/Udp网络小助手(含步骤和源码)
一、界面设计在做软件之前使用“软件界面设计工具”先设计并绘制出软件界面,方便在写代码之前确认“功能需求”以及“交互流程”。这里使用的软件是:“Axure RP”二、新建工程与绘制界面新建工程:使用任意一个Visual studio即可,这里使用Visual studio2017作为开发环境(安装的时候选择.net桌面开发)。新建工程选择“c# winform类型的工程,然后填写工程...
2020-02-24 17:05:42 9004 4
原创 2.5-使用Qt开发Tcp/Udp网络小助手(含步骤和源码)
一、界面设计在做软件之前使用“软件界面设计工具”先设计并绘制出软件界面,方便在写代码之前确认“功能需求”以及“交互流程”。这里使用的软件是:“Axure RP”二、新建工程与绘制界面创建工程使用Qt Creater 新建一个“Qt Widgets Application”。填好工程名字后,然后点击下一步,直到类信息页面选择Base class为:“QDialog”并修改类名字为“Ne...
2020-02-24 16:59:15 2908 2
原创 2.4-网络通信编程你需要掌握的背景知识
一、前言随着网络通信的发明以被及广泛使用,使得人类从“工业社会”进入到“信息社会”。网络影响了各行各业的运作方式,促使了新行业的诞生,也推进了人类文明前进的步伐。那么就来学习一下网络知识吧。本章介绍的网络编程知识是为了下一节讲实际编码做准备。由于网络相关的知识非常庞大不适合在本书中系统讲解,因此仅解答网络编程中常见且重要的几个问题。本章知识虽然零碎,但是是掌握网络编程必备的背景知识。二、什么是...
2020-02-20 21:33:11 1663 1
原创 2.3-使用C#Winform开发串口小助手开发步骤
一、界面设计在做软件之前使用“软件界面设计工具”先设计并绘制出软件界面,方便在写代码之前确认“功能需求”以及“交互流程”。这里使用的软件是:“Axure RP”二、新建工程与绘制界面新建工程:使用任意一个Visual studio即可,这里使用Visual studio2017作为开发环境(安装的时候选择.net桌面开发)。新建工程选择“c# winform类型的工程,然后填写工程名...
2020-02-18 15:54:01 1991 1
原创 2.2-使用Qt开发串口小助手的开发步骤
一、界面设计在做软件之前使用“软件界面设计工具”先设计并绘制出软件界面,方便在写代码之前确认“功能需求”以及“交互流程”。这里使用的软件是:“Axure RP”二、新建工程与绘制界面创建工程使用Qt Creater 新建一个“Qt Widgets Application”。填好工程名字后,然后点击下一步,直到类信息页面选择Base class为:“QDialog”并修改类名字为“Se...
2020-02-16 18:20:48 1208
原创 # 24-Qt Creater 设置文件编码为UTF-8(图文)
Qt Creater 设置文件编码为UTF-8设置步骤如下图所示:文件->偏好设置->文字编辑->表现->右侧编码设置。
2020-02-16 16:16:11 1122
原创 2.1-关于串口上位机编程你需掌握的背景知识
一、串行通信简介定义:串行通信是一种使用串行数据流来传送数据的通信协议,相区别于“并行通信”;串行通信的特点是使用一根电线完成发送数据,同时使用另一根电线完成接受数据。上面提到“串行通信”只是一种协议,那么对这个协议的实现分别有:RS232标准、RS485标准。这就意味着在开发这些协议对应的“上位机软件”的时候,可以同一个电脑编程“串口通信编程库”。二、串口参数配置端口 port : ...
2020-02-12 19:17:48 3663 3
原创 目录(哈喽,上位机)
注:本书目前在创作阶段,完成的章节会以蓝色超链接文字显示。一、前言1.1-什么是上位机,什么是下位机?1.2-上位机开发应该选择哪个编程语言?1.3-上位机开发应该选择哪个开发平台?1.4-什么是面向过程设计,什么是面向对象设计二、通信2.1-串口通信编程2.2-串口小助手开发2.3-网口通信编程2.4-网口小助手开发2.5-蓝牙通信编程2.6-蓝牙小助手开发2.7-局域...
2020-02-09 17:47:23 4289 10
原创 12.1-关于软件版本号,你所不知的设计思想
一、版本号的含义版本号的作用很多场合都会用到版本号,这个号码的主要作用就是明确区别每一个发布版本(相当于起了一个唯一的名字)。在软件开发中版本号的具体作用如下:用于区别开发中的内部测试版本号,方便开发人员和测试人员沟通,明确那个版本的软件有哪些bug存在。用于对外发布软件的时候明确标示出版本号,方便用户确定当前是使用了那个版本的软件,方便软件更新和问题反馈方便程序实现自动检测更新功...
2020-02-09 17:46:29 2163
原创 1.4-从“把大象装进冰箱拢共分几步”来理解面向对象编程思想
一、定义面向过程概念面向过程是一种以过程为中心的编程思想,它是一种基础的顺序的思维方式,面向对象方法的基础实现中也包含面向过程思想。特性:模块化 流程化优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开 发,性能是最重要的因素。缺点:没有面向对象易维护、易复用、易扩展面向对...
2020-02-09 17:17:46 2672
原创 1.3-原来这才是大家常用的上位机开发平台
一、有哪些上位机开发平台(优缺点和使用场景)由于上位机概念的广泛性,所以上位机开发平台可以是任何开发平台。这里介绍几个常用的经典的上位机开发平台及其特性。VB(Visual Basic)开发语言:Basic(BASIC是一种直译式的编程语言,在完成编写后不须经由编译及连接等步骤即可执行,类似脚本语言)开发工具:Visual Basic(语言简单易用,对面向对象编程和多线程编程支持不完整...
2020-02-09 17:16:46 30980 3
STM32L0xx软件校准RC晶振.zip
2020-07-30
nsis-3.02.1-setup.exe
2020-03-28
QT动态语言切换、历史语言记录、QMessageBox和QDialogButtonBox的Ok按钮动态切换汉字
2019-12-25
qt_ffmpeg_mp4_export_and_import.zip
2019-09-04
Qt使用qbreakpad示例工程(win32,macos,linux).zip
2019-06-13
创建cordova工程需要的库文件
2017-08-10
Android拖动,缩放,自定义内容控件源码
2017-06-23
调用cordova插件的一个ionic实例,插件包含android服务
2017-01-05
cordova调用Android关于服务的插件示例
2017-01-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人