自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 资源 (6)
  • 收藏
  • 关注

原创 数据结构之栈、队列

若用有N个元素的数组表示队列,随着一系列进队和出队运算,队列的结点移向存放队列的数组的尾端,会出现数组的前端空着,而队列空间已用完的情况。一种可行的解决办法是当发生这样的情况时,把队列中的结点移到数组的前端,修改头指针和尾指针。可以用顺序存储线性表来表示队列,为了指明当前执行出队运算的队首位置,需要一个指针变量head(称为头指针),为了指明当前执行进队运算的队尾位置,也需要一个指针变量tail(称为尾指针)。列首结点,链表的末尾结点是队列的队尾结点,队尾结点的链接指针值为NULL.队列的头指针head。

2024-04-23 19:30:00 353

原创 数据结构之线性表

线性表是最简单、最常用的一种数据结构,它是由相同类型的结点组成的有限序列。一个由n个结点a0,a1,…,an–1组成的线性表可记为(a0,a1,…,an–1)。线性表的结点个数为线性表的长度,长度为0的线性表称为空表。对于非空线性表,a0是线性表的第一个结点,an–1是线性表的最后一个结点。线性表的结点构成一个序列,对序列中两相邻结点ai和ai+1,称ai是ai+1的前驱结点,ai+1是ai的后继结点。其中a0没有前驱结点,an–1没有后继结点。

2024-04-22 19:30:00 778

原创 LLVM实战之使用DragonEgg

DragonEgg是一个GCC插件,它使得GCC能够使用LLVM优化器和代码生成器来取代GCC自己的优化器和代码生成器。前提需要GCC 4.5及以上版本,目标机器为x86-32/x86-64以及ARM处理器。当然,也需要下载DragonEgg源码并构建dragonegg.so动态链接库文件。

2024-04-21 19:00:00 265

原创 LLVM实战之使用Go语言前端

llgo编译器是基于LLVM的仅用Go语言前端,用它可以把Go语言程序编译成LLVM汇编码。前提是需要下载llgo二进制文件或者通过源码来构建llgo,并且把它的路径添加到PATH环境变量中。

2024-04-19 08:45:00 200

原创 LLVM实战之C语言前端(Clang)

本文将展示Clang前端的不同用途。前提是安装Clang工具。

2024-04-17 08:30:00 235

原创 LLVM实战之执行LLVM bitcode

本文介绍如何执行之前得到的LLVM bitcode文件。前提是安装lli工具,用它来执行LLVM bitcode。

2024-04-15 19:02:45 126

原创 LLVM实战之将LLVM bitcode转回为LLVM汇编码

本文将介绍如何通过反汇编工具llvm-dis把LLVM bitcode转回为LLVM IR。前提是已经安装llvm-dis工具(在LLVM工具链中)。

2024-02-09 19:00:00 296

原创 LLVM实战之opt工具的使用

本文将介绍使用opt工具把IR转换成其他形式,以及对IR代码实施的多个优化。前提还是安装opt工具。

2024-02-08 18:00:00 428

原创 LLVM实战之LLVM bitcode转换成目标平台汇编码

本文将介绍如何将LLVM bitcode文件转换成目标机器的汇编码。当然,前提还是需要安装LLVM工具链的LLVM静态编译器llc。

2024-02-07 19:30:00 424

原创 LLVM实战之将.ll文件转换成bitcode文件

本文将介绍如何从LLVM 的.ll文件来生成bitcode。LLVM bitcode(也称为字节码——bytecode)由两部分组成:位流(bitstream,可类比字节流),以及将LLVM IR编码成位流的编码格式。同样,这一步骤的前提是安装llvm-as工具,并添加到PATH环境变量中。

2024-02-05 19:00:00 579

原创 LLVM实战之C源码编译

本文将展示使用Clang(C语言前端),把C语言源码转换成LLVM IR。当然首先需要安装Clang并且把它添加到PATH环境中。

2024-02-03 22:27:52 479

原创 LLVM实战之交叉编译

所谓交叉编译指的是能够在一个平台(例如x86)编译并构建二进制文件,而在另一个平台(例如ARM)运行。编译二进制文件的机器称为主机(host),而运行生成的二进制文件的平台称为目标平台(target)。为相同平台(主机与目标机器相同)编译代码称为本机编译(native assembler),而当主机与目标机器为不同平台时编译代码称为交叉编译(cross-compiler)。本文会讲述LLVM交叉编译的技术,可以为主机平台不同的平台编译LLVM,因此能够在所需要的特定目标平台使用构建的二进制文件。

2024-01-31 20:00:00 378

原创 LLVM实战之模块化设计

Pass之间耦合很小,而Pass之间的依赖信息由LLVM Pass管理器(Pass Manager)来统一管理,在Pass运行的时候会进行解析。它允许自定义选择各个Pass(遍)的执行顺序,也能够自定义选择哪些优化Pass——也就是说,有一些优化对目前的系统是没有帮助的,只有部分优化会针对目前系统。从结果中可以看出,运行deadargelim pass,对第一个函数没有任何影响,但优化对第2个函数有所影响——前一次优化中没有修改的部分代码在本次优化中被改变,无用的参数被消除了。(1)准备测试case。

2024-01-29 20:30:00 1582

原创 LLVM编译器的结构

前端通常执行以下任务:1)词法分析器(,简称Lexer从左到右逐行扫描源文件的字符,识别出各个单词并确定单词的类型,同时删除注释、空格等之类字符判断源字符串是否符合格式要求,然后把识别出的单词转化成统计的token形式。(2) 语法分析器从token序列中识别出各类短语,拼接成语法分析树,主要检查token组成的句子结构是不是符合语法结构。(3) 语义分析器。

2024-01-27 20:31:54 990

原创 LLVM的编译链工具

通常我们在命令行上调用的clang工具,是Clang驱动程序,因为LLVM本质上只是一个编译器框架,所以需要一个驱动程序把整个编译器的功能串起来,clang能够监控整个编译器的流程,即能够调用到Clang和LLVM的各种库,最终实现编译的功能。来指定输出是汇编文件还是目标文件,若生成是目标文件,llc会调用LLVM中的汇编输出的代码库来工作(注意这个汇编器和gcc的汇编器也不同,它输入的是MI,是一种后端的中间表示)。clang能够调用起来整个编译器的流程,也就是上边其他工具调用的库,它很多都同样会调用。

2024-01-19 19:00:00 928

原创 LLVM的项目结构

LIT测试本身位于test目录下的子目录中,对于lib的目录结构的遵循不是很严格。LLVM的每个功能都有明确的API定义,并放在自己的库中。如果有必要,还会套娃,例如:在llvm/lib目录中有Target目录,该目录包含特定于目标的更加底层的操作。这两个目录中,每个应用程序都有自己的子目录。值得注意的是,提供运行时库的项目将源代码放在src目录中,并使用lib目录作为库导出定义。如果需要额外的CMake模块或支持文件,可以将它们存储在cmake子目录中,而现成的模块则放在cmake/modules中。

2024-01-17 19:00:00 383

原创 LLVM代码内容

LLVM库包含所有LLVM顶层项目,可以分为以下几类:• LLVM核心库和附加内容• 编译器和工具• 运行时库LLVM是一个编译器框架。LLVM作为编译器框架,是需要各种功能模块支撑起来的。可以将clang和lld都看做是LLVM的组成部分。框架的意思是,你可以基于LLVM提供的功能开发自己的模块,并集成在LLVM系统上,增加它的功能,或者就单纯自己开发软件工具,而利用LLVM来支撑底层实现。

2024-01-14 19:00:00 888

原创 LLVM的安装步骤实战

讲述了如何在各种系统中安装LLVM编译器

2024-01-11 20:00:00 1353 1

原创 计算机基础知识——校验码概述

一种编码,如果所有可能的码字都是合法码字,如ASCII,当码字中的一位发生错误时,这个错误的码仍然在编码体系中,这样我们称这种编码的码距小,如果我们把编码体系变得稀疏一点,使得很多的信号值不在编码体系之内,这样,合法的码字如果出现错误,可能就变成了不合法的编码,这样的编码的码距就大。如果出现1位错误,则至少有一个方程不为0.海明码的特殊之处在于,只要将①②③3个方程左边计算数据按③②①排列,得到的二进制数值就是该数据中出错的位,例如第6位出错,则③②①为110等于二进制的6。值,提高了编码效率。

2024-01-06 19:00:00 1744

原创 计算机基础知识——数据的表示概述

将八进制数转换为二进制数,只要将每个八进制数转换为3位二进制数即可,将十六进制数转换为二进制数,只要将每个十六进制数转换为4位二进制数即可。定点数的小数点是隐含的,固定在某个位置。首先计算两个数的指数差,把指数小的向指数大的对齐,并将尾数右移指数差的位数,这样两个浮点数就完成了对阶的操作。10,即可以用到的数码个数为10,它们是0,1,2,3,4,5,6,7,8,9.二进制数的基数为2,可用的数码个数为2,它们是0和1。将二进制数转换为八进制数,只有将每3个二进制数转换为八进制数即可,将二进制数转换为十。

2024-01-05 22:24:13 905

原创 软件设计师考试的知识点

数组、顺序表与链表、队列与栈、字符串、二叉树的存储与特性、二叉树遍历、排序二叉树、最优二叉树、图的概念与存储、图的遍历、图的拓扑排序、二分查找、哈希查找、常见的排序算法、常见算法策略。数据的表示、CPU组成、CISC与RISC、流水线技术、层次化存储、I/O数据传输控制方式、可靠性分析、校验方法、计算机性能指标。各种程序语言的特点比较、编译与解释、编译器处理过程、错误管理、传值与传址、有限自动机、正规式、后缀表达式。OSI模型、TCP/IP协议族、子网划分、常用的网络命令、URL。Java语法+设计模式。

2024-01-04 22:40:57 412

原创 opencv笔记:高斯滤波和中值滤波对椒盐噪声的处理

椒盐噪声又叫冲击噪声(或者脉冲噪声)。在图像上表现为离散分布的纯白色或者黑色像素点,出现的位置通常是随机的,不连续的。由于在正常情况下,在图像中不太可能出现最大/最小值的灰度像素,因此这个样的像素点可以被当成噪声。椒盐噪声产生的原因可能是环境的干扰(如电磁干扰)、传感器(ADC)内部时序错误等。

2023-06-01 20:30:00 3159

原创 IIC总线协议的死锁问题

在实际使用过程中,I2C比较容易出现的一个问题就是死锁,本文介绍了I2C死锁产生的原因以及如何解决死锁问题。

2023-05-30 19:30:00 1629

原创 FreeRTOS的二值信号量和互斥量之间的区别和联系

FreeRTOS是一款广泛应用于嵌入式系统中的实时操作系统,其中信号量(Semaphore)是常见的用于多线程条件同步和资源保护的机制。FreeRTOS中的信号量分为二值信号量、计数型信号量、互斥信号量和递归互斥信号量。在实际应用中,选择正确的同步机制对于系统性能和稳定性至关重要。因此,我们需要详细了解FreeRTOS二值信号量和互斥锁

2023-05-28 20:00:00 1828 2

原创 常见通信名词的解释

在通信接口的介绍中,难免见到全双工/半双工/单工、同步/异步等这些名词。今天就专门来介绍一下这些名词。

2023-05-26 19:00:00 1389

原创 相机标定问题记录:多次标定的结果不同

相机标定是获取相机内参和外参的过程,在实际标定过程中可能会出现多次标定的结果不同的情况。

2023-05-23 20:15:00 577

原创 简单说明芯片的启动过程和程序执行过程

启动代码主要完成两方面的工作,一是初始化执行环境,例如中断向量表、堆栈、I/O等;二是初始化c库和用户应用程序。

2023-05-20 22:55:25 2709

原创 OpenCV总结之图像几何变换

整理一下opencv中常用的图像变换API

2023-03-20 22:17:53 685

原创 什么是相机标定

相机标定是指借助标定板来计算单个或多个相机的内参、外参和镜头畸变参数。

2023-02-12 15:50:33 3088

原创 python 自动化操作excel

出于近期处理数据比较多,重复的数据操作很繁琐且意义不大,打算使用python来处理这些事情,所以初步学习下python处理表格。

2022-12-24 16:44:51 574 2

原创 堆栈的定义和区别

在日常工作中,我们时常会说到堆栈。虽然堆栈总是一起说起,但是实际上这是两个不同的概念。

2022-11-12 14:59:11 837

原创 常用稳压电源---DCDC和LDO

LDO和DCDC是常用的两种电源稳压芯片,本文介绍了两种稳压器的原理和对比。

2022-10-30 22:00:00 2110

原创 图像处理经典算法--SIFT尺度不变特征转换

SIFT(Scale-invariant feature transform 尺度不变特征变换)是一种传统的图像提取算法

2022-10-28 23:09:19 1522

原创 嵌入式常见缩写记录

近期遇见太多缩写,老是记不住,所以记录一下。

2022-09-23 19:00:00 387

原创 Callback回调函数介绍(C语言)

最近在工作中经常用到回调函数callback,总结一下回调函数的定义和用法

2022-09-18 13:30:00 4353

原创 相机标定基本原理

本文将简单介绍相机标定的理论基础,为了后续实践打好基础。

2022-09-16 19:00:00 1784

原创 相机标定基础--相关坐标系

为了能够更好的描述和计算相机标定过程中图像上的像素点与空间三维点之间的关系,首先定义了四个坐标系:世界坐标系、相机坐标系、图像平面坐标系、像素坐标系

2022-09-12 19:00:00 2521 1

原创 蓝牙mesh基础(基本术语)

蓝牙(BLE)可以应用在智能手机、平板以及医疗健康、智能家居、可穿戴产品等领域。基于网络拓扑类型的无线通信系统可以覆盖更大的范围,使得通信距离变长。将蓝牙BLE和网络拓扑的系统结合的蓝牙mesh是近期热门的技术,所以本章将介绍一些蓝牙mesh的基本术语

2022-09-08 13:14:30 2530

原创 蓝牙mesh基础(基本概念)

mesh拥有多对多的网络拓扑类型。每台设备都可以与网络中的其他设备进行通信。设备之间的通信用蓝牙连接实现,一台设备可以将某一台设备发来的消息中继到另一台设备,这样就可以扩展端到端的通信范围,这个范围远超过一个单独设备蓝牙无线电所覆盖的范围。...

2022-08-30 19:00:00 4277

原创 BLE 蓝牙mash系统架构

将基于网络拓扑类型的无线通信系统和BLE蓝牙相结合,形成蓝牙mesh技术,本文介绍了蓝牙mesh的系统架构。

2022-08-24 11:17:30 760

双系统安装引导EasyBCD

在win7系统下用easyBCD软件建立引导,然后安装ubuntu的方法,这就不需要制作u盘启动盘那么麻烦,只需配置一些引导文件即可。

2018-12-04

VS2015调试vector的文件

最近使用vs2015调试C++程序,结果发现了一个很奇怪的问题:调试时无法查看stl里面string,vector,list等容器类的值了,将这个文件加入到所调试工程的资源文件里,就可以正常使用了

2018-11-14

opencv_contrib

因工作需要用到opencv进行图片特征提取识别等工作,因此配置了较新版本环境:VS2015+opencv3.3.0+对应版本扩展的opencv_contrib模块,并使用SiftFeatureDetector类。此资源为opencv_contrib模块3.3.0版本

2018-10-09

OpenCV三维重构代码

环境OpenCV3.3.0,标定双目相机,用OpenCV写的三维重构的代码,

2018-05-17

在win7+VS2015下的头文件unistd.hunistd.h

在win7+VS2015下头文件unistd.hunistd.h,头文件unistd.h是Linux/Unix的系统调用,包含了许多UNIX系统服务函数原型,如open、read、write、_exit、getpid等函数。必须把这个头文件加入到VS2015的头文件库里面。例如D:\Vs2015\VC\include

2018-03-22

ImageWarp图像扭曲

图象扭曲(Image Warping)是平面图形变化的一种,它可用于许多场合,如在以前介绍的火焰特效中加入扭曲效果,会使火焰更逼真(当然代码要有更高的的效率才行),如果在字幕当中加入扭曲效果,会给人一种怪异的感觉。

2017-12-29

空空如也

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

TA关注的人

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