自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(726)
  • 资源 (101)
  • 收藏
  • 关注

原创 嵌入式系统及应用-1.1嵌入式

嵌入式系统是以应用为中心,以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。定义:看不见的计算机,一般不能被用户编程,它有一些专用的I/O设备,对用户的接口是应用专用的。通常将嵌入式计算机系统简称为嵌入式系统。

2024-04-15 21:59:03 75

原创 通过共享内存方式发送、接受扫频信号

连接一个ursp设备,新建一个exe工程,配置为release x64,注意uhd.lib和uhd.dll版本不然会识别不了。代码下载位置:https://download.csdn.net/download/qq_36314864/89141261。代码下载:https://download.csdn.net/download/qq_36314864/89141239。代码下载:https://download.csdn.net/download/qq_36314864/89141246。

2024-04-15 16:32:42 8

原创 串口通信

打开两个XCOM V2.3,并按照上述虚拟串口进行配置,波特率要保持一致。比如COM3和COM6是连在一起的。打开串口,点击发送,收到正确即可。下载地址:https://download.csdn.net/download/qq_36314864/89139785。下载地址:https://download.csdn.net/download/qq_36314864/89139793。我写了一个动态库,有打开串口,读写串口,根据串口协议来的编写的一个demo,需要自己改一下配置。根据里面文档进行安装。

2024-04-15 11:34:42 10

原创 sdrangel使用说明

首先找一个usrp设备,我找到的是b205进行连接。打开生成的sdrangel.exe,第一次打开会出现空白界面。点击OK后,会响应一段时间,然后弹出两个窗口,一个可以设备相关参数,一个是频谱图,余晖图,瀑布图的显示。然后会弹出一个设备刷新窗口,选择你需要的设备。点击Add Rx Device按钮。

2024-04-03 14:53:06 35

原创 sdriq文件转换

https://github.com/Mehanik/sdriq2complex

2024-03-27 11:53:10 22

原创 sdrangel下载与部署for windows

然后在build下面新建bin文件,用vs打开sdrangel.sln,注意是release x64,点击ALL_BUILD进行编译。点击Add Entry,添加CMAKE_PREFIX_PATH为Qt安装路径。点击Add Entry,添加PKG_CONFIG_EXECUTABLE。点击Configure看有无报错,然后点击Generate。点击configure,只出现warning,没有报错了。点击Configure,继续修改报错的问题。如果报错,说明代码没下拉全,重新下拉代码。

2024-03-26 18:44:06 48

原创 cuda安装和下载for windows

英伟达cuda官方下载地址。直接一直点下一步即可。

2024-03-26 15:22:53 48

原创 ChatGPT提示词Prompts

在描述问题时,尽量提供尽可能多的信息,例如问题的具体情境、操作步骤、错误提示等。3)投喂示例:根据上个对话的规范,给ChatGPT投喂对应的优秀示例让它进一步学习规范。2)明确规范:告诉ChatGPT应该遵循哪一些既定的业务规则,以及需要按照什么样的规范和格式输出答案。:提出针对性强的问题,可以得到更有价值的答案。:使用简洁明了的语言有助于更好地理解你的问题,并且回答更加精准。不好的问题:你觉得你是否已经掌握了所有必要的技能?不好的问题:这个决策有多大的风险。不好的问题:我的衣服上有污渍,怎么办?

2024-03-13 15:06:59 1112

原创 物联网导论

物联网:是一个基于互联网、传统电信网等信息承载体,让所有能够被独立寻址的普通物理对象实现互联互通的网络。它具有普通对象设备化、自治终端互联化和普适服务智能化三个重要特征。按照规定的协议,将具有感知、通信、计算等功能的智能物体、系统、信息资源互联起来,实现对物理世界泛在感知、可靠传输、智慧处理的智能服务系统。

2024-03-09 13:05:54 295

原创 OpenCL编程快速入门

3.利用clGetDeviceInfo和clGetPlatform和clGetDeviceInfo获得硬件的参数信息。7.在host创建Buffer,利用MapBUffer将数据从内存映射出来。9.创建GPU显存,利用MapBuffer将数据从=显存中映射出来。5.创建context,绑定对应的device,platform。10.利用WriteBuffer,将host中的数据写入显存。2.根据不同的platform获得不同的device。8.对内存上的数据进行初始化。12.释放opencl资源。

2023-12-26 15:22:23 170

原创 对上一段buffer的保存的应用

队列queue固定大小的使用,通过deque来保存上一段buffer。

2023-11-30 11:54:34 106

原创 window下系统环境变量修改

【代码】window下系统环境变量修改。

2023-11-15 15:50:48 252

原创 std::string与LPCTSTR/LPWSTR互转

【代码】std::string与LPCTSTR/LPWSTR互转。

2023-11-15 15:50:20 316

原创 获取当前程序运行路径

【代码】获取当前程序运行路径。

2023-11-15 15:48:07 129

原创 OpenCL编程指南-11.1OpenCL嵌入式简档

OpenCL规范定义了两个简档:一个是面向桌面设备的简档(完全简档),另一个是面向手持设备和嵌入式设备的简档(嵌入式简档)。手持和嵌入式设备在屏幕大小和电源方面存在很大限制,需要对完全简档中定义的需求有所放宽。嵌入式简档的着眼点是完全简档所需的OpenCL 1.1规范的一个严格子集。嵌入式简档作为完全简档的一个严格子集,有以下好处:1)可以为两个简档提供一个规范,而不需要单独的规范。2)为嵌入式简档编写的OpenCL程序可以在实现完全简档的设备上运行。

2023-09-15 16:32:50 193

原创 雷达重要概念

雷达,是英文Radar的音译,源于radio detection and ranging的缩写,意思为“无线电探测和测距”,即用无线电的方法发现目标并测定它们的空间位置。因此,雷达也被称为“无线电定位”。雷达是利用电磁波探测目标的电子设备。雷达发射电磁波对目标进行照射并接收其回波,由此获得目标至电磁波发射点的距离、距离变化率(径向速度)、方位、高度等信息。雷达是利用电磁波探测目标的电子设备。

2023-09-08 15:39:09 610

原创 OpenCL编程指南-10.2使用C++包装器API的矢量相加示例

乍一看可能会让你有些害怕,因为这里使用了一种称为特征类(traits)的C++模板技术(这里用于关联clGetXXInfo()提供的共享功能),不过,由于使用这些getInfo()函数的程序在实际中从来不需要引用特征类组件,所以对于开发人员编写的代码没有任何影响。这些缓冲区对象使用cl::Buffer()创建。对于局部工作大小,使用cl::Range()对象的一个特殊实例cl::NullRange,顾名思义,它对应于C API中传递NULL,允许运行时为设备确定最佳的工作组大小和请求的全局工作大小。

2023-09-07 16:11:57 381

原创 OpenCL编程指南-10.1C++包装器API

C++API划分为多个类,分别映射到一个OpenCL C类型,例如,cl::Memory类就映射到OpenCL C中的cl_mem。不过,C++ API会尽可能使用继承提供额外的一层类型抽象;例如,类cl::Buffer派生自基类cl::Memory,表示所有可能的OpenCL内存对象的1维内存子类。类层次体系结构见图12-1。一般地,C++类类型到底层OpenCL C类型有直接的映射,在这种情况下,底层C类型可以通过操作符()访问。//not safe。

2023-09-07 11:39:34 255

原创 OpenCL编程指南-9.3使用事件完成评测、内核中的事件、OpenCL外部的事件

所以我们完成一个异步复制,将B的一列从全局内存复制到局部内存(使得所有工作项都能使用相同的列),之后再将A的一行复制到私有内存(这里,计算乘积矩阵C的各个元素时工作项可以反复使用这一行)。换句话说,连接OpenCL和OpenGL的命令定义为:在最常见的需要同步的情况下,这些命令会自动执行。要实现这个方法,将A的行与B的列相乘的for循环必须等待,直到异步复制完成。因此,在理想情况下,任何对象如果能够表示为队列中的命令,就应当提供一个事件接口。评测将事件转换为一个包含计时数据的不透明的对象。

2023-09-06 18:29:30 102

原创 C++ map clear内存泄漏问题

STL容器调用clear()方法,通常只是使得容器内部的对象通通析构,但容器本身的内存无法得到释放。即篮子里面东西拿走了,篮子占的空间还在,这样是为了方便下次存放新的对象时,不需要再次申请空间。map自带的clear()函数会清空map里存储的所有内容,但如果map值存储的是指针,则里面的值不会被清空,会造成内存泄漏,所以值为指针的map必须用迭代器清空。若需要多次使用同一个map,其中每次使用后都clear清空,多次之后,可能出现内存泄露,这是因为map的空间便没有释放,所以得使用swap清空。

2023-09-06 15:55:26 1934

原创 Win10远程桌面连接黑屏

查找本地计算机 >> 计算机配置 >> 管理模版 >> Windows组件 >> 远程桌面服务 >> 远程桌面会话主机 >> 远程会话环境 >> 为远程桌面连接使用WDDM图形显示驱动程序,并将其值设置为禁用。按键盘Win+R打开运行,输入命令gpedit.msc打开本地组策略编辑器。使用远程桌面连接报下面这个错误时候。重启windows操作系统。

2023-09-05 18:06:41 614

原创 OpenCL编程指南-9.2事件对象、宿主机上生成事件、影响宿主机上执行的事件

不过,事件不能跨上下文。跨上下文边界时,只有一种选择,就是让宿主机程序等待一个上下文的事件,然后使用用户事件来触发另一个上下文中命令的执行。换句话说,如果为一个事件注册了多个回调,那么一旦这个事件将其状态切换为CL_COMPLETE,所注册的回调函数可能会按任意的顺序执行。也就是说,即使这个函数确定由事件标记的一个命令已经执行完毕(即CL_EVENT_COMMAND_EXECUTION_STATUS返回CL_COMPLETE),也不能保证与该事件关联的命令所修改的内存对象对于队列中的其他命令可见。

2023-08-29 18:56:34 114

原创 Boost开发指南-4.13小结

operators库很强大易用,但保证操作符具有正确的语义还是程序员自己的责任,操作符的重载应该与它原来的含义基本一致——至少不能违背大多数人的常识。变量值的交换是一个看似简单实则复杂的操作,它被用来处理异常安全性和类的自我赋值,如果想要自己的类安全高效,那么应该提供一个好的swap函数,它是很多实用功能的基础,Boost 库中几乎所有的类都有swap()成员函数就清楚地说明了这一点。操作符重载简化了代码的编写,提供了清晰易懂的语法,但实现操作符重载是件烦琐的工作。

2023-08-29 11:37:52 69

原创 Boost开发指南-4.12utility

除了最基本最通用的 BOOST_BINARY宏之外,本组件还包含形如 BOOST_BINARY_XX的宏,其中的xx是标准的整数扩展,如 u(unsigned int)、UL(unsigned long)等,用以支持需要特定整数类型的地方。GCC编译器在C89的__FILE__和__LINE__之外定义了一些扩展宏,其中的__PRETTY_FUNCTION__宏可以表示函数名称,VC、intel C等编译器也定义有类似的宏,而C99标准则定义了__func__宏以实现同样的功能。

2023-08-29 11:28:33 96

原创 Boost开发指南-4.11config

BOOST_STRINGIZE是一个宏,这一点很重要,意味着它仅能用于编译期(准确地说是编译前预处理时),不支持运行时转换。代码的前两条语句运用了BOOST_STRINGIZE,把编译期的整数转换成了字符串,而第三个 BOOST_STRINGIZE因无法处理运行时的整数变量,只能把它转换成字面意义的字符串。一般来说,config库不应该被库用户使用,不过在这个库里,我们也可以找到几个有用的小工具(其实在第1章我们就已经用到了config库里的BOOST_PLATFORM等宏)。

2023-08-29 11:11:00 88

原创 Boost开发指南-4.10uuid

class uuidpublic://长度,返回16//内部实现在以上列出的成员函数之外,uuid还全面支持比较操作和流输入/输出。两个uuid 值的比较是基于字典序的,通常的比较操作使用的是memcmp,但针对x86做了特殊的优化以加快速度。uuid的名字生成器使用了SHA1摘要算法,这是一个很重要的密码学算法,可以将任意长度的文本压缩成一个只有20字节(160位)的独一无二的摘要,被广泛地应用于防篡改、身份鉴定等安全认证领域。

2023-08-28 18:35:06 237

原创 Boost开发指南-4.9exception

exception库提供两个类:exception和error_info,它们是exception库的基础。protected:private :exception类几乎没有公开的成员函数(但有大量用于内部实现的私有函数和变量),被保护的构造函数表明了它的设计意图:它是一个抽象类,除了它的子类,任何人都不能创建或者销毁它,这保证了exception不会被误用。exception的重要能力在于其友元操作符

2023-08-25 17:14:58 164

原创 Boost开发指南-4.8operators

明白了less_than_comparable 的继承用法,剩下的就很简单了:point类定义了一个友元operator、=就由less_than_comparable自动生成。由于C++可重载的操作符非常多,因此 operators库是由多个类组成的,分别用来实现不同的运算概念,比如 less_than_comparable定义了

2023-08-22 18:42:30 114

原创 Boost开发指南-4.7tribool

public://缺省构造函数//bool值构造函数//初始化为不确定值//bool转型//判断是否是不确定状态... //其他逻辑运算符和比较运算符重载tribool 类很简单,它内部实现了三态 bool值的表示,除了构造函数没有什么其他成员函数。可以在创建tribool对象的同时传入三态bool值对它进行初始化,如果使用无参的缺省构造函数,那么tribool默认值是false。对tribool的操作都是通过逻辑运算符和比较运算符的重载来完成的,支持的逻辑运算包括||、&&和!

2023-08-17 13:30:31 90

原创 剑指offer-2.2字符串

我们还是以前面的字符串"We are happy."为例,"We are happy."这个字符串的长度是14(包括结尾符号"0’),里面有两个空格,因此替换之后字符串的长度是18。在面试的过程中,我们也可以和前面的分析一样画一两个示意图解释自己的思路,这样既能帮助我们理清思路,也能使我们和面试官的交流变得更加高效。最直观的做法是从头到尾扫描字符串,每一次碰到空格字符的时候做替换。1)输入的字符串中包含空格(空格位于字符串的最前面,空格位于字符串的最后面,空格位于字符串的中间,字符串中有连续多个空格)。

2023-08-16 18:44:00 65

原创 Boost开发指南-4.6singleton

public:singleton把模板参数T实现为一个单件类,对类型T的要求是有缺省构造函数,而且在构造和析构时不能抛出异常,因为单件在main()前后构造和析构,如果发生异常则会无法捕获。singleton提供两个静态成员函数访问单件实例,可分别获得常对象和可变对象。这种区分是出于线程安全的考虑,常对象单件总是线程安全的,因为它不会改变内部状态,而可变对象单件则不是线程安全的,可能会发生线程竞争问题。

2023-08-16 16:39:25 85

原创 剑指offer-2.1数组

当数据的数目超过数组的容量时,我们再重新分配一块更大的空间(STL的 vector每次扩充容量时,新的容量都是前一次的两倍),把之前的数据复制到新的数组中,再把之前的内存释放,这样就能减少内存的浪费。也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。2)二维数组中没有查找的数字(查找的数字大于数组中的最大值,查找的数字小于数组中的最小值,查找的数字在数组的最大值和最小值之间但数组中没有这个数字)。

2023-08-15 18:31:22 123

原创 Boost开发指南-4.5swap

boost::swap查找有无针对类型T的std::swap()的特化或者通过ADL查找模板特化的 swap(),如果有则调用,如果两种查找都失败时则退化为std::swap()。这段代码的运行结果与之前的特化std::swap有明显不同,std::swap使用了标准的交换操作,而 boost::swap通过ADL 规则找到了全局名字空间的特化交换函数,实现了高效的交换。由于我们在名字空间特化了std::swap,因此,boost::swap与std::swap的效果相同,都使用了特化后的swap函数。

2023-08-15 11:42:07 129

原创 Boost开发指南-4.4assign

使用list_of()处理map容器不是很方便,于是map_list_of()/pair_list_of()应运而生,map_list_of()可以接受两个参数,然后自动构造std::pair对象插入map 容器,pair_list_of()则纯粹是map_list_of的同义词,两者的用法功能完全相同。list_of()函数可以全部使用括号操作符,也可以把括号与逗号结合起来,但使用后者时需要将整个list_of表达式用括号括起来,否则会使编译器无法推导出list_of的类型而无法赋值。

2023-08-14 18:58:01 567

原创 剑指offer-1.1C++

空类型的实例中不包含任何信息,本来求sizeof应该是0,但是当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则无法使用这些实例。调用构造函数和析构函数只需要知道函数的地址即可,而这些函数的地址只与类型相关,而与类型的实例无关,编译器也不会因为这两个函数而在实例内添加任何额外的信息。和传入的参数是同一个实例时,那么-一旦释放了自身的内存,传入的参数的内存也同时被释放了,因此再也找不到需要赋值的内容了。1)是否把返回值的类型声明为该类型的引用,并在函数结束前返回实例自身的引用(即。

2023-08-11 10:27:42 110

原创 Boost开发指南-4.3optional

/定义类型none_t//定义类型none_t none_t const none =(static_cast < none_t >(0));//定义常量none(0));//定义常量noneboost::none有些类似C++11标准里的空指针nullptr,表示未初始化,它的none_t类型实际上是一个成员变量指针,“指向”并不存在的detail::none_helper的int成员。

2023-08-10 18:58:21 167

原创 3.3用于共享数据保护的替代工具

因此,这是肯定需要避免的。C++标准委员会也发现这是一个重要的场景,所以C++标准库提供了std::once_flag和 std::call_once 来处理这种情况。与其锁定互斥元并且显式地检查指针,还不如每个线程都可以使用std::call_once,到 std::call_once返回时,指针将会被某个线程初始化(以完全同步的方式),这样就安全了。

2023-08-10 11:26:01 85

原创 3.2用互斥元保护共享数据

于是,你有一个类似于上一节中链表那样的共享数据结构,你想要保护它免于竞争条件以及可能因此产生的不变量损坏。如果你可以将所有访问该数据结构的代码块标记为互斥的(mutually exclusive),岂不是很好?如果任何线程运行了其中之一,所有其他试图访问此数据结构的线程就必须一直等到第一个线程完成。这就使得线程不可能看到损坏的不变量,除非它是进行修改的线程。嗯,这并非无稽之谈——它正是使用称为互斥元(mutex, mutual exclusion)的同步原语所能得到的。在访问共享数据结构之前,锁定。

2023-08-09 19:24:29 125

原创 3.1线程之间共享数据的问题

有问题的竞争条件通常发生在完成操作需要修改两个或多个不同的数据块的地方,就如示例中的两个链表指针。因为该操作必须访问两块独立的数据,这必须在单独的指令中进行修改,而当只有其中一条指令完成时,另一个线程有可能访问此数据结构。竞争条件往往很难找到且难以复制,因为机遇的窗口很小。如果这些修改作为连续的CPU指令来完成,在任意一次运行中显现问题的机会是非常小的,即使数据结构正被另一个线程并发访问。随着系统上负载的升高,以及执行该操作次数的增加,有问题的执行序列出现的机会也增加。

2023-08-09 11:48:53 154

原创 OpenCL编程指南-9.1命令、队列、事件

命令队列是OpenCL的核心。平台定义了一个上下文,其中包含一个或多个计算设备。每个计算设备可以有一个或多个命令队列。提交到这些队列的命令将完成OpenCL程序的具体工作。在一个简单的OpenCL程序中,提交到一个命令队列的命令会按顺序执行。一个命令完成后,下一个命令才能开始,程序会展开为一个有严格顺序的命令序列。各个命令存在大量并发性时,这种有序方法能够提供应用程序所需要的性能。不过,实际的应用程序通常并没有这么简单。大多数情况下,应用程序不需要严格有序地执行命令。

2023-08-04 18:09:59 269

usrp扫频信号实时频谱分析

usrp扫频信号实时频谱分析

2024-04-15

usrp设备通过共享内存方式接受扫频信号

usrp设备通过共享内存方式接受扫频信号

2024-04-15

扫频信号生成usrp设备

扫频信号生成usrp设备

2024-04-15

串口通信-asio实现

串口通信-asio实现

2024-04-15

虚拟串口驱动virtual

虚拟串口驱动virtual

2024-04-15

串口调试助手xcom v2.3

串口调试助手xcom v2.3

2024-04-15

sdrangel缺失少的包

sdrangel缺失少的包

2024-04-03

VulkanSDK-1.3.275.0-Installer

VulkanSDK-1.3.275.0-Installer

2024-03-26

FreeImage库下载

FreeImage库下载

2023-08-01

boost编程指南-1.3date-time

boost编程指南-1.3date-time

2023-07-14

dpdk-helloworld for windows

dpdk-helloworld for windows

2023-05-10

opencl环境测试工具

opencl环境测试工具

2023-05-05

opencl for sdk 集显intel

opencl for sdk 集显intel

2023-05-05

dpdk下uhd.conf

dpdk下uhd.conf

2023-04-27

uhd常用镜像包UHD/share/uhd/images

uhd常用镜像包UHD/share/uhd/images

2023-04-24

Git-2.37.2.2-64-bit

Git-2.37.2.2-64-bit

2023-04-23

Cygwin-setup-x86-64

Cygwin-setup-x86-64

2023-04-23

nsis-3.08-setup

nsis-3.08-setup

2023-04-23

doxygen-1.9.2-setup

doxygen-1.9.2-setup

2023-04-23

curses-2.2.1+utf8-cp311-cp311-win-amd64.whl

curses-2.2.1+utf8-cp311-cp311-win-amd64.whl

2023-04-23

libusb-1.0.24

libusb-1.0.24

2023-04-23

boost-1-78-0-msvc-14.2-64

boost-1-78-0-msvc-14.2-64

2023-04-23

cmake-3.25.3-windows-x86-64

cmake-3.25.3-windows-x86-64

2023-04-23

virt2phys内核驱动安装与下载

virt2phys内核驱动安装与下载

2023-04-21

MLX5网卡驱动下载安装

MLX5网卡驱动下载安装

2023-04-21

dpdk静态库编译lib-dpdk.lib

dpdk静态库编译lib-dpdk.lib

2023-04-21

WinSCP下载和安装

WinSCP下载和安装

2023-04-17

Xshell6下载和安装

Xshell6下载和安装

2023-04-17

9.5 【实例】用户模式下侦测Win32 API的例子

09APISpyApp

2022-10-10

9.5 【实例】用户模式下侦测Win32 API的例子

09APISpyLib

2022-10-10

9.4 其他常用的侦测方法

9.4.3 通过覆盖代码挂钩API

2022-10-10

9.4 其他常用的侦测方法

9.4.2 使用远程线程注入DLL

2022-10-10

9.3 挂钩API技术(HOOK API)

9.3.5 HOOK实例——进程保护

2022-10-09

9.3 挂钩API技术(HOOK API)

9.3.4 封装CAPIHook类

2022-10-09

9.3 挂钩API技术(HOOK API)

9.3 挂钩API技术(HOOK API)

2022-09-29

9.3 挂钩API技术(HOOK API)

9.3 挂钩API技术(HOOK API)

2022-09-29

9.2 Windows钩子

9.2 Windows钩子

2022-09-27

9.2 Windows钩子

9.2 Windows钩子

2022-09-27

9.1 动态链接库-dll

9.1 动态链接库

2022-09-26

9.1 动态链接库-dll

9.1 动态链接库

2022-09-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除