<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hyafz的专栏]]></title><description><![CDATA[愚者千虑，终有一得。日拱一卒，功不唐捐。——记录、总结、思考、交流]]></description><link>https://blog.youkuaiyun.com/josephfeng</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; josephfeng]]></copyright><item><title><![CDATA[MCU进行双精度与单精度浮点数运算的速度比较测试]]></title><link>https://blog.youkuaiyun.com/josephfeng/article/details/118292569</link><guid>https://blog.youkuaiyun.com/josephfeng/article/details/118292569</guid><author>josephfeng</author><pubDate>Mon, 28 Jun 2021 09:09:30 +0800</pubDate><description><![CDATA[测试平台
MCU: STM32F767，启动硬件双精度浮点运算协处理器
IDE: Keil RVMDK V5.21.1.0
浮点协处理器：启用双精度浮点协处理器
主频：108MHz
测试方法
分别进行100万次双精度与单精度浮点数加运算，计算各消耗多少时间，打印输出累加结果。
测试代码
void fpSpeedTest(void)
{
	int begin_tick, end_tick;
	double dp1 = 1.0;
	double dp2 = 1.0;
	double dp = 0.0;
	beg]]></description><category></category></item><item><title><![CDATA[QTableWidget设置列表头显示多行文本]]></title><link>https://blog.youkuaiyun.com/josephfeng/article/details/115954487</link><guid>https://blog.youkuaiyun.com/josephfeng/article/details/115954487</guid><author>josephfeng</author><pubDate>Wed, 21 Apr 2021 14:55:57 +0800</pubDate><description><![CDATA[QTableWidget设置列表头显示多行文本应用场合实现办法
应用场合
某些时候需要表格的列表头显示多行文本，比如一行名称，下面带一行单位，例如：

如何实现这种效果呢？
实现办法
只需要在需要分行显示的列表头文本中插入’\n’即可。
    QList&lt;QString&gt; columnNames;
    columnNames &lt;&lt; "序号" &lt;&lt; "计量回路名称"
                &lt;&lt; "生产时间\n(HH:MM:SS)"
       ]]></description><category></category></item><item><title><![CDATA[Keil实现软件版本号与实际编译生成的目标代码版本自动一一对应]]></title><link>https://blog.youkuaiyun.com/josephfeng/article/details/106763175</link><guid>https://blog.youkuaiyun.com/josephfeng/article/details/106763175</guid><author>josephfeng</author><pubDate>Mon, 15 Jun 2020 15:19:05 +0800</pubDate><description><![CDATA[为何有这个需求？
做嵌入式软件开发的人对于手工维护版本号总是心有抵触。因为代码提交很频繁，如果每次提交都需要手动修改子版本号，不胜其烦。而且难免会有遗漏的时候，这样版本号就失去了意义，并不能指明其与代码的真实对应关系。因为即使有版本号，也不知道是否就是预期的版本。
有什么办法能解决这个痛点呢？
答案是有！——使用编译日期与时间替代子版本号。
实现办法
C语言编译器生成目标代码时，会生成常量字符串：__DATE__ 、__TIME__，分别表示编译的日期与时间。将这两个字符串作为版本号的一部分，每次编译时都会]]></description><category></category></item><item><title><![CDATA[为什么在学校中只应使用自由软件]]></title><link>https://blog.youkuaiyun.com/josephfeng/article/details/106734666</link><guid>https://blog.youkuaiyun.com/josephfeng/article/details/106734666</guid><author>josephfeng</author><pubDate>Sat, 13 Jun 2020 16:58:39 +0800</pubDate><description><![CDATA[转载自：https://www.gnu.org/education/edu-schools.html
为什么在学校中只应使用自由软件

这是针对英文原版页面的中文翻译。

Richard Stallman 著
教育活动，包括从幼儿园到大学的各级学校，有道德职责只教授自由软件。
所有计算机用户都应该坚持使用自由软件：它赋予用户控制其计算的自由—专属软件，执行的是其所有者或开发者的意愿，而不是其用户的意愿。自由软件还赋予用户互相合作的自由，这就是诚信的生活。这些道理同样适用于学校。不过，本文的目的是展示特别针对]]></description><category></category></item><item><title><![CDATA[W25Q256编程时需要关注的器件特性]]></title><link>https://blog.youkuaiyun.com/josephfeng/article/details/106274121</link><guid>https://blog.youkuaiyun.com/josephfeng/article/details/106274121</guid><author>josephfeng</author><pubDate>Fri, 22 May 2020 10:17:43 +0800</pubDate><description><![CDATA[W25Q256特性

W25Q256是NOR FLASH（相比NAND FLASH，擦除很慢，写比较慢，读快很多，可以执行程序，出现坏块的机率更低，安全性更好，价格更贵，容量更小），规格参数如下所示。

W25Q256由131072个可编程页组成，每页包含256字节，总共256M bits可编程位(32M Bytes 可编程字节)。
一次可编程256字节（也可以一次编程1字节，必须在同一个页）。如果写操作（Page Program 02h）超过了同一页的范围，则会返回至页的起始位置继续写，有可能覆盖已写入的]]></description><category></category></item><item><title><![CDATA[MCU进行双精度与单精度浮点数运算的误差比较测试]]></title><link>https://blog.youkuaiyun.com/josephfeng/article/details/105989987</link><guid>https://blog.youkuaiyun.com/josephfeng/article/details/105989987</guid><author>josephfeng</author><pubDate>Fri, 08 May 2020 10:51:03 +0800</pubDate><description><![CDATA[测试平台
MCU: STM32F767，启动硬件双精度浮点运算协处理器
IDE: Keil RVMDK V5.21.1.0
测试方法
浮点数0.1分别以单精度与双精度累加1000000次，打印输出累加结果。
测试代码
    double dVal = 0;
    float fVal = 0;
    for(int i = 0; i &lt; 1000000; i++){
        d...]]></description><category></category></item><item><title><![CDATA[VC++ MFC向编辑框控件动态添加多行数据，并保持竖直滚动条始终在底部的办法]]></title><link>https://blog.youkuaiyun.com/josephfeng/article/details/103986128</link><guid>https://blog.youkuaiyun.com/josephfeng/article/details/103986128</guid><author>josephfeng</author><pubDate>Wed, 15 Jan 2020 11:53:36 +0800</pubDate><description><![CDATA[编辑框控件属性设置
Multiline True
Horizental Scroll False
Vertical Scroll True
编辑框关联变量
CEditControl ecInput;
CString ecInputStr;

数据追加及滚动条操作
ecInputStr.AppendFormat("%d\n", (frameData &amp; 0xff));
len = ecInp...]]></description><category></category></item><item><title><![CDATA[VS2015 VC++将窗体保持置顶的办法]]></title><link>https://blog.youkuaiyun.com/josephfeng/article/details/103972521</link><guid>https://blog.youkuaiyun.com/josephfeng/article/details/103972521</guid><author>josephfeng</author><pubDate>Tue, 14 Jan 2020 14:34:30 +0800</pubDate><description><![CDATA[注意：本方法适用于VS2015或之后版本，不适用于VC++ 6.0版本，其它版本未验证。
办法
重载OnInitDialog()函数，在该函数中调用：
SetWindowPos(&amp;wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

MSDN中对SetWindowPos()函数的说明
CWnd::SetWindowPos
更改子窗口、弹出窗口...]]></description><category></category></item><item><title><![CDATA[解决gcc编译链接含weak函数的库文件出现的一些BUG_2019/03/13]]></title><link>https://blog.youkuaiyun.com/josephfeng/article/details/103869383</link><guid>https://blog.youkuaiyun.com/josephfeng/article/details/103869383</guid><author>josephfeng</author><pubDate>Tue, 07 Jan 2020 10:21:54 +0800</pubDate><description><![CDATA[项目介绍
本项目包含IAP程序与APP程序。APP程序有部分共用代码（包括main\stm32标准库\RTOS\BSP）都编译进库中。另外部分特殊代码由其它程序生成后，连接共用代码库生成目标bin文件，通过IAP下载至FLASH中。
问题描述
1 使用keil编译生成的IAP程序
相同的APP代码，在keil工程中编译下载后可以正常执行（没有生成库，直接编译链接所有代码）。但是使用arm_none...]]></description><category></category></item><item><title><![CDATA[给三十而立的大龄程序员的一个建议：找三五合得来的同事约个饭，谈谈诗和远方吧。]]></title><link>https://blog.youkuaiyun.com/josephfeng/article/details/88386931</link><guid>https://blog.youkuaiyun.com/josephfeng/article/details/88386931</guid><author>josephfeng</author><pubDate>Mon, 11 Mar 2019 01:27:00 +0800</pubDate><description><![CDATA[三十而立，很现实，很迷茫，时间和精力再也经不起挥霍，以前没想到或不愿意想的事情转眼已在眼前，如何找一条出路，让自己活得不那么狼狈？
一个建议：找三五合得来的同事约个饭，谈谈诗和远方。
你有多久没有跟同事谈过工作以外的事情了？
每次部门团建，是不是都是一堆人吃吃喝喝，开着没有营养的玩笑，聊着干巴巴的话题，团建费花掉了，任务完成了，你只感觉身体被掏空般的空虚，心中的苦闷仍无处诉说。
人生需要的是一二知...]]></description><category></category></item><item><title><![CDATA[解决stm32 IAP程序跳转后串口不能发送的问题]]></title><link>https://blog.youkuaiyun.com/josephfeng/article/details/88375707</link><guid>https://blog.youkuaiyun.com/josephfeng/article/details/88375707</guid><author>josephfeng</author><pubDate>Sun, 10 Mar 2019 10:51:44 +0800</pubDate><description><![CDATA[解决stm32 IAP程序跳转后串口不能发送的问题问题描述解决办法
问题描述
在stm32上实现了IAP功能，当IAP程序与APP程序都使用Keil编译工具进行编译链接时，APP程序能够正常工作。但是IAP程序使用Keil编译，APP程序使用gcc-arm-none-eabi交叉编译工具链进行编译时，下载下去后GPIO能正常工作，但是串口发送时总是卡在这一句：
void USART3_putcha...]]></description><category></category></item><item><title><![CDATA[[Qt]如何屏蔽QPushButton的键盘事件]]></title><link>https://blog.youkuaiyun.com/josephfeng/article/details/88183650</link><guid>https://blog.youkuaiyun.com/josephfeng/article/details/88183650</guid><author>josephfeng</author><pubDate>Tue, 05 Mar 2019 15:18:48 +0800</pubDate><description><![CDATA[今天想实现一种效果：当界面上的QPushButton获得焦点后，点击键盘的上、下、左、右方向键，则QPushButton随之前后左右移动。
很简单的一种效果，但是实现起来却绕了弯路。
最初的想法就是在界面类中重载keyPressEvent()，当键值为方向键时对QPushButton对象进行相应的移动操作，非常简单。编译运行，选中QPushButton控件，点击键盘的左右方向键，控件并没有发生预期...]]></description><category></category></item><item><title><![CDATA[Qt窗体中常用坐标的区别与获取途径]]></title><link>https://blog.youkuaiyun.com/josephfeng/article/details/87860084</link><guid>https://blog.youkuaiyun.com/josephfeng/article/details/87860084</guid><author>josephfeng</author><pubDate>Thu, 21 Feb 2019 14:19:09 +0800</pubDate><description><![CDATA[Qt窗体中常用坐标的区别与获取途径1 当前光标相对于屏幕的绝对位置2 当前光标相对于当前窗口的位置3 鼠标事件发生的位置：4 窗体的位置：5 判断鼠标光标是否悬浮在某个子控件上：
1 当前光标相对于屏幕的绝对位置
QCursor::pos()
2 当前光标相对于当前窗口的位置
this-&amp;amp;amp;gt;mapFromGlobal(QCursor::pos())

3 鼠标事件发生的位置：
void Mai...]]></description><category></category></item><item><title><![CDATA[Qt中修改了UI文件后编译，修改总是不生效问题的解决办法]]></title><link>https://blog.youkuaiyun.com/josephfeng/article/details/86693012</link><guid>https://blog.youkuaiyun.com/josephfeng/article/details/86693012</guid><author>josephfeng</author><pubDate>Tue, 29 Jan 2019 17:29:44 +0800</pubDate><description><![CDATA[遇到过几次，采取了以下措施仍不生效，编译后运行仍显示修改前的界面。Qt新手遇到这个问题可能抓瞎了，下面的解决办法可以参考一下：


	重新执行qmake
	
	
	重新执行qmake，清理项目，重新构建项目
	
	
	把build目录下所有编译过程生成的文件全部删除，只保留目录结构，再重新构建项目
	
	
	把工程目录下的.user文件删除，只保留工程文件、头文件、源文件、UI文件，然后重新运行q...]]></description><category></category></item><item><title><![CDATA[QTableWidget添加右键菜单的详细过程]]></title><link>https://blog.youkuaiyun.com/josephfeng/article/details/85863503</link><guid>https://blog.youkuaiyun.com/josephfeng/article/details/85863503</guid><author>josephfeng</author><pubDate>Sat, 05 Jan 2019 18:21:15 +0800</pubDate><description><![CDATA[包含头文件：



#include &amp;lt;QMenu&amp;gt;
#include &amp;lt;QAction&amp;gt;

在类定义中增加一个QMenu对象指针：



    QMenu *table_widget_menu;

在父窗体构造函数中允许QTableWidget接收QWidget::customContextMenuRequested()信号。


ui-&amp;gt;tableWidget...]]></description><category></category></item><item><title><![CDATA[QTableWidget显示模式设置]]></title><link>https://blog.youkuaiyun.com/josephfeng/article/details/85862527</link><guid>https://blog.youkuaiyun.com/josephfeng/article/details/85862527</guid><author>josephfeng</author><pubDate>Sat, 05 Jan 2019 17:53:07 +0800</pubDate><description><![CDATA[1. 设置表头背景颜色


ui-&amp;gt;tableWidget-&amp;gt;horizontalHeader()-&amp;gt;setStyleSheet(&quot;QHeaderView::section{background-color:skyblue}&quot;);

2. 设置表格列拉伸


ui-&amp;gt;tableWidget-&amp;gt;horizontalHeader()-&amp;gt;setSectionResiz...]]></description><category></category></item><item><title><![CDATA[Linux消息队列的使用]]></title><link>https://blog.youkuaiyun.com/josephfeng/article/details/39320063</link><guid>https://blog.youkuaiyun.com/josephfeng/article/details/39320063</guid><author>josephfeng</author><pubDate>Tue, 16 Sep 2014 17:27:40 +0800</pubDate><description><![CDATA[相关头文件及函数调用：]]></description><category></category></item></channel></rss>