<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[技海淘金]]></title><description><![CDATA[会者牛毛，能者亦不寡，然精者殊，而独领风骚者则凤毛麟角!]]></description><link>https://blog.youkuaiyun.com/codehat</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; codehat]]></copyright><item><title><![CDATA[Windows DLL导出符号方法]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/121139972</link><guid>https://blog.youkuaiyun.com/codehat/article/details/121139972</guid><author>codehat</author><pubDate>Thu, 04 Nov 2021 12:31:34 +0800</pubDate><description><![CDATA[经典的做法时使用一个模块定义文件来定义导出符号。

参考我之前的一篇文章：​​​​​​VC2008如何生成及使用DLL_技海淘金-优快云博客

这个方法对于C语言实现的DLL是比较方便的。

但是，如果是C++，想要导出类，通过模块定义文件的方式，我没有找到比较好的办法。

于是这里介绍第二种导出符号的方法：

在头文件里定义：


#if defined LIBP2_EXPORTS
#define LIBP2_API __declspec(dllexport)
#else
#define LIBP2_A]]></description><category></category></item><item><title><![CDATA[使用OpenCV关闭USBCamera的自动白平衡]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/120709875</link><guid>https://blog.youkuaiyun.com/codehat/article/details/120709875</guid><author>codehat</author><pubDate>Mon, 11 Oct 2021 20:08:27 +0800</pubDate><description><![CDATA[目录



前言

背景知识

opencv里的属性set和get实现

dshow接口参考

改造opencv

1. 增加一个自动白平衡的属性定义

2. 在属性的get接口里添加读自动白平衡的实现

3. 重新编译opencv后即可通过属性：

4. 使用示例

前言

本文的方法是在Windows平台上，opencv_3.4.14版本上实施并验证OK的。

VC环境下，在opencv里，通过设置属性“CV_CAP_PROP_WHITE_BALANCE_BLUE_U” 可以达到设置白平衡值的目的...]]></description><category></category></item><item><title><![CDATA[raw.githubusercontent.com 地址解析错误解决办法]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/120431433</link><guid>https://blog.youkuaiyun.com/codehat/article/details/120431433</guid><author>codehat</author><pubDate>Thu, 23 Sep 2021 11:29:19 +0800</pubDate><description><![CDATA[背景

某个开源项目的build.gradle中，有一个github的raw源：


maven { url 'http://raw.github.com/saki4510t/libcommon/master/repository/' }

Android Studio编译时，出现DNS解析错误的问题。

错误描述


Unknown host '请求的名称有效，但是找不到请求的类型的数据。 (raw.githubusercontent.com)'. You may need to adjust the p]]></description><category></category></item><item><title><![CDATA[解决Arduino DUE的程序必需Reset才能启动的问题]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/115406479</link><guid>https://blog.youkuaiyun.com/codehat/article/details/115406479</guid><author>codehat</author><pubDate>Fri, 02 Apr 2021 19:31:09 +0800</pubDate><description><![CDATA[问题现象

Arduino DUE，下载程序后，哪怕是几个简单的串口输出测试程序，也会在断电后第一次开机时无法启动。

必需手动按Reset，或者重新插拔一下USB来重新上电一下才能启动。



问题原因

具体原因未明，单据往上查到的记录，可能时SAM3X这颗CPU在开机时收到脏数据导致其一直在下载模式里退不出来。



解决办法

在主CPU（ATSAM3X）的RESET脚（Reset按键的一个引脚）和GND之间，加一个10uF的电容即可。





踩过的坑

一开始怀疑ATMEGA16U2的固...]]></description><category></category></item><item><title><![CDATA[使用Arduino UNO烧录ATMETA16U2]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/115303827</link><guid>https://blog.youkuaiyun.com/codehat/article/details/115303827</guid><author>codehat</author><pubDate>Mon, 29 Mar 2021 16:07:23 +0800</pubDate><description><![CDATA[0. 前言

因某种原因需要更新我的Arduino DUE上面的USB转串口的芯片ATMEGA16U2里的固件，

找了很多资料，下面是操作步骤，记录一下，方便后续查找：



1. 用Arduino UNO制作一个烧录器

准备一块Arduino UNO的正常主板，用ArduinoIDE烧录一个示例程序：ArduinoISP

这块Arduino UNO主板就变成了一个AVR烧录器（ArduinoISP）了。





2. 准备命令行烧录工具

在ArduinoIDE的安装目录下找到avrdude程..]]></description><category></category></item><item><title><![CDATA[STM32从零开始 - 第三章：从串口输出HelloWorld]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/110357686</link><guid>https://blog.youkuaiyun.com/codehat/article/details/110357686</guid><author>codehat</author><pubDate>Sun, 29 Nov 2020 23:50:40 +0800</pubDate><description><![CDATA[目录



前言

串口初始化

重定向C库的printf函数到串口

在main中添加测试代码

完整的main.c代码

编译下载

程序效果

扩展实验1：格式化字符串输出

扩展实验2：串口输入

前言

本章我们将使用STM32官方BSP中的串口驱动，在串口上输出HelloWorld。



从串口输出HelloWorld的方法

1. 简单的将HelloWorld这个字符串从串口里输出。

2. 可以将C库的printf输出重定向到串口上

本章我们使用第2种方法，因为第一种方法有太多的参考..]]></description><category></category></item><item><title><![CDATA[STM32从零开始 - 第二章：LED闪烁程序]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/109732986</link><guid>https://blog.youkuaiyun.com/codehat/article/details/109732986</guid><author>codehat</author><pubDate>Tue, 17 Nov 2020 00:44:06 +0800</pubDate><description><![CDATA[概述

这一章中，我们基于之前用STM32CubeMX产生的项目，使用STM32CubeIDE环境来开发一个LED闪灯的简单程序。



打开默认项目

先打开STM32CubeIDE，选择File -&gt; Open Projects from File System:





点击Dirctory选择之前用STM32CubeMX产生的工程目录。



然后点击Finish按钮即可。



找到main函数



在左侧的项目浏览窗口中，找到刚刚打开的项目，在src/main.c中能找到main函数入]]></description><category></category></item><item><title><![CDATA[STM32从零开始 - 第一章：开发环境STM32Cube套件]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/109732765</link><guid>https://blog.youkuaiyun.com/codehat/article/details/109732765</guid><author>codehat</author><pubDate>Mon, 16 Nov 2020 23:47:37 +0800</pubDate><description><![CDATA[概述

STM32的开发环境并不唯一。

如果你习惯KEIL开发环境，可以用KEIL环境来开发，虽然代码编辑不太方便，但调试跟踪非常方便。

如果你更熟悉gcc/makefile，则可以自己写makefile来搭建自己的脚本编译环境。

代码编辑器个人还是推荐SourceInsight或者VSCode效率更高。



STM32Cube套装

我们要使用的不是上面两个，而是用ST官方维护和推荐的开发工具包：STM32Cube

这套工具包含了：

STM32CubeMX 这个工具用来根据项目配置产生初始B.]]></description><category></category></item><item><title><![CDATA[找到弹窗广告所在的程序文件位置]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/109626898</link><guid>https://blog.youkuaiyun.com/codehat/article/details/109626898</guid><author>codehat</author><pubDate>Wed, 11 Nov 2020 17:24:59 +0800</pubDate><description><![CDATA[一个天猫双11，一个黑色星期五，各种牛鬼蛇神的流氓软件都搞广告弹窗。

弹窗也就算了，任务栏里还没有内容，找不到是谁弹的广告。。。。。

白嫖也就算了，还不留名这就过分了，怕我删你就别乱弹广告啊。

必需收拾这些流氓软件，不能手软！

1. 祭神器

下载一个来自微软的工具Process Explorer

https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer

解压后，双击执行这个工具



2. 找到弹广告窗的坏]]></description><category></category></item><item><title><![CDATA[STM32从零开始 - 前言：硬件准备]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/109610585</link><guid>https://blog.youkuaiyun.com/codehat/article/details/109610585</guid><author>codehat</author><pubDate>Wed, 11 Nov 2020 00:42:08 +0800</pubDate><description><![CDATA[下面列出此课程中涉及的硬件主板及参考的购买链接。

可以自行选择店铺购买，只要参数一致即可。



1. STM32F103C8T6 开发板









https://item.taobao.com/item.htm?spm=a1z09.2.0.0.14e02e8daDrLMv&amp;id=591061494821&amp;_u=61bg9vk3c54

这是STM32平台的一个典型开发板，后续的课程都是使用这个开发板来进行学习和实验。



2. 1.44寸SPI接口TFT显示屏



...]]></description><category></category></item><item><title><![CDATA[微软蓝牙鼠标3600拆解]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/108464249</link><guid>https://blog.youkuaiyun.com/codehat/article/details/108464249</guid><author>codehat</author><pubDate>Tue, 08 Sep 2020 11:20:01 +0800</pubDate><description><![CDATA[电池仓里的标签上能找到鼠标的具体型号。

Bluetooth Mobile Mouse 3600

Model： 1730

此鼠标没有螺丝，一个都没有，鼠标垫脚及标签下都没有螺丝孔，全靠卡口完成组装咬合。

拆开后的情况：



黄色框出的区域就是关键的卡口，从鼠标的尾部开启，用一字螺丝刀从电池仓靠近尾部中间的位置探进去可以将上盖上的卡口顶开，然后就能打开上盖了。



这是拆开上盖后，从电池仓里可以看到这个卡口孔的位置。



没有拆开顶盖的时候，不容易看到这个卡口，需要仔细找对角度才能看到，对照上面那]]></description><category></category></item><item><title><![CDATA[Android9 Sepolicy规则基础 - MTK平台]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/104572033</link><guid>https://blog.youkuaiyun.com/codehat/article/details/104572033</guid><author>codehat</author><pubDate>Sat, 29 Feb 2020 13:15:11 +0800</pubDate><description><![CDATA[1. SELinux的基础原则

默认拒绝原则 - 任何未经明确允许的行为都会被拒绝（即：白名单制）



2. SELinux的两种执行模式

宽容模式 - 权限拒绝事件会被记录下来，但不会被强制执行。（权限不够时，仅警告）

强制模式 - 权限拒绝事件会被记录下来并强制执行。（权限不够时，拒绝执行）



3. SELinux在安卓平台上的演变

低于安卓4.3 - 默认不支持SELinu...]]></description><category></category></item><item><title><![CDATA[关于pattern的翻译]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/104209826</link><guid>https://blog.youkuaiyun.com/codehat/article/details/104209826</guid><author>codehat</author><pubDate>Fri, 07 Feb 2020 14:34:27 +0800</pubDate><description><![CDATA["pattern" 在各种编程书籍中被翻译为模式。

实际上，在中文中有一个更合适的词：套路



Design Pattern:设计套路

23 classic software design patterns: 23个经典软件设计套路



是否这样翻译更为直观接地气呢^_^


...]]></description><category></category></item><item><title><![CDATA[Windows下检查exe文件的依赖关系]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/102800463</link><guid>https://blog.youkuaiyun.com/codehat/article/details/102800463</guid><author>codehat</author><pubDate>Tue, 29 Oct 2019 15:34:46 +0800</pubDate><description><![CDATA[由于工作需要，有时会实用VisualStudio或Cygwin的gcc编译小的exe程序。

自己使用倒是没什么大问题，但有时候将exe程序提供给别人使用是，由于对方的系统环境比较“纯净”，没有vs，也没有cygwin，程序可能出现无法正常启动的情况。

这里分享一个小技巧来检查exe程序到底依赖哪些DLL，我们将程序外发的时候，只要将这些DLL文件也放在一起就可以了。

对于VC编译的程序，使用...]]></description><category></category></item><item><title><![CDATA[金融POS设备中涉及的一些标准]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/100866065</link><guid>https://blog.youkuaiyun.com/codehat/article/details/100866065</guid><author>codehat</author><pubDate>Sun, 15 Sep 2019 22:56:48 +0800</pubDate><description><![CDATA[本文将我所知的在金融POS上涉及到的标准罗列出来，方便查询，也方便新入门者参考。

水平有限，如有错漏，望海涵，并请不吝赐教！



金融POS涉及的技术标准

标准文档
			简单说明
		
			ISO7810

			ISO7811

			ISO7812

			ISO7813
			
			磁条卡相关国际标准
		ISO7816
			IC卡相关国际标准
		ISO14443
			非...]]></description><category></category></item><item><title><![CDATA[解决Win10系统msconfig配置错误后无法启动的问题]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/96861969</link><guid>https://blog.youkuaiyun.com/codehat/article/details/96861969</guid><author>codehat</author><pubDate>Mon, 22 Jul 2019 15:32:12 +0800</pubDate><description><![CDATA[背景故事

按百度搜出来的某篇经验，通过msconfig设置了启动参数。

https://jingyan.baidu.com/article/414eccf6b5a9646b421f0a5f.html
然后重启后Win10不能正常启动了。
之后自动修复也没办法修改，系统也没有设置还原点。
安全模式也没办法进入。
倒是可以进入命令行模式，但在命令行模式里打不开msconfig，也没办法修改msco...]]></description><category></category></item><item><title><![CDATA[Ubuntu 18.04安装Android 5.1系统编译环境]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/92450617</link><guid>https://blog.youkuaiyun.com/codehat/article/details/92450617</guid><author>codehat</author><pubDate>Mon, 17 Jun 2019 01:15:20 +0800</pubDate><description><![CDATA[基础环境

基础环境的安装，需要参考《重装Ubuntu13.04后需要做的事情》一文。

OpenJDK7

Android 5.1需要使用OpenJDK7编译，但Ubuntu18.04默认的环境是OpenJDK8。

需要参考一下博客里的方法来安装OpenJDK7：

https://blog.youkuaiyun.com/cwh250/article/details/81948610

需要注意的是几个d...]]></description><category></category></item><item><title><![CDATA[Win10如何获取程序自己的版本号]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/90667436</link><guid>https://blog.youkuaiyun.com/codehat/article/details/90667436</guid><author>codehat</author><pubDate>Wed, 29 May 2019 11:19:13 +0800</pubDate><description><![CDATA[前言

之前写过一篇博文，《VS2010获取程序自身的版本号》

近期开发的一个应用，发现在Win7下正常，但到了Win10下，无法获得正确的版本号。

跟踪后发现问题出在这里：


GetFileVersionInfoSize

这个接口在Win7下正确返回，但在Win10下返回错误。



获取资源中版本号的新方法

不想深究Win7和Win10系统处理这个API有什么区别了，于是换了一种方...]]></description><category></category></item><item><title><![CDATA[LittleFS移植实践]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/87726863</link><guid>https://blog.youkuaiyun.com/codehat/article/details/87726863</guid><author>codehat</author><pubDate>Tue, 19 Feb 2019 22:00:43 +0800</pubDate><description><![CDATA[LittleFS移植实践前言相关资料链接先吐为快移植的要点块设备接口对struct lfs_config的说明read 接口解读prog接口解读erase接口解读关于动态内存
前言
LittleFS是ARM mbedOS的官方推荐文件系统，具有轻量级、掉电安全的特性。
相关资料链接

开源项目：https://github.com/ARMmbed/littlefs
文档：开源项目中的README....]]></description><category></category></item><item><title><![CDATA[CMAKE用法示例]]></title><link>https://blog.youkuaiyun.com/codehat/article/details/87713421</link><guid>https://blog.youkuaiyun.com/codehat/article/details/87713421</guid><author>codehat</author><pubDate>Tue, 19 Feb 2019 15:46:12 +0800</pubDate><description><![CDATA[CMAKE用法示例命令行相关示例使用cmake创建目录在命令行中传入CMAKE变量让cmake使用指定的编译工具链让cmake产生Unix Makefile以4线程编译目标CMAKE脚本相关示例指定最小的cmake版本号输出日志定义工程名及工程使用的语言类型定义语言标准定义一个变量判断一个变量没有被定义判断一个变量内容与特定的字符串相等设置可执行程序后缀名设置静态库的默认前缀（没有lib）添加编译...]]></description><category></category></item></channel></rss>