自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux--标准IO库

从图中自上而下,1)首先应用程序调用标准I/O库函数将用户数据写入到stdio缓冲区中,stdio缓冲区是 由 stdio库所维护的用户空间缓冲区。2)针对不同的缓冲模式,当满足条件时,stdio库会调用文件I/O(系统 调用 I/O)将stdio缓冲区中缓存的数据写入到内核缓冲区中,内核缓冲区位于内核空间。3)最终由内核向磁 盘设备发起读写操作,将内核缓冲区中的数据写入到磁盘(或者从磁盘设备读取数据到内核缓冲区)。应用程序调用库函数可以对stdio。

2024-06-07 15:51:31 1507

原创 226、翻转二叉树

题解:可以采用递归的方式进行翻转。前序递归:中->左->右 ,后序递归:左->右->中,中序递归不行,中序:左中右,当左边翻转完后,根节点再翻转,就把已经处理过的左边翻到右边,接着处理右边。,翻转这棵二叉树,并返回其根节点。函数在C++中用于交换两个变量的值。2、注意对传入参数异常情况的的判断;给你一棵二叉树的根节点。

2024-06-06 19:43:36 274

原创 STM32--DMA

DMA,全称为:,即直接存储器访问。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,与I/O,能使 CPU的效率大为提高。STM32F407最多有2个DMA控制器(DMA1和DMA2),两个DMA控制器总共有16个数据流。每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个 DMA请求的优先权。二、配置步骤调用函数初始化DMA。

2024-06-03 21:49:02 3100 1

原创 STM32--ESP8266 WiFi模块

此文所述模块为正点原子出版的ATK-ESP8266模块。

2024-06-03 21:39:49 1693 1

原创 Linux--Socket编程基础

套接字(socket)是Linux下的一种进程间通信机制(socket IPC), 使用 socket IPC可以使得在不同主机上的应用程序之间进行通信(网络通信),当然也可以是同一台主机上 的不同应用程序。socket IPC通常使用客户端服务器这种模式完成通信,多个客户端可以同时连接到服务器中,与服务器之间完成数据交互。内核向应用层提供了socket接口,对于应用程序开发人员来说,我们只需要调用socketsocket是应用层与TCP/IP。

2024-06-02 21:52:59 1180

原创 STM32-- GPIO->EXTI->NVIC中断

EXTI即是外部中断和事件控制器,

2024-06-02 15:35:39 1102

原创 102.二叉树的层序遍历

就是将每一层节点放进队列中,并记录每一层节点数量size,之后队列每弹出一个节点,就push进它的左右节点,当pop完size个节点后,队列中剩下的就是下一层的节点,这时再次记录size,进行下一层的遍历。所谓层序遍历就是从左往右一层一层的遍历二叉树,并把每一层放进一个数组中,最终输出一个二维数组。是C++标准模板库(STL)中用于获取容器中元素数量的方法。3、需要注意的是本题中放入队列的是二叉树节点,是包含指向左右子节点的指针和自身val的结构。,用于将元素添加到容器的特定位置(通常是末尾或顶端)。

2024-05-20 23:19:42 319

原创 Linux--网络通信(一)概述

它是体系结构中的最高层,直接为用户的应用进程(例如电子邮件、 文件传输和终端仿真)提供服务。但是实时应用通常不希望过分的延迟报文段的传送,且能容忍一部分数据丢失。,每个数据包都要确保可靠传输,当它出错时就重传,这会导致后续的数据包被阻滞,视频效果反而不好。无连接的,数据传输的单位是用户数据报,不保证提供可靠的交付,只能提供“:面向连接的,数据传输的单位是报文段,能够提供可靠的交付。向它的应用程序提供了面向连接的服务。,偶尔的丢包、偶尔的花屏时可以忍受的;2)无需建立连接,不会引入建立连接时的延迟。

2024-05-20 13:21:57 897

原创 STM32--JQ8900语音模块

可以通过配套的配置工具设置每个IO引脚的播放方式,对每个NO口进行配置好后,点生成,就自动在配置工具所在目录生成了一个config.txt文件,然后将config.txt文件复制到存储器里即可。JQ8900-16P选用的是SOC方案,集成了一个16位的MCU,以及一个专门针对音频解码的ADSP,采用硬解码的方式,更加保证了系统的稳定性和音质。0x0b~0x10: 为多字节控制指令,需要和0x00~0x09配合使用。0x11~0x1c: 为单字节控制指令,只需要发送一个控制指令即可。

2024-05-16 15:24:32 15822 1

原创 STM32--HC-SR501 热释电人体红外感应模块

首先,热释电探测元是一种能够感应红外线并产生电荷的器件,它由高热电材料制成,并在其两面镀上金属电极。将一直保特高电平,直到人离开后才延时将高电平变为低电平(感应模块检测到人体的每一次活动后会自动顺延一个延时时间段,并且以最后一次活动的时间为延时时间的起始点,有点像定时器按键消抖的原理)。:感应模块在每一次感应输出后(高电平变成低电平),会紧跟着一个封锁时间段(2.5s),在此比时间段内感应器不接受任何感应信号。:即感应输出高电平后,在延时时间段内,如果有人体在其感应范围活动,其输出。

2024-05-15 19:28:22 2508

原创 UBOOT介绍

U-boot全称 Universal Boot Loader,是遵循GPL条款的开放项目,uboot 是一个裸机代码,可以看作是一个裸机综合例程,执行启动内核的功能。补充:GPL条款(GNU General Public License,GNU通用公共许可证)是一种自由软件许可证,而GNU代表“GNU's Not Unix”,是开源的操作系统项目,大多数GNU系统使用开源的Linux内核,GPL条款保证了开源内核的自由性,使用GPL条款后,

2024-05-10 20:08:51 5243

原创 STM32--4G DTU 及 阿里云

在阿里云透传模式下,DTU 可以帮助用户快速实现串口数据与阿里云服务器的数据交换。串口数据可以通过 DTU 发送到阿里云服务器的主题上,也可以接收来自订阅主题的数据并以串口数据形式输出。阿里云透传模式下需要用到的指令如表所示。

2024-05-09 22:40:18 2065 2

原创 STM32--LoRa通信模块

模块根据MD0的配置与AUX引脚的状态会进入不同的功能其中在通信功能下,包含4种工作模式。

2024-05-09 19:58:45 11074

原创 Linux--IIC驱动编程实验

对于I2C主机驱动,一旦编写完成就不需要再做修改,其他的I2C设备直接调用主机驱动提供的 API函数完成读写操作即可。这个正好符合Linux的驱动分离与分层的思想,因此Linux内核也将 I2C驱动分为两部分:①、I2C总线驱动,I2C总线驱动就是SOC的I2C控制器驱动,也叫做I2C适配器驱动。②、I2C设备驱动,I2C设备驱动就是针对具体的I2C设备而编写的驱动。

2024-05-06 22:17:47 1315

原创 常见通信协议

如果是带IIC的单片机,会有地址寄存器,寄存器里的值即为它作为从机时的地址。

2024-05-06 16:26:29 1281

转载 静态库与动态库

①后缀名:Linux下.a,Windows下.lib1.1 简介之所以称之为【静态库】,是因为在链接阶段,会将汇编生成的目标文件.o 与 引用的库一起链接到可执行文件中。对应的链接方式称为 静态链接。如果多个进程需要引用到【静态库】,在内存中就会存在多份拷贝。1.2【静态库】的特点:①静态库对函数库的链接是在编译期完成的。执行期间代码装载速度快。②使可执行文件变大,浪费空间和资源(占空间)。③对程序的更新、部署与发布不方便,需要全量更新。

2024-05-06 10:38:35 100

原创 proc 文件系统

proc 文件系统挂载在系统的/proc 目录下,对于内核开发者(譬如驱动开发工程师)来说,proc 文件系统给了开发者一种调试内核的方法:通过查看/proc/xxx 文件来获取到内核特定数据结构值,在添加了 新功能前后进行对比,就可以判断此功能所产生的影响是否合理。内核构建 proc 虚拟文件系统,它会将内核运行时的一些关键数据信息以文件的方式呈现在 proc 文件系统下的一些特定文件中,这样相当于将一些不可见的内核中的数据结构以可视化的方式呈现给应用层。但是与普通文件不同的是,

2024-05-05 16:33:04 316

原创 cmake 简介

Makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全按照 Makefile 文件定义的编译规则进行自动编译,极大的提高了软件开发的效率。大都数的IDE都有这个工具, 譬如 Visual C++的nmakelinux下的GNU makeQt的qmake等等,这些make工具遵循着不同的规范和标准,对应的 Makefile。

2024-05-04 21:37:57 1643

原创 Linux--LCD驱动实验

LCD的驱动文件为。

2024-05-02 23:10:56 1496

原创 Linux--蜂鸣器驱动

蜂鸣器常用于计算机、打印机、报警器、电子玩具等电子产品中,常用的蜂鸣器有两种:有源蜂鸣器和无源蜂鸣器,这里的有“源”不是电源,而是震荡源,有源蜂鸣器内部带有震荡源(晶体振荡器、RC振荡器、LC振荡器),所以有源蜂鸣器只要通电就会叫。无源蜂鸣器内部不带震荡源,直接用直流电是驱动不起来的,需要 2K-5K 的方波去驱动。有源蜂鸣器只要通电就会叫,所以我们可以做一个供电电路,这个供电电路可以由一个IO来控制其通断,一般使用三极管来搭建这个电路。为什么我们不能像控制 LED。

2024-04-26 16:00:13 650 1

原创 imx6u gpio随笔

26章“Chapter 26 General Purpose Input/Ouput(GPIO)用作哪个外设就复用为哪个外设功能即可。能复用什么外设的话可以直接查阅《IMX6ULL。是其中的一种,我们想要把 GPIO1_IO00。来点个灯、作为按键输入啥的就是使用其 GPIO(如果我们要编写代码,设置某个 IO。、SRC_SYSTEM_RESET 和。的复用功能的话就需要查阅第。这两种寄存器都是配置 IO。比如 GPIO1_IO00。以后还需要对其 GPIO。对应的复用配置寄存器。

2024-04-26 15:40:46 370

原创 Linux--系统烧写

MfgTool工具是NXP提供的专门用于给I.MX系列CPU烧写系统的软件,可以在NXP 官网下载到。该软件需要在Windows环境下使用。这是使用正点原子提供的已经下载好的NXP烧写工具:L4.1.15_2.0.0-ga_mfg-tools.tar.gz。将软件包解压,里面还有2个.gz 压缩包,一个是带rootfs,一个是不带rootfs,我们是需要烧写文件系统的,所以选择 mfgtools-with-rootfs.tar.gz 这个压缩包,继续解压。Profiles文件夹。

2024-04-24 20:17:09 1168

原创 Linux--根文件系统移植

BusyBox是一个集成了大量的 Linux命令和工具的软件,像lsmvifconfig等命令BusyBox都会提供。BusyBox就是一个大的工具箱,这个工具箱里面集成了 Linux的许多工具和命令。一般下载BusyBox的源码, 然后配置 BusyBox,选择自己想要的功能,最后编译即可。BusyBox可以在其官网下载到,官网地址为:,官网比较简陋,BusyBox 准备好以后就可以构建根文件系统了。

2024-04-24 14:20:48 1343

原创 关于Linux系统的配置文件(UBOOT、Kernel、rootfs)

对于编译 U-Boot、内核和根文件系统,每个部分都需要相应的配置文件,这些配置文件指定了编译过程中的选项、参数和设置。

2024-04-24 13:51:51 690

原创 Linux--内核移植(二)移植流程及驱动修改

一、官方开发板内核测试本文来总结一下如何将 NXP官方提供的Linux内核移植到正点原子的开发板上。一、官方开发板内核测试NXP提供的Linux源码肯定是可以在自己的开发板上运行下去的,所以我们肯定是以 I.MX6ULL EVK开发板为参考,然后将Linux内核移植到开发板上的。1.修改顶层Makefile修改顶层Makefile,直接在顶层Makefile文件里面定义ARCH和这两个的变量值为 arm和 arm-linux-gnueabihf-。

2024-04-23 22:54:25 2342

原创 Linux--内核移植(一)Kernel编译启动流程

解压完成后给予该脚本可执行权限,然后运行,编译的时候会弹出Linux图形配置界面, 这里不需要做任何的配置, 直接按两下ESC键退出图形界面之后会自动开始编译Linux内核。编译完成以后就会在这个目录下生成一个zImage文件,该文件就是要用的Linux镜像文件。另外也会在下生成很多.dtb 文件,这些.dtb 就是设备树文件。

2024-04-23 16:39:20 973

原创 U-BOOT图形化配置

不过不知道从什么时候开始,uboot 也支持图形化配置了。体现出来时因为我们是直接在 mx6ull_alientek_emmc.h。2)或者通过文件mx6ull_alientek_emmc.h。.config 里面并没有宏CONFIG_CMD_PING。生成基于文本的图形界面,因此需要先在。和CONFIG_CMD_DHCP,而。ping 命令,这不是冲突了吗?是一套图形化的配置工具,需要。是不支持图形化配置,只有。”来打开图形化配置界面,命令,但是在图形化界面中。的方法,就是图形化配置。

2024-04-23 16:03:31 465

原创 Linux--uboot移植(三)新uboot驱动修改

uboot移植到此结束,简单总结一下uboot移植的过程:①、不管是购买的开发板还是自己做的开发板,基本都是参考半导体厂商的dmeo板,而半导体厂商会在他们自己的开发板上移植好 uboot和rootfs等,最终制作好BSP 包提供给用户。我们可以在官方提供的 BSP包的基础上添加我们的板子,也就是俗称的移植。②、我们购买的开发板或者自己做的板子一般都不会原封不动的照抄半导体厂商的demo板,都会根据实际的情况来做修改,既然有修改就必然涉及到uboot下驱动的移植。③、一般。

2024-04-23 15:30:53 2354

原创 Linux--uboot移植(二)新UBOOT配置

右端灰色的为原厂开发板的相关文件,黄色的为模仿原厂文件,新添加并修改的自己开发板的文件。

2024-04-22 21:37:28 1574

原创 Linux--uboot移植(一)UBOOT介绍、原厂测试

uboot 的全称是,遵循 GPL 协议的开源软件。uboot 是一个裸机代码,可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、USB 等高级功能。uboot 官网为。但我们移植uboot时一般不会直接用 uboot 官方的源码的,官方的源码是给半导体厂商准备的,半导 体厂商会根据自家的芯片,维护自己芯片对应的uboot。

2024-04-22 14:31:33 3024

原创 shell操作

这个词语第一反应就是在终端中敲命令,将多个 Shell 命令按照一定的格式放到一个文本中,那么这个文本就叫做。负责将应用层或者用户输入的命令传递给系统内核,由操作系统内核来完成相应的工作,然后将结果反馈给应用层或者用户。是一个应用程序,它负责接收用户输入的命令,然后根据命令做出 相应的动作,Shell。:选项,同一种命令可能有不同的选项,不同的选项其实现的功能不同。下通过命令行输入命令叫做“敲命令”,国外人玩的比较。就是“敲命令”,那么既然是命令,那肯定是有格式的,命令是可以带参数的,也可以不带参数运行。

2024-04-22 13:57:36 274

原创 高级IO简介

阻塞其实就是进入了休眠状态,交出了CPU控制权。普通文件的读写操作是不会阻塞的,不管读写多少个字节数据,read()或write()一定会在有限的时间内返回,所以普通文件一定是以非阻塞的方式进行 I/O操作,这是普通文件本质上决定的;但是对于某些文件类型,譬如上面所介绍的管道文件、设备文件等,它们既可以使用阻塞式 I/O操作,也可以使用非阻塞式I/O进行操作。在调用open()函数打开文件时,为参数 flags指定O_NONBLOCK标志,open()调用成功后,后续的。

2024-04-21 16:53:20 803

原创 应用编程之线程(二-同步篇)

线程的主要优势在于,资源的共享性,譬如通过全局变量来实现信息共享,不过这种便捷的共享是有代价的,那就是多个线程并发访问共享数据所导致的数据不一 致的问题。一、为什么需要线程同步线程同步是为了对共享资源的访问进行保护。保护的目的是为了解决数据一致性的问题。出现数据一致性问题其本质在于进程中的多个线程对共享资源的并发访问(同时访问)。二、互斥锁互斥锁(mutex)又叫互斥量,从本质上说是一把锁,在访问共享资源之前对互斥锁进行上锁,在访问完成后释放互斥锁(解锁)。互斥锁使用。

2024-04-21 15:20:27 880

原创 应用编程之线程(一)

⚫串行:一件事、一件事接着做⚫并发:交替做不同的事;⚫并行:同时做不同的事。

2024-04-20 16:35:40 647

原创 应用编程之进程(三-通信篇)

所谓进程间通信指的是系统中两个进程之间的通信,不同的进程都在各自的地址空间中、相互独立、隔离,所以它们是处在于不同的地址空间中,因此相互通信比较难,Linux内核提供了多种进程间通信的机制。大部分的程序是不要考虑进程间通信的,因为大家所接触绝大部分程序都是单进程程序(可以有多个线程),对于一些复杂、大型的应用程序,则会根据实际需要将其设计成多进程程序,譬如GUI、服务区应用程序等。在一些中小型应用程序中通常不会将应用程序设计成多进程程序,自然而然便不需要考虑进程间通信的问题总结如下:⚫。

2024-04-20 13:04:08 946

原创 应用编程之进程(二)

当子进程的工作不再是运行父进程的代码段,而是运行另一个新程序的代码,那么这个时候子进程可以通过 exec函数来实现运行另一个新的程序。系统调用execve()可以将新程序加载到某一进程的内存空间,通过调用execve()函数将一个外部的可执 行文件加载到进程的内存空间运行,使用新的程序替换旧的程序,而进程的栈、数据、以及堆数据会被新程序的相应部件所替换,然后从新程序的 main()函数开始执行。对execve()

2024-04-20 12:25:57 912

原创 应用编程之进程(一)

操作系统下的应用程序在运行main()函数之前需要先执行一段引导代码,最终由这段去调用应用 程序的 main()函数,我们在编写应用程序的时候,不用考虑引导代码的问题,在编译链接时,由将引导代码链接到我们的应用程序当中,一起构成最终的可执行文件。再来看看argc和argv传参是如何实现的呢?譬如,这两个参数arg1和arg2是如何传递给应用程序的 main函数的呢?当在终端执行程序时,命令行参数(shell进程逐一进行解析,shell。

2024-04-19 21:53:13 849

原创 Linux文件类型

普通文件是最常见的文件类型;目录也是一种文件类型;设备文件对应于硬件设备;符号链接文件类似于Windows的快捷方式;管道文件用于进程间通信;套接字文件用于网络通信。

2024-04-19 09:50:11 1031

原创 文件IO基础

调用 open 函数会有一个返回值,该返回值就是一个文件描述符(这说明文件描述符是一个;对于 Linux 内核而言,所有打开的文件都会通过文件描述符进行索引。当调用 open 函数打开一个现有文件或创建一个新文件时,内核会向进程返回一个文件描述符,用于指代被打开的文件,。一个进程能打开的文件是有限的,所以对进程来说,文件描述符也是有限的,

2024-04-18 22:34:16 819

原创 裸机、应用、驱动

通常在操作系统下有两种不同的状态:内核态和用户态,应用程序运行在用户态、而内核则运行在内核态。这个概念来说很好理解,一般把没有操作系统支持的编程环境称为裸机编程环境,譬如单片机上的编程开发,编写直接在硬件上运行的程序,没有操作系统支持;内核提供的接口完成设备驱动的注册,驱动程序负责底层硬件操作相关逻辑,如果学习过 Linux。就拿嵌入式 Linux 硬件平台下的软件开发来说,我们大可将编程分为三种,分别为。指的是基于内核驱动框架开发驱动程序,驱动开发工程师通过调用。驱动开发的读者,想必对此并不陌生;

2024-04-18 12:57:11 520

空空如也

空空如也

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

TA关注的人

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