自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 资源 (2)
  • 收藏
  • 关注

原创 linux shell函数返回值问题

在linux shell脚本中使用函数时,需要注意函数返回后,返回值的使用,不然很容易出问题。具体来说,shell脚本函数通过return返回后,返回值会保存在$?中。需要注意的是,$?会在函数返回后很快变回0值,所以应在函数返回后尽快将$?保存在变量中,然后后续通过该变量来访问返回值,而不是直接通过$?来进行后续处理。如下代码,尽管D2确实是个目录,但是得到的结果始终会是$A是一个REG文件,这是因为函数testFile返回后做了些其他的事,在后续进行$?值判断时,它已变回了0.#! /bin/bas

2022-05-08 22:04:20 1515

原创 linux c文件 stat()和lstat()的区别

书上的说法是:lstat与stat相同,除非是符号链接,统计链接本身,而不是链接所引用文件。所以,stat和lstat的区别是:stat遵循链接,但lstat不是当初看这段话并没有真正理解,下面详细解释下:首先,无论是stat还是lstat,对于硬链接文件,都将其视为regular文件,不同点只在于符号链接(symlink)文件。对于stat(file, &mystat)这个系统调用,无论是读取regular文件还是symlink文件,通过mystat.st_mode获取到的文件类型都必

2022-04-30 10:12:57 1786

原创 linux c 遍历目录下文件

以下截取自我自己写的mycp程序,用来实现linux cp命令的部分功能:主要系统调用有:opendir(), readdir(), 最后通过dtp->d_name获取目录下每一个文件(目录也是文件)的名称。需要注意的是,目录下的文件还额外包括.和..,分别表示当前目录和子目录,这也是任何一个目录的link数必然大于等于2的原因。为了防止循环访问自己,在遍历文件时需把这两个剔除掉,见下面代码8-10行。另外,对于目录问题,如果输入的是相对路径,最好在程序里通过getcwd()和strcat()等

2022-04-30 09:32:52 1229

原创 广域网上网络通信相关的问题

引言我们在学习网络编程时,大多数练习都是自发自收或者在局域网内通过子网ip也就是私有ip地址进行通信的,这样肯定是没有问题的。如果我们希望把自己的电脑作为服务器,让外网(因特网)的客户端主动访问我们的服务器,就没那么简单了。为什么外网主动访问我们自己的电脑很困难?因为我们处在子网中,子网对外网是不可见的,被路由器隔离。网络运营商,比如移动,他拥有一个公网IP ,然后我们所在的小区统一办了宽带,小区就接入了他的子网,最后我通过小区办了宽带,我家就接入小区的子网,然后我家用了路由器,每台电脑、手机都接了路

2021-11-17 14:36:12 574

原创 对指针的一些理解(杂乱汇总)

1.指针不光有指向的地址,自身也有地址,如:int a=1;int* p=&a;printf("p的地址:%d\n",&p);在VS上运行这段代码,打印的值为一个32位的地址,此地址是OS分配给指针p的地址。用16进制输出此地址(%x),看着会更习惯些。指针在内存中有自己的地址,这块地址里装着的值就是所谓的“指针指向的内容”,而通过语法*p则可以访问以这个值为地址的内容,即地址为这个值的内存里装着的值。我们要能够区分如下3个语法,想想看自己是否想清楚了://定义int a=

2021-05-31 17:17:21 130

原创 C++中链表的引用问题

最近写数据结构的相关算法,遇到了函数形参是链表,要不要加引用的问题。源码如下://链表的定义typedef struct LNode { ElemType data; struct LNode* next;}LNode, *LinkList;//算法函数体void algorithm_2_23(LinkList &A, LinkList &B, LinkList &C) { LNode* PA = A, * QA = A->next, * PB = B

2021-05-26 22:21:05 2354 1

原创 V4L2应用层分析

V4L2,即Video for Linux 2,是第二代为Linux打造的音频、视频驱动。相比第一代V4L,V4L2支持更多的设备,同时更加稳定。现今的视频设备,如USB摄像头,基本都支持V4L2,故现今无需再学习第一代的V4L。首先要说明的是,V4L2是一个驱动,而不是链接库,故不要想着找什么动态、静态链接库文件(.so文件和.a文件)。驱动是存在于内核层的代码,用于管理底层硬件。应用层无法直接使用驱动中的变量和函数,只能通过一系列标准调用接口来使用驱动(实现原理为函数指针),常用的接口函数有open、

2020-11-18 22:07:18 1172

原创 对卷积的理解

卷积是一个数学工具,在不同的学科领域中有不同的使用方法,也就具有不同的物理含义。总的来说,两个变量的卷积代表所有的这两个变量的乘积的和(积分)对当前卷积结果的影响。结合常用的使用场景,往往是所有变量按照一定贡献比例共同对当前结果的影响。下面结合具体的学科领域进行理解:电子信号领域:两个变量分别为输入和系统本身,系统输出=输入与系统的卷积,物理意义为:当前时刻系统输出等于以前所有时刻输入经过系统后产生的输出的和。其中,每一个时刻的输出在数学上等于输入与系统的乘积,即该时刻输入经过系统后产生的输出。另外,

2020-11-06 16:40:27 1199

原创 Visual Studio项目属性配置

此处的“项目属性”指的是菜单栏中“项目”下拉列表中的最后一个选项呈现的内容,界面如下图所示。首先要说明的是,配置项目属性不仅仅只有从菜单栏中选择这一种方法,还可以在“属性管理器”中进行配置,后者的优势在于:一个常用的、完整的属性配置可以方便的应用到新建的项目中,而不需要每次新建项目都要重新配置属性。由于二者的配置界面相同,故本文主要介绍后者的配置过程。属性管理器通过菜单栏视图->其他窗口->属性管理器调出属性管理器的窗口,窗口界面如下图所示。由于Visual Studio每一个目标平

2020-11-05 20:57:47 20027 2

原创 linux安装驱动模块时提示 loading out-of-tree module taints kernel

在刚开始学习linux设备驱动时,我们写驱动文件时可能并不会把他们加入到Kconfig的树中,而是直接编译产生.ko文件后,在开发板上运行insmod xxx.ko,此时虽然安装模块成功了,但是会提示loading out-of-tree module taints kernel。英文的意思是:加载的树外模块污染了内核。从这段描述可以猜到,这是我们没有把此驱动模块加入到Kconfig树导致的,即make menuconfig的配置选项中没有此驱动。此时这个驱动模块仍能正确加载和使用。如果我们只是学习怎么写

2020-09-16 14:19:19 9865

原创 向Linux Kconfig树中添加驱动配置信息

这里使用“Kconfig树”这个词是因为我不知道准确的说法应该是怎样的,我想表达的意思是:make menuconfig的菜单中能够显示我们自己写的驱动信息,我们可以通过make menuconfig来决定是否使用该驱动,这样也让内核知道我们驱动的存在,而不是让我们写的驱动成为一个野生的程序以致污染内核。接下来讲怎么向Linux Kconfig树中添加驱动配置信息。主要涉及的文件就三个,第一个是你写的驱动源文件(xxx.c),第二个是Kconfig文件,第三个是Makefile文件。1、驱动源文件驱动

2020-09-16 14:15:54 3489

原创 ubuntu20.04.1 64位搭建嵌入式linux开发环境

目录背景开发环境的搭建1.交叉编译工具的安装2.开发工具和依赖库的安装2.1. 必需部分2.2.可选部分ubuntu20.04.1 64位配置和编译Linux3.0内核背景市面上的嵌入式linux开发板厂商提供给客户的开发环境往往是低版本的ubuntu,因为他们没有精力去测试每个版本的ubuntu,一旦某个版本调通了,这个版本就用一直用下去,不会换新的,这主要是考虑到人力成本。理论上,高版本的ubuntu也是可以搭建好嵌入式linux开发环境的,只不过相比低版本的ubuntu,可能会做更多一些的工作,

2020-08-14 14:36:21 2656

原创 使用IDE(vs code)进行嵌入式linux驱动开发

目录背景系统版本vs code的安装和使用安装新建工程搭建交叉开发环境并编译内核设置vs code工程的头文件查找路径编辑驱动文件和Makefile背景早期的ubuntu版本上没有好的可用的IDE,那个时候嵌入式linux驱动开发人员多使用vim进行编码;对于没有图像界面的linux服务器,开发人员更是只能选择vim这一编辑工具。但是,接触过IDE的人会意识到vim的不方便:需要记一些指令,而且没有代码自动补全,没有代码提示,没有括号自动补全,没有回车后自动缩进等等。后来ubuntu上有了gedit这

2020-08-13 19:13:03 9044 1

原创 在windows下解压压缩文件时出现文件名重名的问题

之前我从百度网盘上下下来了一些arm linux开发板的资料,其中有一些tar.gz文件,这种文件一般都是在linux下用tar命令打包压缩得到的。windows上的用于解压的软件,比如rar,360压缩等都是可以打开和解压这种格式的压缩文件的,但是极有可能出问题:出现同名文件,询问你是否需要替换,如下图所示。出现这种状况的原因是linux的文件系统在命名时是区分大小写的,而windows的文件系统在命名时并不区分大小写。不信的话,你可以做个实验,在windows上新建一个名为aa的文件夹,然后再新建

2020-08-13 15:19:34 9160

原创 (失败)尝试将eCOS移植到stm32h743vi上

目录背景过程感受背景我的学长在一家有名的AI公司上班,他们希望能将OpenCV移植到一款低成本的CPU上,但他们对于硬件完全不懂,于是学长希望我尝试一下(虽然我那时也还不懂操作系统和CPU间的关系)。选择stm32h743vi这个型号的单片机首先当然是因为他与arm contex-a内核的CPU相比很便宜啦,其次他有DMA2D控制器,说是“专用于图像处理的专业 DMA”,然后片上ROM和RAM都还比较大,就选它了。后来看手册的时候,才发现这个所谓的DMA2D仅仅只能实现对图像的像素点进行修改值操作,并没

2020-07-24 19:30:14 520

原创 如何将SD卡/U盘/TF卡的未写入数据段的值全设为0

目录背景解决方案扩展思考背景一般来说,我们使用操作系统创建新的txt文件时,操作系统会根据我们写入的数据量自动为文件分配存储空间,这样不会造成开辟的存储空间的浪费。但是,有时候我们会使用一些冷门的嵌入式设备(这里就不点名了),他们创建新文件时就是简单粗暴地为文件分配固定大小的存储空间,如果我们没有写完这些空间,就会造成空间的浪费。更严重的是,如果那些没有写入的空间的数据段的值不是我们想要的,会直接影响到我们产品的功能。我的情况如下:我需要往txt文件中不停地写入传感器得到的值,写值结束后,我希望所有未

2020-07-13 18:39:45 761

原创 关于STM32 通用定时器初始化参数的理解

定时器初始化结构体定义为typedef struct{ uint16_t TIM_Prescaler; uint16_t TIM_CounterMode; uint16_t TIM_Period; uint16_t TIM_ClockDivision; ...

2019-05-10 22:08:23 4545

转载 内核工具-Sparse简介

原文地址Sparse 介绍Sparse 诞生于 2004 年, 是由linux之父开发的, 目的就是提供一个静态检查代码的工具, 从而减少linux内核的隐患.其实在Sparse之前, 已经有了一个不错的代码静态检查工具(“SWAT”), 只不过这个工具不是免费软件, 使用上有一些限制.所以 linus 还是自己开发了一个静态检查工具.具体可以参考这篇文章(2004年的文章了): F...

2018-12-22 10:06:26 318

转载 如何使用pspice制作任意波形的信号源

在网上看到了一篇解决了问题的文章,这里按照我的思路重新理一下。原文地址总的思路是:新建一个分段线性信号源,保存为.stl文件,然后通过文本文档打开它,把文件最后面的一个个坐标点替换成你自己信号源的坐标点。之后,这个文件对应的模型就是你要的信号源模型。具体步骤:打开软件orCAD capture,在菜单栏中点击place->part,点击弹出的窗口的图标添加库文件sourcstm.ol...

2018-10-08 14:02:07 8445

原创 STM32 I/O口不能正常输出高低电平问题的解决方案

I/O口不能正常输出一般都是端口被复用了造成的,除了检查程序中是否有把端口复用的程序外,还应注意:有些端口在单片机上电时默认就是复用的,如与JTAG相关的PA13,PA14,PA15,PB3,PB4引脚,禁用JTAG或SWD可以释放其中的一些引脚,见表格: 具体做法: RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO ,ENABLE);//重映射

2018-01-07 20:32:10 30353 5

转载 Qt中new之后需不需要delete的问题

QT的父子对象机制是在 QWidget和QOject中实现的。当我们使用父对象来创建一个对象的时候 ,父对象会把这个对象添加到自己的子对象列表中。当这个父对象被删除的时候,它会遍历它的子对象类表并且删除每一个子对象,然后子对象们自己再删除它们自己的子对象,这样递归调用直到所有对象都被删除。 这种父子对象机制会在很大程度上简化我们的内存管理工作,减少内存泄露的风险。我们需要显试删除(就是用DELET

2018-01-01 20:05:19 13657 2

原创 基于CH340G的一键下载

很多时候,我们并不想通过专用的下载器来给单片机烧录程序,而是希望通过串口来给单片机下载程序。下面以IAP下载时的情况为例。 利用CH340G实现程序的下载时,我们往往会遇到这样一个问题,那就是每次下载时都需要手动复位,非常麻烦,尤其是当板子离操作者有一定距离时。也有人遇到无法正常下载的情况。下面我给出一种解决方案。

2017-12-17 11:18:53 10238

原创 基于Qt的ui图形化界面进行的界面设计

qt初学者往往会发现这样的一个问题——无论是我买的相关的书,还是网上博客的内容,基本全都是利用纯代码的形式来进行界面设计的。而初学者对各种控件的代码实现并不熟悉,往往在这里耗费大量时间。故本篇文章介绍了通过ui图形化界面进行设计的过程并简单梳理一下工程的结构

2017-11-24 18:57:59 80128 10

原创 arduino 如何把模拟口当数字口使用

很简单,如果需要模拟口0输出高电平,则写digitalWrite(A0,1),即在0前面加一个A

2017-09-30 11:41:14 21296 3

原创 利用PROGISP实现ARDUINO IDE编写的程序的下载以及如何把AVR单片机做成ARDUINO板

首先讲讲题目的由来吧。我做的东西原本是利用ARDUINO MEGA2560及各种模块搭建起来的,程序自然也是用ARDUINO IDE写的。但这种东拼西凑的产品自然不够好,更主要的是,之前ARDUINO板的电源烧掉了,我看了下原理图,当电脑USB电源和12V电源都接上时,USB5V和12V转的5V并联了,以此来提供大电流,但是我上网查了下,两个相同电压的电源并联其实是很容易出问题的,电流的分配关系并没

2017-09-07 21:34:59 5564

原创 stm32串口通信调试总结

本调试记录分为两部分,即”以USART1为例的串口初始化”和“调试中遇到的问题”。

2017-05-10 22:31:30 27695 6

四固定贴片mini USB梯形母座封装(altium designer)

四固定贴片mini USB梯形母座封装(altium designer),压缩文件中有具体图片。

2017-09-13

免驱动progisp

解决avr isp电脑发现不了新硬件,安装不了驱动,完成不了下载问题。。。。。。。。。。。。。。。。。。。。。

2017-09-12

空空如也

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

TA关注的人

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