自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 HDMI ——CEC 协议详解以及待机唤醒 实现

如今常见的高清视频接口有HDMI,VGA,DP和DVI。HDMI(High-Definition Multimedia Interface)为当今主流的多媒体高速数字接口,下图为最常见的线缆引脚分布图。其中,CEC(Consumer Electronics Control)信号通过13引脚传输,作为HDMI接口的一部分。CEC总线作为控制信号被分离出来,使得在不增加数据占用宽带的情况下完成高速复杂的通信要求。

2023-10-23 20:30:05 5398

原创 RTC 时间、闹钟

实时时钟RTC是一个独立的定时器。RTC模块拥有一个连续计数的计数器,在软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期 RTC还包含用于管理低功耗模式的自动唤醒单元。

2023-10-04 15:57:58 1587

原创 WOL唤醒配置(以太网、PHY、MAC)

MAC 就是以太网控制器,属于OSI的数字链路层。phy 属于OSI的物理层(Physical layer),所以叫phy。CPU Mac与phy通信通过MII接口,数据的传输通过MDIO数据线。通过配置phy的相关寄存器实现不同的功能。

2023-10-03 22:33:06 3104

原创 红外遥控器 数据格式,按下及松开判断

定义一个静态局部变量初始为空闲状态,用来保存前一次的状态,当当前的状态由其他状态切换到空闲状态,读取定时器7的计数保存下这个时间,当前状态和前一次状态都为空闲,并且保存的计数时间不为0,再读取定时器7计数的时间,用后面的时间减去前面的时间,如果这个时间大于一个设定的值,就代表按键已经松开,标志位置0.而遥控接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平,这样,我们在接收头端收到的信号为:逻辑1应该是560us低+1680us高,逻辑0应该是560us低+560us高。

2023-10-02 18:04:57 995

原创 IIC通信协议

/在SCL为高电平期间,发送数据,发送8次,,数据从高到低。//传输期间保持传输稳定,数据线仅可以在SCL为低电平时改变。//应答信号sda为低电平,非应答为高电平。//所以读取SDA的状态来判断是什么信号。//在这个期间记录下sda的电平状态。//从高到低发送,左移获得下一位数据。//在时钟脉冲9期间释放数据线。//标志位,记录sda的状态。//拉低时钟开始数据传输。//拉高时钟开始数据发送。//获取最高位给sda。//发送数据建立时间。//准备下一个数据位。

2023-10-01 17:13:54 537

原创 git的使用

git mv [-v] [-f] [-n] [-k] 特殊符号:分支名。标签名称 -m 标签描述信息 [] :添加带有描述信息的附注标签 可以指定之前的提交记录。标签名称[] :添加轻量标签 指向提交对象的应用 可以指定之前的提交记录。将 HEAD 的指向改变,撤销到指定的提交记录,文件也修改了。将 HEAD 的指向改变,撤销到指定的提交记录,文件未修改。

2023-07-25 11:39:30 544

原创 chdir: No such file or directory (chdir()函数、strtok()函数)

出现此错误的原因在于 如果用户通过回车键或通过EOF (Linux上的ctrl + d)字符输入字符串,这将会运行。所以在调用strtok()函数时,应该写strtok(....," \n"),以防字符串以EOF或其它形式结束。1、在涉及到获取用户输入时要注意换行符的处理,"\n"也输入一个字符,应该考虑到。2、在涉及到数组的处理时要注意结束符 "\0",它是自动补充的,会起到作用,特别是涉及到数组的空间开辟以及访问时应该被注意。

2022-10-30 00:19:58 1298 1

原创 C语言编译运行代码的过程

汇编器的汇编过程相对于编译器来说更简单,没有复杂的语法,也没有语义,更不需要做指令优化,只是根据汇编指令和机器指令的对照表一一翻译过来,汇编过程有汇编器as完成。源程序是指未经编译的,按照一定的程序设计语言规范书写的,人类可读的文本文件,源程序就是所写好的代码。在C语言中,.c文件就是所谓的源文件。3、语义分析:语法分析器只是完成了对表达式语法层面的分析,语义分析器则对表达式是否有意义进行判断,其分析的语义是静态语义——在编译期能分期的语义,相对应的动态语义是在运行期才能确定的语义。

2022-10-20 12:29:54 1910

原创 C语言volatile 关键字

volatile用于声明一个变量,告诉编译器该变量值容易发生改变,在编译、读取、存储该变量的时候都不要做任何优化,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取存储数据,不做优化,在做嵌入式开发的时候,因为有时变量地址有可能是系统的一个外设地址,他的值的变化并不在程序控制范围内,随时有可能变化,因此需要对他进行声明,每次读取或者存储直接对地址进行操作。变量如果加了 volatile 修饰,则会从内存重新装载内容,而不是直接从寄存器拷贝内容。

2022-10-19 23:08:47 3660 2

转载 实时操作系统与分时操作系统的含义、特征

版权声明:本文为CSDN博主「嵌入式小胖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/m0_37765662/article/details/83018523。

2022-10-16 00:39:20 5991

原创 C语言内存分区与可执行程序有哪些段,以及各段的意义

函数的局部变量,如果没有声明为static,函数中定义的局部变量全部为auto类型,auto变量包括未加static声明的局部变量和函数的形参。在函数调用时系统会给他们分配存储空间,在函数调用结束后会自动释放这些空间。属于动态存储方式。

2022-10-16 00:30:02 1537

转载 操作系统——进程状态

版权声明:本文为CSDN博主「_好好学习」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/jay_zzs/article/details/113192123进程从创建到执行,再到执行完毕销毁的过程中,经历了不同的,进程状态部分取决于进程当前的活动,可以将进程状态分为;;。

2022-10-15 23:27:38 1315

转载 操作系统——进程调度

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/jay_zzs/article/details/113243173的。

2022-10-15 23:24:37 1724

原创 不调用C/C++库,实现字符串常用操作函数

2、长度受限制的字符串处理函数模拟实现 strncpy 、strncat 、strncmp 函数。1、长度不受限制的字符串函数讲解模拟实现strcpy 、strcat 、strcmp 函数。大佬写的太好了,非常清晰易懂,此处总结借鉴学习,如有侵权,联系删除。3、strstr 函数模拟实现。4、 内存操作函数模拟实现。

2022-10-15 23:10:47 319

原创 C语言static关键字

一个全局变量具有外部链接属性的 (就是可以被其他源文件引用)但是被static 修饰后外部链接属性就变成了内部链接属性 只能在自己所在的源文件内部使用不能在其他文件内部使用。静态全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响。函数的使用方式与全局变量类似,在函数的返回类型前加上static,就是静态函数。在C中,static主要定义全局静态变量、定义局部静态变量、定义静态函数。,而由于静态变量具有“记忆"功能,初始化后,一直都没有被销毁,都会保存在。

2022-10-07 22:45:12 242

转载 C语言extern关键字用法

例1:在a.c文件中使用extern int a = 5定义一个变量,在b.c文件中引用,会报warning,但程序可以运行。

2022-10-07 09:48:33 733

原创 C语言const关键字

例如:上面两种写法是一样的,都是表示变量n的值不能被改变了,需要注意的是,用const修饰变量时,一定要给变量初始化,否则之后就不能再进行赋值了。例如:如果没有const的修饰,如果我们在后面写到 str[3]=’x’;这样的语句,这样会导致对只读内存区域的赋值,然后程序会立刻异常终止。有了const,这个错误就能在程序被编译的时候就立即检查出来,这就是const的好处,让逻辑错误在编译期被发现。4、修饰常指针(常量指针与指针常量)常量指针常量指针说的是指针指向的内存可以变,但指

2022-10-06 23:50:56 165

原创 调用libcurl、OpenSSL库实现人脸识别以及base64编码

在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,但一旦涉及到中文就会出现乱码情况。与此类似,网络上传输的字符并不全是可打印的字符,比如二进制文件、图片等。Base64的出现就是为了解决此问题,它是基于64个可打印的字符来表示二进制的数据的一种方法。Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。翔云平台实现人脸识别方案(用其它平台也一样,这里我是用翔云)②url地址(上图中的接口地址)④识别的图片为base64流。

2022-10-05 15:35:46 247

原创 编译openssl支持libcurl的https访问

所以将原先安装的libcurl库删掉,就把_install这个文件夹删掉即可,然后重新编译安装,编译的时候先安装openssl库,就安装在默认位置/usr/local/lib和/usr/lib下面即可,这样编译libcurl库的时候不用指定ssl库的路径了。安装后可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr /local/share。下载完成后,解压文件,可以进行默认位置的编译和安装。

2022-10-04 22:24:28 675

原创 http协议之libcurl库的编译和调用

打开INSTALL.cmd文件,里面有介绍如何安装编译后的libcurl库,下面可以看到在UNIX环境下面如何进行安装,如下图所示,./config就是配置的一个东西,就是将库安装到哪里,若后面不跟任何的参数,就是默认安装(可能安装在/usr/lib或者/usr/include下面)。这个文件夹下面有一个README文件夹,里面有对库的一些说明,不论用到的是什么库,我们都可以去阅读README学习如何使用,如下图所示。研究复制文件中的分发条款和类似条款。Libcurl是curl用来完成它的工作的库。

2022-10-03 23:34:25 574

原创 http、https、GET和POST区别 、密码学基础

http协议是明文传输的,因此很容易被截取和解析,泄漏个人数据。https协议是在http和tcp之间多添加了一层,进行身份验证和数据加密。

2022-10-02 12:53:46 1506

原创 socket,tcp,http三者之间的区别和原理

它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描。

2022-10-01 23:29:59 130

原创 OSI七层网络模型、TCP/IP四层模型

显然、如果一个东西想包罗万象、一般时不可能的;在实际的开发应用中一般时在此模型的基础上进行裁剪、整合!互联网分层结构的好处: 上层的变动完全不影响下层的结构。

2022-10-01 22:39:00 1320

原创 树莓派 安装 MJPG-streamer 使用摄像头(编译失败相关问题处理)

如果detected=0,说明摄像头模块没接好,重新排查下硬件。supported=1说明摄像头已经使能,摄像头已经可以使用。supported=0则说明CSI摄像头没有使能,需要使能下摄像头模块。要实现互联网视频监控,需要另外实现内网穿透。如果脚本执行发生错误,则执行更改./start.sh权限。再把图片传到windows系统下打开,即可看到拍到的图片。板的性能要求不高,主频200MHZ的ARM芯片也能实现。执行成功如下,生成一些.so插件。重新安装一下JPEG支持库。一目了然,便于学习。

2022-09-30 23:15:19 793

原创 树莓派 IO 口驱动代码编译和测试

但是CPU不会为这些已知的外设IO内存资源预先指定虚拟地址的值,所以驱动程序不可以直接就通过外设的物理地址访问到IO内存,而必须要将其映射到虚拟地址空间(通过页表),然后才能根据内核映射过后的虚拟地址来通过内存指令访问这些IO内存,并对其进行操作。我们在编写驱动程序的时候,IO空间的起始地址是0x3f000000,加上GPIO的偏移量0x2000000,所以GPIO的物理地址应该是从0x3f200000开始的,然后在这个基础上进行Linux系统的MMU内存虚拟化管理,映射到虚拟地址上。

2022-09-22 12:46:42 399

原创 Linux系统中copy_from_user和copy_to_user的用法

这样将进程的运行空间分为内核空间和用户空间,会大大降低系统崩溃的可能性。由于两个空间是独立的,要实现内核空间与用户空间的数据传递就会用到copy_to_user()和copy_from_user()这两个函数。这两个函数含盖了许多关于内核方面的知识,比如内核关于异常出错的处理.从用户空间拷贝数据到内核中时必须非常小心,如果用户空间的数据地址是个非法的地址,或是超出用户空间的范围,或是那些地址还没有被映射到,都可能对内核产生很大的影响,或者被造成系统安全的影响。to:目标地址(内核空间)

2022-09-22 10:41:36 1606

原创 位运算(按位与 、按位或、按位异或、取反、左移右移)

例如: 3

2022-09-21 23:36:12 5370

原创 树莓派博通BCM2835芯片手册导读

驱动开发的两大利器就是开发手册和电路图,但是树莓派在开发手册中就已经将相应的寄存器已经写出来了,所以不需要看电路图,只看开发手册就可以进行开发。进行IO口的驱动,所以在开发手册中找到对应的IO篇章,通过I/O口导读我们了解到:共有54条通用I/O(GPIO)线路分为两组。所有GPIO引脚都具有BCM内至少有两个可选功能。替代功能通常是外围IO,每个库中可能会出现一个外围设备,以便灵活选择IO。GPIO有41个寄存器,所有访问都是32位的。Description是寄存器的功能描述。

2022-09-20 21:54:17 584

原创 总线地址、物理地址、虚拟地址

树莓派也是32位 ,一个G的内存,但它只能访问949M,剩下的另作他用。BCM2835是树莓派3B CPU的型号,是ARM-cotexA53架构,cpu Bus是地址总线,00000000~FFFFFFFF是CPU寻址的范围,就是4294967296bit。若CPU的地址总线宽度是32位,那么CPU的寻址范围是4G(2的32次方位),所以最多支持4G内存。)是一种计算机总线,是CPU或有DMA能力的单元,用来沟通这些单元想要访问(读取/写入)计算机内存组件/地方的物理地址。上,以电子形式存在的,使得。

2022-09-19 23:14:31 2222

原创 Linux驱动(驱动程序开发、驱动框架代码编译和测试)

驱动就是对底层硬件设备的操作进行封装,并向上层提供函数接口。

2022-09-19 20:47:33 5830 2

原创 Linux文件系统、虚拟文件系统、分区、文件系统目录结构、Linux内核结构

文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。也指用于存储文件的磁盘或分区,或文件系统种类。因此,可以说"我有2个文件系统"意思是他有2个分区,一个存文件,或他用 “扩展文件系统”,意思是文件系统的种类。

2022-09-18 10:24:24 958

原创 配置Linux内核适合树莓派相关操作

到https://.com/raspberrypi/下载对应版本的Linux内核源码拷贝到Ubuntu,下载交叉编译工具安装到Ubuntu并配置环境变量。

2022-09-14 21:43:24 321

原创 Linux内核源码目录树结构及作用

包含和硬件体系结构相关的代码,每种平台占一个相应的目录。和32位PC相关的代码存放在i386目录下,其中比较重要的包括kernel(内核核心部分)、mm(内存管理)、math-emu(浮点单元仿真)、lib(硬件相关工具函数)、boot(引导程序)、pci(PCI总线)和power(CPU相关状态)。内核的最核心部分,包括进程调度、定时器等,和平台相关的一部分代码放在arch/*/kernel目录下。内存管理代码,和平台相关的一部分代码放在arch/*/mm目录下。网络相关代码,实现了各种常见的网络协议。

2022-09-13 17:04:52 305

原创 安装Ubuntu-18.04相关问题 (vim、gcc、输入法、共享等)

备份系统原有的软件源配置:sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak。创建时区:sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime。# 将复制的阿里源粘贴替换到sources.list 中 :sudo vi /etc/apt/sources.list。解决办法:源文件的相关信息在“/etc/apt/”路径下,使用cd /etc/apt进入文件。

2022-09-12 23:17:21 558

原创 Windows、安卓、嵌入式设备相关启动流程

启动过程: 电源-》BootLoader(引导操作系统启动)-》Linux内核-》文件系统(根据功能性来组织文件夹,带访问权限)-》KTV点歌机,启动过程: 电源-》 fastBoot/Bootloader/-》linux内核-》文件系统-》虚拟机-》HOME应用程序-》点某图标打开某APP。启动过程: 电源 -》 BIOS -》windows内核-》C,D盘-》 程序启动(QQ)C51,STM32(裸机)》》》》》》C直接操控底层寄存器实现相关业务。业务流程型的裸机代码。遥控灯: while(1)

2022-09-12 23:16:20 189

原创 树莓派Linux内核开发准备

com/raspberrypi/下载树莓派的linux源码和交叉编译工具链到共享文件夹。Ubuntu安装交叉编译工具和树莓派Linux源码。拷贝到Ubuntu之后解压树莓派linux源码和。选择对应版本的linux rpi 版本。查看arm-linux编译工具是否可用。

2022-09-12 23:12:08 159

原创 交叉编译工具链安装与应用、带wiringPi库的交叉编译

两种,软链接就是ln -s ** **,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。当 我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在其它的目录下用ln命令链接(link)就可以,不必重复的占用磁盘空间。注意,libwiringPi.so是软链接文件,在拷贝到Ubuntu后软链接消失,需要创建。

2022-09-09 16:27:39 377

原创 嵌入式开发中的交叉编译

比如文件A.c引用了文件B.c中的变量,A.c和B.c分别编译生成A.o和B.o,A.o中并没有变量的定义,必须依靠B.o才能形成完整的代码。这里的平台指的是:体系结构+操作系统,同一个体系结构可以运行不同的操作系统,同样,同一个操作系统可以在不同的体系结构上运行。编译器需要检查源代码的语法,没有错误才能被编译通过,源代码经过编译后 ,并没有生成最终的可执行文件,而是生成一种被称为目标文件的中间文件,比如gcc的目标文件的后缀名为.o。是指编译源代码的平台和执行源代码编译后程序的平台是两个不同的平台。

2022-09-05 14:57:46 507

原创 树莓派串口通信

串口通信常用于多机通信,串口通信属于全双工通信,可同时进行数据交互,半双工则只允许数据单向传输。使用时需要包含头文件:#include 树莓派第一次使用串口, 要用串口进行通信,需要对串口配置。串口通信需要提供波特率、数据位、校验位、停止位。串口地址:默认一般是"/dev/ttyAMA0"(支持Mac,Windows,Ubuntu)我上面示例所用的串口助手。补充:串口输出中文时乱码的问题。修改cmdline.txt文件。串口助手不支持字符编码方式。...

2022-08-31 22:48:59 1648

原创 树莓派外设开发

3、在Codeblocks环境下是无法使用sleep函数的,因为在windows上Codeblocks采用mingw(Gnu在Window环境下的编译器,可以充分使用WindowsApi)作为编译器,而在stdlib.h中sleep的说明如下:_CRTIMP void __cdecl __MINGW_NOTHROW _sleep (unsigned long) __MINGW_ATTRIB_DEPRECATED;delay()的参数单位是毫秒,对于长度超过几千微秒的延迟,应该使用delay()函数。...

2022-08-28 10:13:35 253

空空如也

空空如也

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

TA关注的人

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