<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Robert Zhang]]></title><description><![CDATA[爱出者爱返 福往者福来]]></description><link>https://blog.youkuaiyun.com/robert_cysy</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; robert_cysy]]></copyright><item><title><![CDATA[13.5-“制作一款私有IAP串口下载小工具”之STM32的Bootloader代码编写（包含源码）]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/107828235</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/107828235</guid><author>robert_cysy</author><pubDate>Wed, 05 Aug 2020 23:59:41 +0800</pubDate><description><![CDATA[一、开发环境与工具
STM32CubeMX、TrueSTUDIO、J-Flash V6.32f
芯片：STM32L072KBUx
二、使用CubeMx新建工程与配置说明
使用CubeMX通过芯片型号新建工程。需要配置如下内容：

配置系统时钟
下载程序的SWD口
一个定时器（开启中断）
一个串口（开启接收中断）

配置过程及详细参数如以下截图所示：
注意：只要能实现同样功能即可，不强制必须使用串口1或定时器7。





三、通信协议构架代码
在单片中需要接收来自上位机的数据，并安装协议规定格式反馈数据。比]]></description><category></category></item><item><title><![CDATA[13.4-“制作一款私有IAP串口下载小工具”之STM32的Bootloader设计说明]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/107828024</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/107828024</guid><author>robert_cysy</author><pubDate>Wed, 05 Aug 2020 23:37:43 +0800</pubDate><description><![CDATA[一、原理简要说明
从上一章可知，IAP更新程序的原理，就是在单片机flash中的划分出两个区域，分别叫做Bootloader区域和一个App区域。芯片上电启动的时候，会默认运行Bootloader，然后bootloader来做逻辑判断，bootloader会等待5s左右，如果在5s之内收到需要更新固件的命令，则进行固件更新，否则的话，判断芯片中是否已经有之前的可用app。如果有，跳转过去执行app。否则的话继续保持在“等待固件下载模式”。这就是bootloader的大概原理。
二、Bootloader逻辑说]]></description><category></category></item><item><title><![CDATA[13.3-“制作一款私有IAP串口下载小工具”之上位机软件设计说明（包含源码）]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/107827949</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/107827949</guid><author>robert_cysy</author><pubDate>Wed, 05 Aug 2020 23:25:40 +0800</pubDate><description><![CDATA[一、原理简要说明
实现IAP下载，本质上相当于把单片机编程软件编译生成的bin文件，传递到“单片机的Flash”中。而在传递的过程中可以使用任何数据传输通道，比如：串口，蓝牙，网络等。而传输bin文件的协议可以采用一些标准的格式，也可以完全自定义一个协议。总之，只要满足把bin文件传输到单片机的Flash即可。本文所描述的传递方式采用：串口+私有协议。
二、上位机IAP下载工具的功能设计

bin文件选择框和选择按钮
用于从电脑磁盘上选择一个要传输到单片机的bin文件。
串口通信以及协议实现
用于和下位机单]]></description><category></category></item><item><title><![CDATA[13.2-“制作一款私有IAP串口下载小工具”之串口IAP的通信协议设计]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/107827875</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/107827875</guid><author>robert_cysy</author><pubDate>Wed, 05 Aug 2020 23:22:11 +0800</pubDate><description><![CDATA[一、前言
本章以“串口IAP”来讲解IAP的实现过程。因此，在这里讲一下，具体通过怎样的技术与协议，来把“固件”文件传递到芯片的bootloader中。
串口通信方式与参数约定
可以使用“RS232”或“RS485”来组成通信链路。串口通信参数约定如下：

波特率：57600
数据位：8bits
校验：None
停止位：1 bit

二、协议约定


协议规则
CRC校验码 = [命令类型码 + 命令码 + 命令参数]
一个完整封包 = [包头 + 包长 + 命令类型码 + 命令码 + 命令参数 + CRC]]></description><category></category></item><item><title><![CDATA[13.1-自己开发一个“单片机烧写工具”！不是开玩笑吧？原来如此^~^（OTA升级）]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/107827802</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/107827802</guid><author>robert_cysy</author><pubDate>Wed, 05 Aug 2020 23:17:12 +0800</pubDate><description><![CDATA[听到这个"需求"的第一反应“这是开玩笑吧”。我是是一个普通的码农，怎么可能开发出了那么复杂的东西。
带着一头冷汗，开始查资料中…
原来如此，有一种下载程序的方式叫做“IAP”。 悬着的心终于放了下来。
原来“给单片机烧写程序”的实质就是把“编译”好的“程序二进制文件”复制到芯片的flash中，和从电脑传电影到MP4播放器上是相似的原理。只不过现在这个“电影”是 “程序二进制文件”，而单片机就是这个“二进制程序”的“播放器”。
一、前言（需求背景）
需求背景就是“远程更新硬件设备的芯片程序（固件）”。在开发硬]]></description><category></category></item><item><title><![CDATA[8.3-写代码必须要写注释吗？（为什么现实中不写注释？）]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/107454066</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/107454066</guid><author>robert_cysy</author><pubDate>Sun, 19 Jul 2020 23:36:36 +0800</pubDate><description><![CDATA[一、写代码要写注释
“写代码要写注释”自从学编程，这就话就伴随着你。可见注释的重要性。
注释的作用：

说明函数的功能
说明函数参数的意思
说明函数这样设计的原理（计算公式）
说明函数的使用场景
作者和日期
说明变量的作用
函数调用方法与注意事项

总之为了能让读这个函数的人明白这个函数的功能，可以注释各种各样的信息。而没有这些注释文字，就不太容易看懂函数的功能与调用用方法。没有注释的情况下，隔一段时间之后，自己也看懂的自己所写函数的功能了。因此，很多书籍、老师、领导、同事、包括你自己，都会告诉你“一定要写]]></description><category></category></item><item><title><![CDATA[8.2-源码“目录结构”命名规范与“文件名、函数名、变量名”命名规范]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/107449199</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/107449199</guid><author>robert_cysy</author><pubDate>Sun, 19 Jul 2020 18:44:36 +0800</pubDate><description><![CDATA[一、为什么要规范代码格式？


为了写出简洁整齐的代码
简洁易读的代码，便于自己日后阅读，同时也方便和你协作开发软件的同事阅读你的代码。尤其在多人协作开发的时候非常重要。因此写代码的时候需要遵循一定的格式规范。规范内容一般包括：函数命名格式、变量命名格式、大小写、缩进、花括号位置、特殊含义的前缀或后缀、注释格式等。


避免写出“一次性代码”
有的代码，让人一看就想删除了，然后重新实现，重新编码。这就是有一个编码规范的重要性。也就是说你写的代码，不仅仅要实现逻辑功能。还要保证代码的可读性。方便你自己阅读，也]]></description><category></category></item><item><title><![CDATA[1.7-工控上位机软件开发平台介绍]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/107445228</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/107445228</guid><author>robert_cysy</author><pubDate>Sun, 19 Jul 2020 14:57:47 +0800</pubDate><description><![CDATA[一、前言
前面几章一直没有提到上位机的另一个主要使用场合，即“工业上位机软件”。主要是因为本人没有接触过，不敢贸然发表见解类的文章。最近在机缘巧合下，对“工业上位机软件”有了一些初步的了解。在这里和大家分享一下。注意本节的内容还不够专业全面，只适合对“工控软件”进行一个初步的了解。
二、工业“自动化”控制系统的组成
在工业生产过程中，最重要的是安全，其次是稳定。工业生产环境中可以常见大如“吊车”般的设备、有毒气体、强碱、强酸、几千度的高温、易燃易爆气体、高压水蒸气。所以容不得半点错误，出错就意味着要死人，因]]></description><category></category></item><item><title><![CDATA[1.6-程序员必须要会“英语”吗？（会英语在编程中的优势）]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/107438314</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/107438314</guid><author>robert_cysy</author><pubDate>Sun, 19 Jul 2020 01:25:31 +0800</pubDate><description><![CDATA[一、前言（程序员必须要会“英语”吗？）
当然不是必须了!可以说一个完全不懂英语的人都可以完成编程工作（用拼音或字母代替）。比如如下代码：
//有1、2、3、4个数字，能组成多少个互不相同且无重复数字的三位数
int main()
{
    int i,j,k;
    for(i=1;i&lt;5;i++)
        for(j=1;j&lt;5;j++)
            for (k=1;k&lt;5;k++)
                if (i != k &amp;&amp; i]]></description><category></category></item><item><title><![CDATA[4.5-那些漂亮软件是怎么做出来的？为啥自己做的好丑]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/105514857</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/105514857</guid><author>robert_cysy</author><pubDate>Tue, 14 Apr 2020 16:32:48 +0800</pubDate><description><![CDATA[一、前言
大公司制作的软件都非常好看，比如“360安全大师”、“QQ音乐”等。使用同样的开发平台，为啥人家的软件那么好看，而自己开发的软件总是呈现一股“怀旧风格”。那么这些漂亮的软件是怎样做出来的，使用了哪些技术呢？
二、分析软件“吃藕”的原因
“看这个软件做的这么吃藕，是哪个程序员开发的？”
“软件做的丑，关程序员什么事！”
程序员只负责开发代码和功能实现。哪懂什么原型图设计、UI设计图绘制。因...]]></description><category></category></item><item><title><![CDATA[4.4-软件开发中，“UI设计图”的作用与绘制方法说明]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/105478057</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/105478057</guid><author>robert_cysy</author><pubDate>Sun, 12 Apr 2020 22:37:25 +0800</pubDate><description><![CDATA[一、为什么要绘制软件UI设计图


作用和意义
UI设计图为软件设计的最终效果图。软件UI设计图可以精确的描述软件最终的形态，包括控件样式、控件尺寸、控件配色、控件交互方式、布局样式、字体样式和尺寸。除了可以通过UI设计图看到软件的最终效果，UI设计图也是软件界面编程的最终依据。同时在软件编程中，实现软件最终界面所使用的图片和图标就是从UI设计图中裁剪出来的。


谁设计
UI设计图一般有专门的“...]]></description><category></category></item><item><title><![CDATA[4.3-软件开发中，“原型图”的作用与绘制方法说明]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/105459793</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/105459793</guid><author>robert_cysy</author><pubDate>Sat, 11 Apr 2020 21:29:06 +0800</pubDate><description><![CDATA[一、为什么要绘制软件原型图


原型图的作用
原型图是一种动态模拟软件最终形态的图。原型图主要用于和领导或目标客户确认软件的最终呈现效果。原型图可以生动的展示最终效果并支持初步的模拟操作和测试，因此可以用于验证软件设计理念，以及接收修改意见和设计缺陷反馈。虽然绘制原型图会花费一些时间，但是能避免之后多次修改软件造成的额外人工浪费和资金浪费。
一般来说，绘制原型图和软件功能的确定是由"产品经理"来完...]]></description><category></category></item><item><title><![CDATA[12.4-在Qt中使用Log4Qt输出Log文件，看这一篇就足够了]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/105446185</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/105446185</guid><author>robert_cysy</author><pubDate>Sat, 11 Apr 2020 01:50:04 +0800</pubDate><description><![CDATA[文章目录一、为啥要使用第三方Log库，而不用平台自带的Log库二、Log4j系列库的功能介绍与基本概念三、Log4Qt库的基本介绍四、将Log4qt组装成为一个单独模块五、使用配置文件的方式配置Log4Qt六、使用代码的方式配置Log4Qt七、在Qt工程中引入Log4Qt库模块的方法八、获取示例中的源代码
一、为啥要使用第三方Log库，而不用平台自带的Log库
首先要说明的是，在平时开发和调试中开...]]></description><category></category></item><item><title><![CDATA[12.5-使用Qt实现跨平台C++崩溃捕获，看这一篇就足够了（Breakpad）]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/105395799</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/105395799</guid><author>robert_cysy</author><pubDate>Wed, 08 Apr 2020 20:46:00 +0800</pubDate><description><![CDATA[一、软件奔溃捕获的意义
应用程序发布后，不能保证百分百没有bug并引发崩溃。因此，在出现崩溃的情况下需要记录崩溃详情并给用户弹出崩溃提示对话框，提示用户重启软件以及上报（上传）崩溃。
这样做意义是：
能保证软件在使用过程中发现的bug都能被收集起来，并根据崩溃详情修改bug，然后发布修复bug的版本。如果软件在使用过程中直接闪退没有任何提示，不仅用户体验不好，还无法获取崩溃的原因。之后更具用户反馈...]]></description><category></category></item><item><title><![CDATA[26-Qt在有多个屏幕的电脑上，在一个屏幕中居中显示软件窗口]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/105331284</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/105331284</guid><author>robert_cysy</author><pubDate>Sun, 05 Apr 2020 18:49:29 +0800</pubDate><description><![CDATA[参考以下代码即可实现软件在多屏幕电脑的其中一个屏幕的中间显示。支持跨平台。
    MainWindow w;
    
    //获取当前软件所在屏幕的序号
    int currentScreenIndex = a.desktop()-&gt;screenNumber(&amp;w);
    
    //这个获取指定屏幕获取其屏幕分辨率的方法 警告deprecated
    //QR...]]></description><category></category></item><item><title><![CDATA[4.2-软件开发中，“思维导图”的作用与绘制方法介绍]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/105282657</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/105282657</guid><author>robert_cysy</author><pubDate>Thu, 02 Apr 2020 23:57:13 +0800</pubDate><description><![CDATA[一、怎样从”需求“转变为”软件功能“呢？
做一个软件，你肯定是有一个明确的想法或需求，比如你是外包公司接了一个甲方的需求，或者领导和你说要做一个做软件，并告诉了你基本的需求。需要你根据这个“需求”设计出软件的“具体实现功能”。这个时候，就需要你根据对需求的理解，并结合软件开发的知识来设计软件的功能。
具体怎样设计呢？总不能仅仅在脑子里想一想吧。因此，你需要把每个需求点对应的软件设计写下来。一般是用...]]></description><category></category></item><item><title><![CDATA[1.5-在公司被称作“某工”，一起来了解上位机程序员都和哪些人打交道]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/105210361</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/105210361</guid><author>robert_cysy</author><pubDate>Mon, 30 Mar 2020 22:19:06 +0800</pubDate><description><![CDATA[一、前言
本书主要讲解“上位开发”相关的知识。既然是上位机软件开发，因此此职位肯定是在仪器仪表等硬件设备相关的公司。那么与“上位机程序员”相处在一起的同事们都在哪些职位呢？同时“上位机程序员”和这些职位有哪些工作上的合作与沟通呢？接下来一起来了解一下吧！
二、常见岗位以及与“上位机程序员”的交集


研发经理或项目经理
岗位职责：
带领团队、需求分析、技术方案选择、团队招聘和培养、任务分解。
与上...]]></description><category></category></item><item><title><![CDATA[4.1-了解软件是怎样一步一步设计出来的，最完整的软件开发流程]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/105188092</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/105188092</guid><author>robert_cysy</author><pubDate>Sun, 29 Mar 2020 22:26:24 +0800</pubDate><description><![CDATA[一、软件开发从0到1的各个阶段

启动阶段
公司领导确认项目组团队组成，包括产品经理、研发项目经理、研发工程师、测试团队等。明确项目管理制度，每个阶段的成果产物需要进行相应的评审，评审有相应的《会议纪要》；从项目启动起，研发项目经理每周提供《项目研发周报》；测试阶段，测试工程师每周提供《项目测试周报》。





负责人
输出产物
描述




产品经理
调研文档
了解项目背景，了解项目相关人员的...]]></description><category></category></item><item><title><![CDATA[12.3-Windows下使用NSIS打包QT应用程序安装包，看这一篇就足够了（包括第三方Lib库）]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/105169237</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/105169237</guid><author>robert_cysy</author><pubDate>Sat, 28 Mar 2020 22:14:33 +0800</pubDate><description><![CDATA[一、准备需要打包的文件

准备可执行程序文件
使用Qt Creater或visual Studio+qt插件生成目标软件的Release版本。把生成的软件复制到一个单独的目录中。打开CMD命令行，切换到刚才创建的目录中，使用“windeployqt”命令来查找并添加当前软件的qt依赖库。命令详情如下：

windeployqt LedStripEditor.exe

命令执行完成以后，在刚才所创建...]]></description><category></category></item><item><title><![CDATA[12.2-MacOS下打包QT应用程序为DMG包，看这一篇就足够了（包括第三方Lib库）]]></title><link>https://blog.youkuaiyun.com/robert_cysy/article/details/105161639</link><guid>https://blog.youkuaiyun.com/robert_cysy/article/details/105161639</guid><author>robert_cysy</author><pubDate>Sat, 28 Mar 2020 15:51:13 +0800</pubDate><description><![CDATA[一、前言
在MacOS系统中，应用软件的安装目录，就在应用软件自己里面。因此所谓安装macos软件，就是直接把应用软件复制到你想安装的目录即可。当然标准的应用软件安装目录为“/Applications”。
这种安装目录就在软件自己里面的方式叫做“bundle”。所谓的bundle是指，软件是以目录的形式存在，目录中有主可执行程序和此程序所依赖的库文件，以及此软件相关的配置文件和图标等。只是在mac...]]></description><category></category></item></channel></rss>