- 博客(65)
- 收藏
- 关注
原创 线程(四):清理机制+线程属性设置
函数原型:功能:为当前线程注册一个清理函数(在注销pop之前,也就是push和pop之间,如果退出,就会触发清理动作)参数:@routine: 指向要注册的清理函数@arg : 清理函数的参数函数原型:功能:注销清理函数参数:execute: 是否要强制清理0: 自动清理1: 强制清理。
2024-04-28 14:52:34
266
原创 Linux内核模块
Linux提供了一种 需要时可以被动态加载和移除模块本身不被编译入内核映像,从而使内核映像比较精简。模块被加载后,其与其它内核进程没有区别。内核模块的本质:一段隶属于内核的“动态”代码,与其它内核代码是同一个运行实体,共用同一套运行资源,只是存在形式上是独立的。内核模块的运行是在内核空间里的。
2023-12-20 16:54:49
603
原创 Linux系统理解+Linux内核理解
操作系统:向下控制硬件,向下提供接口(是否有mmc内存映射机制,判断是否可以使用操作系统)现代的CPU其内部会区分不同的工作模式,以此来区分不同级别和权限的操作。例如:ARM的八种工作模式- User 非特权模式,一般在执行上层的应用程序时ARM处于该模式- FIQ (快速中断模式)当一个高优先级中断产生后ARM将进入这种模式- IRQ (外部中断模式)当一个低优先级中断产生后ARM将进入这种模式- SVC (超级用户模式)当复位或执行软中断指令swi后ARM将进入这种模式。
2023-12-20 15:38:34
782
原创 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
2420
原创 nfs文件挂载文件系统
功能:通过网络把一个操作系统里的文件挂载到另一个操作系统上。即:使用网络将Vmware虚拟机中的Ubuntu-Linux文件系统下的一个目录挂载到开发板文件系统中。
2023-12-19 19:28:32
6921
2
原创 交叉编译---理解+环境配置
想要将交叉编译指令制作为自己的指令,可以将交叉编译的arm-linux-gnueabihf-…但是这种通过指令加上路径的方式只是一种临时配置,当关闭当前终端或者是退出超级用户,或者是切换一次用户,就不能再使用。例:export PATH=$PATH:/opt/arm-gcc-linux-4.9.4-x86_64/bin。该变量下存储了一串字符:这个字符串中用冒号隔开了若干条路径,这些路径下的可执行文件,会被认为是指令。不同的架需要不同的交叉编译工具,根据不同的需求,交叉编译链接工具的版本号使用也不同。
2023-12-14 15:40:42
804
原创 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
699
原创 开发板系统烧写 + SecureCRT连接开发板
在重启开发板时有倒计时的数字,在倒计时结束前,关闭后将拨码设置为正常启动模式,重启开发板。串口线连接在OTG,而并不是USB。拨码:根据手册将开发板的拨码从。
2023-11-27 19:47:25
1057
原创 通信协议TFTP:通过UDP实现数据传输
netascii : 不使用octet : 广泛使用的TFTP传输模式mail : 邮件模式已经过时,不使用。
2023-11-17 15:02:57
305
原创 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
1026
原创 线程(三):线程通信:同步(条件变量、无名信号量)+互斥(互斥锁)
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
160
原创 线程(二):线程的使用(-lpthread)+创建+退出+回收
线程使用第三方库函数,在使用线程的函数时首先要安装线程函数相关的man手册。//man手册可以使用进程命令ps -ajx 查看多线程状态当进程运行状态中含有 l 的时候说明是多线程状态,l是进程的附加状态。
2023-11-06 20:20:17
838
原创 线程(一):线程详细理解
本质区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。包含关系:一个进程至少有一个线程,线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。资源开销:每个进程都有独立的地址空间,进程之间的切换会有较大的开销;线程可以看做轻量级的进程,同一个进程内的线程共享进程的地址空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。
2023-11-06 16:50:14
99
原创 进程(四)(理解):传统进程间通信:管道
无名管道的通讯原理是在内核中完成的,无名管道只能在亲缘进程间通信。无名管道的大小为64K,它是一个半双工的通信方式,无名管道在使用的时候不能使用 lseek 函数(因为原理和队列相似,先进先出)。可以在任意进程间通信,有名管道会在用户空间创建一个管道文件,管道文件是在内存存放的。如果想要通过有名管道实现进程间通信,就在当前进程中打开一个管道文件,产生一个文件描述符 fd 并对其操作即可。
2023-11-06 15:24:49
84
原创 进程(二):进程间通信(简单描述)
根据不同的需求,我们会选择不同的通信方式实现。虽然共享内存是效率最高的,使用最多的,不过也存在一些,很简单就可以实现的通信。进程由一个pcb结构体+虚拟内存(数据段、代码段)组成,并且进程间是相互独立的。进程与进程之间的交互,就需要通过通信实现。无名管道(只能在亲缘进程间通信)有名管道(任意进程间通信)
2023-11-01 16:59:49
67
原创 进程(一):进程介绍与相关函数
创建一个进程,操作系统为该进程分配一个task_struct来标识它,同时给它分配4G的虚拟内存空间(3G用户空间,1内核空间),只要进程执行结束,分配给它的资源都会被回收。1(init):1号进程 是 0号进程通过kernel_thread函数创建的,它主要是用来在启动的时候初始化各种硬件,硬件初始化完之后,init进程为孤儿进程回收资源。0(idle):也称为swapper进程,在操作系统启动的时候就已经创建的进程,0号进程是1号进程和2号进程的父进程。//进程组内会有多个进程。
2023-11-01 16:22:17
234
原创 动态库与静态库
所以静态库生成的可执行文件体积较大,但是效率较高,因为不依赖于libxx.a库文件,直接就可以执行可执行文件,更新比较麻烦。2、可执行程序编译时,不会连接到动态库,而是在程序执行的时候,将动态库加载到内存中,内存中最多只有一份,可执行程序比较小。如果用户想要使用这个库,就要将自己的库文件和.c文件编译生成一个可执行文件(将库函数放在可执行文件中),动态库生成的可执行文件体积较小,效率较低(只是相对于静态库)其实效率还是挺高的。将.c文件删除,不删除main.c文件,根据使用方式,选择对动态库的移动。
2023-10-30 19:33:14
168
原创 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
127
原创 IO介绍(三):文件操作:文件IO
POSIX(Portable Operating System Interface,可移植操作系统接口规范,目的是提高UNIX环境下程序的可移植性。
2023-10-26 16:36:33
90
原创 IO介绍(二):文件操作:标准IO
标准I/O指的是ANSI C中定义的用于I/O操作的一系列函数。只要包含C库(stdio.h)就可以调用标准I/O。由于标准I/O封装了缓冲区,使得在读写文件的时候减少了系统调用的次数,提高了效率。具体的可以IO介绍(一)
2023-10-25 19:45:21
118
原创 Linux使用(一):常用命令+文件属性介绍
参数可以组合使用- 在复制、粘贴、移动等很多指令中,对多个文件的描述可以使用通配符*来操作- Tab按键: 自动补全文件内已有的名字- su :进入root- exit :退出root同时可以使用 ls -l 命令来查看- 普通文件 指ASCII文本文件、二进制文件以及硬链接文件d 目录文件 包含若干文件或子目录l 符号链接 只保留所指向文件的地址而非文件本身p 管道文件 用于进程间通信c 字符设备 原始的I/O设备文件,每次操作仅操作1个字符(例如键盘)
2023-10-24 19:10:58
255
原创 Linux相关介绍:Linux版本与目录结构
Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
2023-10-24 14:15:33
59
原创 计算机体系结构与CPU工作原理
1)Cortex-A:用于高性能应用,主要支持分页内存管理单元MMU,linux需要MMU的支持才能运行。2)Cortex-R:侧重于实时性应用,如汽车系统。3)Cortex-M:侧重于微控制器,常用的STM32就是此内核。
2023-10-12 20:29:08
366
原创 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
1189
原创 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
2933
3
原创 STM32---WIFI模块ESP8266
模块连接时基于串口方式连接,其模块与电脑(服务器)之间数据的发送与接收也是基于串口。1、对串口的配置。串口初始化、串口中断接收数据,串口发送函数封装(模块发送数据)2、AT指令的发送,并发送AT指令时发送相关的数据:熟练运用spprintf()函数。
2023-09-25 19:40:08
11258
6
原创 RS485+ModBus-RTU协议
RS485:串行、半双工。Modbus是一种串行通信协议。Modbus是一种一主一从的一对一通信方式(主机发一帧,从机回一帧的形式),当然也一主多从,但实际也是一对一通信,同一时刻只能有一个从机进行响应。如果需要和多个从机同时通信,这里也支持使用广播,即主机发送指令,所有从机接收指令并执行,但不进行应答。当进行一主多从通信时,主机通过从机ID号来区分要通信的从机设备。从机ID范围为1~ 247,0为广播地址,248~255为用户自定义地址。目前总共有4种通信形式,RTU、ASCII、TCP、Plus。
2023-09-22 16:52:30
8454
7
原创 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
3180
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人