自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SSH配置生成 密钥

【代码】SSH配置生成 密钥。

2026-06-19 15:29:55 39

原创 示例:plateform + 设备树 (pinctrl子系统 + gpio子系统)

添加在 &iomuxc_snvs :节点下。

2024-09-06 16:02:50 37

原创 pinctrl子系统gpio子系统

大多数SOC的PIN都是支持复用的,既可以使用为GPIO模式,也可以复用使用。此外我们还需要配置 pin 的电气特性,比如上/下拉、速度、驱动能力等- 获取设备树中pin信息,管理系统中所有的可以控制的pin- 根据获得到的pin信息来设置pin的复用功能- 其引脚除了配置成普通的GPIO之外,若干个引脚还可以组成一个pingroup,形成特定的功能- 根据获得到的pin信息来设置pin的电气特性,比如上下拉、速度、驱动能力。

2024-09-06 15:52:10 526

原创 plateform总线驱动

文章目录写在前面一、框架二、Platform驱动driver.c1、platform_driver结构体2、两个结构体2.1、匹配相关 与 优先级3、probe函数编写步骤4、plateform总线的注册与注销三、获取硬件资源1、直接获取(不推荐)2、使用函数来实现2.1、使用函数来获取资源2.2、申请 I/O 内存四、Platform设备device.c1、struct platform_device :设备结构体2、struct resource : 资源结构体3、设备注册于注销写在前面Linux

2024-09-05 17:19:16 480

原创 Linux设备树---Device Tree

设备树 :步入Linux 3.x时代后,嵌入式Linux工程师必备的知识体系1. Device Tree 是一种描述硬件的数据结构2. 由一系列被命名的节点(node)和属性(property)组成3. 节点本身可包含子节点4.。设备的属性用key-value对(键值对)来描述Bootloader会将这棵树传递给内核(减少内核中关于各个开发板描述硬件资源的代码)一般情况下,我们不会从头编写一个完整的dts文件,SOC厂商一般会直接提供一个有着基本框架的dts文件。

2024-09-05 09:48:52 580

原创 c++(重点理解)

面向过程编程侧重于解决问题的步骤过程,一般适用于简单功能的实现场合。函数是程序的基本单元,我们可以把一个问题分解成多个步骤来解决,每一步或每一个功能都可以使用函数来实现定义一个类需要使用关键字 class,然后指定类的名称,类的主体是包含在一对花括号中,主体包含类的成员变量和成员函数。定义一个类,本质上是定义一个数据类型的蓝图,它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作。​​宏是预处理指令,在预处理的时候把所有的宏名用宏体来替换;

2024-07-12 17:46:09 563

原创 字符设备驱动

mdev是udev的简化版本,udev是在pc上的Linux的工具。

2024-07-12 16:22:38 553

原创 函数简单介绍---简单了解与介绍(linux应用)

ioctl的作用非常强大、灵活。不同的驱动程序内部会实现不同的ioctl,APP可以使用各种ioctl跟驱动程序交互:可以传数据给驱动程序,也可以从驱动程序中读出数据。

2024-07-12 15:39:03 42

原创 线程(四):清理机制+线程属性设置

函数原型:功能:为当前线程注册一个清理函数(在注销pop之前,也就是push和pop之间,如果退出,就会触发清理动作)参数:@routine: 指向要注册的清理函数@arg : 清理函数的参数函数原型:功能:注销清理函数参数:execute: 是否要强制清理0: 自动清理1: 强制清理。

2024-04-28 14:52:34 410

原创 JSON数据格式讲解与cJSON库的使用

cjson

2024-04-16 17:47:42 1867

原创 设备树反编译

【代码】设备树反编译。

2024-03-01 16:18:59 977

原创 Linux内核模块

Linux提供了一种 需要时可以被动态加载和移除模块本身不被编译入内核映像,从而使内核映像比较精简。模块被加载后,其与其它内核进程没有区别。内核模块的本质:一段隶属于内核的“动态”代码,与其它内核代码是同一个运行实体,共用同一套运行资源,只是存在形式上是独立的。内核模块的运行是在内核空间里的。

2023-12-20 16:54:49 677

原创 Linux系统理解+Linux内核理解

操作系统:向下控制硬件,向下提供接口(是否有mmc内存映射机制,判断是否可以使用操作系统)现代的CPU其内部会区分不同的工作模式,以此来区分不同级别和权限的操作。例如:ARM的八种工作模式- User 非特权模式,一般在执行上层的应用程序时ARM处于该模式- FIQ (快速中断模式)当一个高优先级中断产生后ARM将进入这种模式- IRQ (外部中断模式)当一个低优先级中断产生后ARM将进入这种模式- SVC (超级用户模式)当复位或执行软中断指令swi后ARM将进入这种模式。

2023-12-20 15:38:34 901

原创 Linux---init.d(开机自启动)

第五步:在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完全执行的 /etc/profile /etc/bashrc /root/.bashrc /root/.bash_profile。第三步:启动相应的脚本,执行inittab脚本,并且执行里面的脚本/etc/init.d rc.sysinit rc.d rc.local。第二步:执行init (配置文件/etc/inittab)inittab 会运行inint.d下的rcS,第四步:启动login登录界面 login。,开机时会自动运行该脚本。

2023-12-19 19:45:26 2832

原创 nfs文件挂载文件系统

功能:通过网络把一个操作系统里的文件挂载到另一个操作系统上。即:使用网络将Vmware虚拟机中的Ubuntu-Linux文件系统下的一个目录挂载到开发板文件系统中。

2023-12-19 19:28:32 7688 2

原创 Linux:时间显示(函数介绍)

【代码】Linux:时间显示(函数介绍)

2023-12-14 16:00:26 614

原创 交叉编译---理解+环境配置

想要将交叉编译指令制作为自己的指令,可以将交叉编译的arm-linux-gnueabihf-…但是这种通过指令加上路径的方式只是一种临时配置,当关闭当前终端或者是退出超级用户,或者是切换一次用户,就不能再使用。例:export PATH=$PATH:/opt/arm-gcc-linux-4.9.4-x86_64/bin。该变量下存储了一串字符:这个字符串中用冒号隔开了若干条路径,这些路径下的可执行文件,会被认为是指令。不同的架需要不同的交叉编译工具,根据不同的需求,交叉编译链接工具的版本号使用也不同。

2023-12-14 15:40:42 1049

原创 Linux Framebuffer应用编程

把red、green、blue这三种8位颜色值,根据RGB565的格式,只保留red中的高5位、green中的高6位、blue中的高5位,组合成一个新的16位颜色值。RGB三原色(红、绿、蓝)来表示的,在不同的BPP格式中,用不同的位来分别表示R、G、B,如下图所示。当LCD是16bpp时,要把color变量中的R、G、B抽出来再合并成RGB565格式。如果要使用宏FBIOGET_VSCREENINFO获取屏幕的可变参数,再把新的16位颜色值写入Framebuffer。ioctl的作用非常强大、灵活。

2023-12-03 18:40:32 886

原创 开发板系统烧写 + SecureCRT连接开发板

在重启开发板时有倒计时的数字,在倒计时结束前,关闭后将拨码设置为正常启动模式,重启开发板。串口线连接在OTG,而并不是USB。拨码:根据手册将开发板的拨码从。

2023-11-27 19:47:25 1449

原创 数据库:sqlite3

【代码】数据库:sqlite3。

2023-11-17 15:43:19 657

原创 通信协议TFTP:通过UDP实现数据传输

netascii : 不使用octet : 广泛使用的TFTP传输模式mail : 邮件模式已经过时,不使用。

2023-11-17 15:02:57 484

原创 Linux中相关介绍:main函数参数(argc、argv)+相关函数介绍

参数功能:用于传递命令行参数的参数参 数:@argc:一共有几个参数(包括./test)@argv:指向字符串数组的指针,每个字符串表示一个命令行参数argv[n]:依次向后的参数# include <stdlib.h> 函数原型: int atoi(const char * str);功 能:将字符串转为整数参 数:str:要转换的字符串。返回值:如果成功,则返回相应的整数值;如果发生错误,则返回 0。

2023-11-16 15:00:16 1289

原创 网络编程(二):TCP、UDP函数接口+并发服务器(IO多路复用)selct函数

函数原型:int socket(int domain, int type, int protocol);函数功能:初始化一个套接字函数参数:@domain: 地址族@type : 套接字类型SOCK_STREAM:流式套接字(TCP)SOCK_DGRAM :数据包套接字(UDP)@protocol: 指定所使用协议的编号,一般为0返回值:成功返回socket套接字文件描述符 sockfd,失败返回-1函数原型:功能:- 检查目标集合中描述符的状态(可读性、可写性、异常。

2023-11-15 20:08:13 133

原创 网络编程(一):基础理解 与 重点标注

在建立连接时需要注意以下几点1. TCP或UDP需要使用的函数接口的一些参数类型为sockaddr,不过我们通过对结构体的改进,使用sockaddr_in结构体,填充后,再进行强制类型转换。2. ip地址的填充需要使用 字符串转网络字节序二进制数函数3. 端口号的转换需要使用 十进制数转换为网络字节序二进制数函数4. 注意addr_in结构体中ip地址成员为结构体in_addr,类型与inet_addr函数相同,并且使用inet_addr函数更方便。

2023-11-11 22:25:51 37

原创 线程(三):线程通信:同步(条件变量、无名信号量)+互斥(互斥锁)

sem_t sem;参数:@cond: 条件变量的首地址@mutex: 互斥锁(在调用pthread_cond_wait函数之前要定义并初始化一个互斥锁)//1. 获取互斥锁//2. 调用pthread_cond_wait//2.1 将当前的线程放入队列里//2.2 解锁//2.3 在队列里休眠//2.4 重新获取锁//从队列删除//3. 执行代码//4. 解锁返回值:成功返回0 失败错误码。

2023-11-07 10:38:04 218

原创 线程(二):线程的使用(-lpthread)+创建+退出+回收

线程使用第三方库函数,在使用线程的函数时首先要安装线程函数相关的man手册。//man手册可以使用进程命令ps -ajx 查看多线程状态当进程运行状态中含有 l 的时候说明是多线程状态,l是进程的附加状态。

2023-11-06 20:20:17 1022

原创 线程(一):线程详细理解

本质区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。包含关系:一个进程至少有一个线程,线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。资源开销:每个进程都有独立的地址空间,进程之间的切换会有较大的开销;线程可以看做轻量级的进程,同一个进程内的线程共享进程的地址空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。

2023-11-06 16:50:14 171

原创 进程(五)(理解):IPC进程间通信:消息队列

【代码】进程(五)(理解):IPC进程间通信:消息队列。

2023-11-06 15:35:00 160

原创 进程(四)(理解):传统进程间通信:管道

无名管道的通讯原理是在内核中完成的,无名管道只能在亲缘进程间通信。无名管道的大小为64K,它是一个半双工的通信方式,无名管道在使用的时候不能使用 lseek 函数(因为原理和队列相似,先进先出)。可以在任意进程间通信,有名管道会在用户空间创建一个管道文件,管道文件是在内存存放的。如果想要通过有名管道实现进程间通信,就在当前进程中打开一个管道文件,产生一个文件描述符 fd 并对其操作即可。

2023-11-06 15:24:49 148

原创 进程(三)(重点):共享内存(使用最多,效率最高)+信号量(信号灯)

2023-11-02 17:11:47 375

原创 进程(二):进程间通信(简单描述)

根据不同的需求,我们会选择不同的通信方式实现。虽然共享内存是效率最高的,使用最多的,不过也存在一些,很简单就可以实现的通信。进程由一个pcb结构体+虚拟内存(数据段、代码段)组成,并且进程间是相互独立的。进程与进程之间的交互,就需要通过通信实现。无名管道(只能在亲缘进程间通信)有名管道(任意进程间通信)

2023-11-01 16:59:49 127

原创 进程(一):进程介绍与相关函数

创建一个进程,操作系统为该进程分配一个task_struct来标识它,同时给它分配4G的虚拟内存空间(3G用户空间,1内核空间),只要进程执行结束,分配给它的资源都会被回收。1(init):1号进程 是 0号进程通过kernel_thread函数创建的,它主要是用来在启动的时候初始化各种硬件,硬件初始化完之后,init进程为孤儿进程回收资源。0(idle):也称为swapper进程,在操作系统启动的时候就已经创建的进程,0号进程是1号进程和2号进程的父进程。//进程组内会有多个进程。

2023-11-01 16:22:17 367

原创 信号机制讲解

信号是Linux系统为了相应某些状况而产生的事件。进程收到信号后采取相应的动作。kill -l可以查看所有信号。

2023-10-30 20:17:39 127

原创 动态库与静态库

所以静态库生成的可执行文件体积较大,但是效率较高,因为不依赖于libxx.a库文件,直接就可以执行可执行文件,更新比较麻烦。2、可执行程序编译时,不会连接到动态库,而是在程序执行的时候,将动态库加载到内存中,内存中最多只有一份,可执行程序比较小。如果用户想要使用这个库,就要将自己的库文件和.c文件编译生成一个可执行文件(将库函数放在可执行文件中),动态库生成的可执行文件体积较小,效率较低(只是相对于静态库)其实效率还是挺高的。将.c文件删除,不删除main.c文件,根据使用方式,选择对动态库的移动。

2023-10-30 19:33:14 300

原创 Linux的使用(二):vim编辑器+共享文件夹

在路径 /etc/vim/ 下编辑 vimrc ,在文件末尾#endif下面 ESC+i 进入输入模式输入以下内容set nu //显示行号set ts=4 //设置缩进为4set autoindent //启动自动缩进gg=G 自动对齐(命令模式下,不用输入冒号)在命令模式下;按ctrl+v 进入可视模式,配合上下左右按键,可以选中需要操作的内容,再配合y(复制),d(删除)进行相关的操作vim -o 上下模式打开两个文件(ctrl+w 来转换控制窗口)

2023-10-29 22:18:26 219

原创 gcc与make讲解

make其实也是一个编译工具,只不过它在编译程序时,要依赖一个叫作Makefile的文件:生成一个可执行文件所依赖的所有C源文件都在这个Makefile文件中指定。在Makefile中,通过定义一个个规则,来描述各个要生成的目标文件所依赖的源文件及编译命令,最后链接器将这些目标文件组装在一起,生成可执行文件。

2023-10-29 16:46:42 14

原创 IO介绍(三):文件操作:文件IO

POSIX(Portable Operating System Interface,可移植操作系统接口规范,目的是提高UNIX环境下程序的可移植性。

2023-10-26 16:36:33 163

原创 STM32--bit-band 位带操作

【代码】STM32--bit-band 位带操作。

2023-10-26 14:56:46 178

原创 IO介绍(二):文件操作:标准IO

标准I/O指的是ANSI C中定义的用于I/O操作的一系列函数。只要包含C库(stdio.h)就可以调用标准I/O。由于标准I/O封装了缓冲区,使得在读写文件的时候减少了系统调用的次数,提高了效率。具体的可以IO介绍(一)

2023-10-25 19:45:21 189

原创 IO介绍(一):文件操作:清楚理解标准IO与文件IO

文件(File)是一个具有符号名字的一组相关联元素的有序序列。

2023-10-25 14:12:52 274

keil创建新项目keil创建新项目

keil创建新项目

2023-10-12

W25Qxx 外部 FLASH(掉电保存)手册

W25Qxx 外部 FLASH(掉电保存)手册

2023-10-08

多级菜单+RTC模块时钟显示

多级菜单+RTC模块时钟显示

2023-09-28

HC-05蓝牙模块,手机软件蓝牙调试助手、详细AT指令集、使用手册

HC-05蓝牙模块,手机软件蓝牙调试助手、详细AT指令集、使用手册。

2023-09-14

lcd显示屏,示例代码,取模软件与取模教程

lcd显示屏,示例代码,取模软件与取模教程

2023-09-14

1keil创建新项目压缩包

1keil创建新项目

2023-09-12

VL53L0X+stm32激光测距

包含:工程源码、库源码、中文手册、ppt讲解

2023-09-11

0.96 寸 OLED 显示屏

包含取模软件,可以取模的图片,,库文件,工程源码,相关手册介绍

2023-09-11

空空如也

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

TA关注的人

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