<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[asd1147170607的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/asd1147170607</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; asd1147170607]]></copyright><item><title><![CDATA[在Windows上基于MSYS2 MSVC工具链编译ffmpeg源码]]></title><link>https://blog.csdn.net/asd1147170607/article/details/156548268</link><guid>https://blog.csdn.net/asd1147170607/article/details/156548268</guid><author>asd1147170607</author><pubDate>Sun, 04 Jan 2026 00:05:40 +0800</pubDate><description><![CDATA[基于MSYS2 UCRT64工具链编译ffmpeg源码。MSYS2  MINGW 与 UCRT64 均基于 mingw 编译器进行编译，在 Windows 平台上兼容性不好。本文介绍基于 MSVC 编译器进行编译。]]></description><category></category></item><item><title><![CDATA[在Windows上使用 MSYS2 工具链编译ffmpeg源码]]></title><link>https://blog.csdn.net/asd1147170607/article/details/156546336</link><guid>https://blog.csdn.net/asd1147170607/article/details/156546336</guid><author>asd1147170607</author><pubDate>Sat, 03 Jan 2026 23:14:44 +0800</pubDate><description><![CDATA[本文使用工具链在 Windows 上编译 FFmpeg 源码，不使用，下面介绍一下MINGW64与UCRT64的区别。它们的核心区别在于使用的 C 语言运行时库不同，这直接影响了程序的兼容性、现代性和对C/C++新标准的支持。特性MSYS2 MINGW64环境MSYS2 UCRT64 环境核心影响C 运行时库传统的 msvcrt.dll现代的 Universal CRTUCRT64更现代、标准、一致目标系统Windows 7 及更高版本Windows 10 及更高版本。]]></description><category></category></item><item><title><![CDATA[在Windows上编译Emacs源码]]></title><link>https://blog.csdn.net/asd1147170607/article/details/156543388</link><guid>https://blog.csdn.net/asd1147170607/article/details/156543388</guid><author>asd1147170607</author><pubDate>Sat, 03 Jan 2026 22:09:25 +0800</pubDate><description><![CDATA[下载并完成解压后，我们看到源码目录下没有可以完成编译配置的configure文件，只有这个文件。一般我们是通过执行configure文件完成编译配置的，例如编译 Qt库。下面对 configure.ac 文件进行介绍。configure.ac 是Autoconf工具的输入文件，需要先通过 Autoconf 生成标准的 configure 脚本才能继续编译。什么是 Autoconf 工具呢？]]></description><category></category></item><item><title><![CDATA[CMake学习]]></title><link>https://blog.csdn.net/asd1147170607/article/details/155992220</link><guid>https://blog.csdn.net/asd1147170607/article/details/155992220</guid><author>asd1147170607</author><pubDate>Tue, 16 Dec 2025 23:17:20 +0800</pubDate><description><![CDATA[CMake 是一个跨平台的开源构建系统生成器。它的核心功能不是直接编译代码，而是根据一个名为 CMakeLists.txt 的配置文件，为你现有的编译环境（如 Make、Ninja、Visual Studio、Xcode 等）生成标准的构建文件。跨平台性：这是最主要的原因。你的项目需要在 Windows（Visual Studio）、Linux（GCC/Make）、macOS（Xcode/Clang）上编译。]]></description><category></category></item><item><title><![CDATA[程序的二进制布局]]></title><link>https://blog.csdn.net/asd1147170607/article/details/117718391</link><guid>https://blog.csdn.net/asd1147170607/article/details/117718391</guid><author>asd1147170607</author><pubDate>Fri, 11 Jun 2021 11:25:43 +0800</pubDate><description><![CDATA[真正的程序员对自己所写的程序的每个字节都有所把握，虽然用一些OOP语言进行开发时，我们几乎不可能做到这一点，但我们还是应该对我们程序的二进制布局有个整体把握。
下面，我将参考《程序员的自我修养》逐字节分析两个"程序"，一个是目标文件，一个是可执行文件。

1 目标文件分析

...]]></description><category></category></item><item><title><![CDATA[二叉树的遍历]]></title><link>https://blog.csdn.net/asd1147170607/article/details/117549982</link><guid>https://blog.csdn.net/asd1147170607/article/details/117549982</guid><author>asd1147170607</author><pubDate>Fri, 04 Jun 2021 10:14:36 +0800</pubDate><description><![CDATA[1 递归遍历
typedef struct _BiTNode
{
	int data;
	struct BiTNode* lchild;
	struct BiTNode* rchild;
} BiTNode, *BiTree;

//前序遍历 根左右
void preOrder(BiTree T)
{
	if(T == nullptr)
		return;
	cout &lt;&lt; T-&gt;data &lt;&lt; endl;
	preOrder(T-&gt;lchild);
	preOrder(]]></description><category></category></item><item><title><![CDATA[常见查找算法]]></title><link>https://blog.csdn.net/asd1147170607/article/details/117439057</link><guid>https://blog.csdn.net/asd1147170607/article/details/117439057</guid><author>asd1147170607</author><pubDate>Tue, 01 Jun 2021 15:28:36 +0800</pubDate><description><![CDATA[1 常见查找概念

查找指根据给定的某个值，在查找表中确定一个其关键字等于给定值的数据元素。
查找表是由同一类型的数据元素或记录构成的集合。
关键字是数据元素中某个数据项的值，又称为键值，主关键字可以唯一地标识一个记录，次关键字可以标识多个数据元素或记录。
静态查找表：只做查找操作的查找表，可用线性表结构来组织数据。
动态查找表：在查找的过程中同时插入查找表中不存在的数据元素，或者从查找表中删除已经存在的某个数据元素。可以用二叉排序树来组织数据。
从逻辑上来说，查找所基于的数据结构是集合，集合中的记录之间没]]></description><category></category></item><item><title><![CDATA[常见排序算法]]></title><link>https://blog.csdn.net/asd1147170607/article/details/117416560</link><guid>https://blog.csdn.net/asd1147170607/article/details/117416560</guid><author>asd1147170607</author><pubDate>Mon, 31 May 2021 17:18:48 +0800</pubDate><description><![CDATA[1 常见排序概念

排序稳定性：假设关键字ki = kj，且在排序前的序列中ri领先于rj，如果排序后ri仍领先于rj，则称所用的排序算法为稳定的。若有可能使排序后rj领先于ri，则排序算法是不稳定的。
内排序：在整个排序过程中，待排序的所有记录都被放置在内存中。
外排序：排序过程中由于排序的记录个数太多，不能同时放置在内存中，整个排序过程需要在内外存之间多次交换数据才能进行。
我们主要研究内排序，内排序排序算法性能受三方面影响
（1）时间性能。内排序主要进行两种操作，比较和移动。
（2）辅助空间。
（3）]]></description><category></category></item><item><title><![CDATA[C++中的类型转换]]></title><link>https://blog.csdn.net/asd1147170607/article/details/116994864</link><guid>https://blog.csdn.net/asd1147170607/article/details/116994864</guid><author>asd1147170607</author><pubDate>Tue, 18 May 2021 17:11:29 +0800</pubDate><description><![CDATA[c++除了能使用c语言的强制类型转换外，还新增了四种强制类型转换：static_cast、dynamic_cast、const_cast、reinterpret_cast，主要运用于继承关系类间的强制转化。
新式转换较旧式转换更受欢迎。原因有二，一是新式转型较易辨别，能简化“找出类型系统在哪个地方被破坏”的过程；二是各转型动作的目标愈窄化，编译器愈能诊断出错误的运用。
尽量少使用转型操作，尤其是dynamic_cast，耗时较高，会导致性能的下降，尽量使用其他方法替代。

static_cast

sta.]]></description><category></category></item><item><title><![CDATA[C++的RAII机制]]></title><link>https://blog.csdn.net/asd1147170607/article/details/116498457</link><guid>https://blog.csdn.net/asd1147170607/article/details/116498457</guid><author>asd1147170607</author><pubDate>Fri, 07 May 2021 21:50:52 +0800</pubDate><description><![CDATA[什么是RAII

RAII是Resource Acquisition Is Initialization的简称，是C++语言的一种管理资源、避免泄漏的惯用法。利用的就是C++构造的对象最终会被销毁的原则。RAII的做法是使用一个对象，在其构造时获取对应的资源，在对象生命期内控制对资源的访问，使之始终保持有效，最后在对象析构的时候，释放构造时获取的资源。
我们也可以使用STL中的shared_ptr来完成RAII的思想，参考下面例子。

为什么要使用RAII

在计算机系统中，资源是数量有限且对系统正常运行具]]></description><category></category></item><item><title><![CDATA[STL库算法概览]]></title><link>https://blog.csdn.net/asd1147170607/article/details/116482768</link><guid>https://blog.csdn.net/asd1147170607/article/details/116482768</guid><author>asd1147170607</author><pubDate>Fri, 07 May 2021 11:32:00 +0800</pubDate><description><![CDATA[1、 查找对象的算法

下面的STL算法都在头文件algorithm中，命名空间为std。
简单查找算法

find(beg, end, val)
find_if(beg, end, unaryPred)
find_if_not(beg, end, unaryPred)
count(beg, end, val)
count_if(beg, end, val)


查找重复值算法

adjacent_find(beg, end)
adjacent_find(beg, end, binaryPred)
sear]]></description><category></category></item><item><title><![CDATA[ANSI C标准中的预定义宏]]></title><link>https://blog.csdn.net/asd1147170607/article/details/115296702</link><guid>https://blog.csdn.net/asd1147170607/article/details/115296702</guid><author>asd1147170607</author><pubDate>Mon, 29 Mar 2021 11:13:29 +0800</pubDate><description><![CDATA[LINE：在源代码中插入当前源代码行号
FILE：在源文件中插入当前源文件名
FUNCTION：在源文件中插入当前函数名
DATE：在源文件中插入当前的编译日期
TIME：在源文件中插入当前编译时间
STDC：当要求程序严格遵循ANSI C标准时该标识被赋值为1
__cplusplus：当编写C++程序时该标识符被定义


...]]></description><category></category></item><item><title><![CDATA[在ZYNQ ARM平台上交叉调试qt程序]]></title><link>https://blog.csdn.net/asd1147170607/article/details/114283589</link><guid>https://blog.csdn.net/asd1147170607/article/details/114283589</guid><author>asd1147170607</author><pubDate>Tue, 02 Mar 2021 14:11:08 +0800</pubDate><description><![CDATA[环境说明： 交叉编译器为petalinux2018.3自带的arm-linux-gnueabihf-g++。QT库版本为5.9.1。


1   在虚拟机安装gdb-multiarch   sudo apt install gdb-multiarch


2   下载Qt5.9.1的源码，然后交叉编译该源码并安装到某文件夹下。


3   在Qt设置中添加新的Qt versions，如下图所示



4 在Compilers中添加petalinux自带的交叉编译器arm-linux-gnueabihf-..]]></description><category></category></item><item><title><![CDATA[c++在delete后要把指针赋值为nullptr]]></title><link>https://blog.csdn.net/asd1147170607/article/details/113701204</link><guid>https://blog.csdn.net/asd1147170607/article/details/113701204</guid><author>asd1147170607</author><pubDate>Fri, 05 Feb 2021 17:56:23 +0800</pubDate><description><![CDATA[在C++中我们new了一个对象后，返回的是这个对象的指针，如QObject* pObject = new QObject();
在使用完对象后，我们用delete删除这个对象，如delete pObject;
如果我们没有在delete后将pObject赋值为nullptr，其实指针pObject是会指向之前的那个地址的，只是这个地址处的对象已经被析构了。
所以如果我们用if(pObject)这样的条件来判断对象是否已被析构，其实是会有问题的。如果想要这样判断，我们可以在delete后将该指针赋值为nul.]]></description><category></category></item><item><title><![CDATA[qt多线程编程之使用moveToThread]]></title><link>https://blog.csdn.net/asd1147170607/article/details/113699039</link><guid>https://blog.csdn.net/asd1147170607/article/details/113699039</guid><author>asd1147170607</author><pubDate>Fri, 05 Feb 2021 16:48:07 +0800</pubDate><description><![CDATA[Qt有两种多线程的方法，其中一种是继承QThread的run函数，另外一种是把一个继承于QObject的类用moveToThread函数转移到一个QThread对象里。 Qt4.8之前都是使用继承QThread的run这种方法，但是Qt4.8之后，Qt官方建议使用第二种方法。
1）用原始的QThread的started信号触发自定义的slot启动线程，而不是派生QThread的类重载run函数启动线程。
将一个类派生自QObject，然后实现所有的signal/slot，然后通过调用movetothrea.]]></description><category></category></item><item><title><![CDATA[Qt用共享内存代替信号与槽机制]]></title><link>https://blog.csdn.net/asd1147170607/article/details/113100430</link><guid>https://blog.csdn.net/asd1147170607/article/details/113100430</guid><author>asd1147170607</author><pubDate>Sun, 24 Jan 2021 23:49:47 +0800</pubDate><description><![CDATA[信号与槽在使用时会涉及内存间的数据拷贝，如果emit时传递了大量的数据到槽函数，这样效率可能较低。
因此考虑只使用信号与槽的事件通知机制，不将数据emit出去，而将数据通过共享内存QSharedMemory在信号触发函数和槽函数间共享。


...]]></description><category></category></item><item><title><![CDATA[大小端与结构体释疑]]></title><link>https://blog.csdn.net/asd1147170607/article/details/113002627</link><guid>https://blog.csdn.net/asd1147170607/article/details/113002627</guid><author>asd1147170607</author><pubDate>Sat, 23 Jan 2021 00:26:41 +0800</pubDate><description><![CDATA[本人在做项目过程中需要在ARM对从FPGA读取到的数据进行处理，在实际过程中产生了一些问题，在思考了后记录在此。

1 大小端模式

大小端指数据在内存中的存储方式。小端指数据的高字节保存在内存的高地址处，低字节保存在内存的低地址处。大端模式则正好相反。ARM和x86的CPU一般情况下都为小端模式。
对于值unsigned int value = 0x12345678，在内存中的存储方式如下。





内存地址
小端模式存放内容
大端模式存放内容




0x00004000
0x78
0x12


0.]]></description><category></category></item><item><title><![CDATA[用petalinux工具制作linux系统启动映像]]></title><link>https://blog.csdn.net/asd1147170607/article/details/105600572</link><guid>https://blog.csdn.net/asd1147170607/article/details/105600572</guid><author>asd1147170607</author><pubDate>Thu, 21 Jan 2021 22:04:57 +0800</pubDate><description><![CDATA[1  SD_SD启动
在真正的工程应用中我们使用的都是QSPI_EMMC的启动方式，因为SD_SD这种启动方式需要SD卡与数字板一直保持连接，所有在恶劣使用场景下稳定性不好。在用QSPI_EMMC启动系统前我们需要先制作系统映像使系统通过SD_SD这种方式启动起来。下面介绍用petalinux制作系统映像的步骤。

SD_SD启动指的是FPGA配置文件及系统引导文件BOOT.BIN和系统镜像ima...]]></description><category></category></item><item><title><![CDATA[QString与char *的相互转换]]></title><link>https://blog.csdn.net/asd1147170607/article/details/108957173</link><guid>https://blog.csdn.net/asd1147170607/article/details/108957173</guid><author>asd1147170607</author><pubDate>Wed, 07 Oct 2020 23:16:22 +0800</pubDate><description><![CDATA[1. QString 转换为 char *
方法一

将 QString 转 char *，需要用到 QByteArray 类。
因为 char * 最后都有一个’\0’作为结束符，而采用 QString::toLatin1() 时会在字符串后面加上’\0’。

QString  str;
char*  ch;
QByteArray ba = str.toLatin1(); // must
ch=ba.data();


注意第3行，一定要加上，不可以 str.toLatin1().data() 这样一步完]]></description><category></category></item><item><title><![CDATA[在zynq上用xillybus实现PL与PS上的linux系统间的数据传输]]></title><link>https://blog.csdn.net/asd1147170607/article/details/108869927</link><guid>https://blog.csdn.net/asd1147170607/article/details/108869927</guid><author>asd1147170607</author><pubDate>Tue, 29 Sep 2020 22:00:44 +0800</pubDate><description><![CDATA[1  xillybus介绍

xillybus是由Xilinx的合作伙伴xillybus推出的用于在FPGA和主机间进行数据传输的解决方案。在FPGA端通过标准FIFO与用户逻辑相连接，在主机端（Window或Linux）安装了相应的驱动程序后，可以以读写设备的方式接收数据或发送数据。本文主要介绍Linux系统下的数据传输。


xillybus有三种数据传输的方案。第一是通过PCIE实现FPGA和外部PC主机间数据的传输。第二是通过转接ZYNQ的ACP、HP、GP接口实现FPGA和PS间数据的传输。第三是]]></description><category></category></item></channel></rss>