自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2024-04-28 14:52:34 124

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

cjson

2024-04-16 17:47:42 1142

原创 设备树反编译

【代码】设备树反编译。

2024-03-01 16:18:59 312

原创 Linux内核模块

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

2023-12-20 16:54:49 431

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

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

2023-12-20 15:38:34 612

原创 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 564

原创 nfs文件挂载文件系统

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

2023-12-19 19:28:32 2717

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

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

2023-12-14 16:00:26 467

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

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

2023-12-14 15:40:42 434

原创 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 583

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

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

2023-11-27 19:47:25 330

原创 数据库:sqlite3

【代码】数据库:sqlite3。

2023-11-17 15:43:19 81

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

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

2023-11-17 15:02:57 118

原创 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 266

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

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 71

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

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

2023-11-06 20:20:17 369

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

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

2023-11-06 16:50:14 38

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

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

2023-11-06 15:35:00 35

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

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

2023-11-06 15:24:49 33

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

2023-11-02 17:11:47 68

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

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

2023-11-01 16:59:49 34

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

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

2023-11-01 16:22:17 53

原创 信号机制讲解

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

2023-10-30 20:17:39 26

原创 动态库与静态库

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

2023-10-30 19:33:14 51

原创 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 24

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

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

2023-10-26 16:36:33 44

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

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

2023-10-26 14:56:46 42

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

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

2023-10-25 19:45:21 31

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

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

2023-10-25 14:12:52 38

原创 Linux使用(一):常用命令+文件属性介绍

参数可以组合使用- 在复制、粘贴、移动等很多指令中,对多个文件的描述可以使用通配符*来操作- Tab按键: 自动补全文件内已有的名字- su :进入root- exit :退出root同时可以使用 ls -l 命令来查看- 普通文件 指ASCII文本文件、二进制文件以及硬链接文件d 目录文件 包含若干文件或子目录l 符号链接 只保留所指向文件的地址而非文件本身p 管道文件 用于进程间通信c 字符设备 原始的I/O设备文件,每次操作仅操作1个字符(例如键盘)

2023-10-24 19:10:58 17

原创 Linux相关介绍:Linux版本与目录结构

Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

2023-10-24 14:15:33 23

原创 IIC通讯:IO口模拟时序

IIC是(串行、半双工(一条数据线)、同步)的通信。

2023-10-20 14:22:58 166

原创 计算机体系结构与CPU工作原理

1)Cortex-A:用于高性能应用,主要支持分页内存管理单元MMU,linux需要MMU的支持才能运行。2)Cortex-R:侧重于实时性应用,如汽车系统。3)Cortex-M:侧重于微控制器,常用的STM32就是此内核。

2023-10-12 20:29:08 80

原创 PID参数理解

PID算法是一种负反馈体调节。PID,就是“比例(proportional)、积分(integral)、微分(derivative)”,是一种很常见的控制算法。P,I,D是三种不同的调节作用,既可以单独使用(P,I,D),也可以两个两个用(PI,PD),也可以三个一起用(PID)。PID控制器的三个最基本的参数:kP,kI,kD。

2023-10-12 11:07:57 426

原创 STM32 + SPI + W25Qxx 外部 FLASH(掉电保存)

W25Q16 -------------16M比特 (bit) 2M字节(byte)W25Q32 --------------32M比特 (bit) 4M字节(byte)W25Q64 --------------64M比特 (bit) 8M字节(byte)W25Q128-------------128M比特 (bit) /16M字节(byte)

2023-10-08 15:48:26 1620 3

原创 通讯三:SPI通信

SPI主设备和从设备都有一个。

2023-10-06 11:03:59 74

原创 多级菜单显示

实现,不论方法怎么样,

2023-09-28 11:20:32 172

原创 STM32---WIFI模块ESP8266

模块连接时基于串口方式连接,其模块与电脑(服务器)之间数据的发送与接收也是基于串口。1、对串口的配置。串口初始化、串口中断接收数据,串口发送函数封装(模块发送数据)2、AT指令的发送,并发送AT指令时发送相关的数据:熟练运用spprintf()函数。

2023-09-25 19:40:08 6114 3

原创 RS485+ModBus-RTU协议

RS485:串行、半双工。Modbus是一种串行通信协议。Modbus是一种一主一从的一对一通信方式(主机发一帧,从机回一帧的形式),当然也一主多从,但实际也是一对一通信,同一时刻只能有一个从机进行响应。如果需要和多个从机同时通信,这里也支持使用广播,即主机发送指令,所有从机接收指令并执行,但不进行应答。当进行一主多从通信时,主机通过从机ID号来区分要通信的从机设备。从机ID范围为1~ 247,0为广播地址,248~255为用户自定义地址。目前总共有4种通信形式,RTU、ASCII、TCP、Plus。

2023-09-22 16:52:30 2700 3

原创 IIC驱动AT24C02(EEPROM)读写操作

总容量是256(2K/8)个字节。接口:IIC1、EEPROM由8位表示为存储地址2、设备号+读写位其中最低位是读写位,0表示读,1表示写高7位表示设备地址(IIC通讯使用)下面图中的设备地址只是占用了4位,A0-A2默认为0。因此设备地址为1010(二进制)3、内存地址根据EEPROM的型号不同,其中设备地址占的位数有所不同,有的存储的地址单元超过8位。例如AT24C04有512个地址,需要9位表示。24C08有1024个地址,需要10位表示。为解决这个问题,

2023-09-22 15:07:08 1396

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

0.96 寸 OLED 显示屏

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

2023-09-11

VL53L0X+stm32激光测距

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

2023-09-11

空空如也

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

TA关注的人

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