- 博客(62)
- 收藏
- 关注
原创 Linux4-Linux驱动程序
5.copy drivers/char/first driver.ko ~/nfs/rootfs//在内核中找到这个.ko文件。所有调用register_chrdev之前必须申明内联函数(inline)insmod first_driver.ko//执行。nmmod first_driver //删除。生成一个 first_driver.ko。构造和析构两个过程的顺序是逆序的。按一个字节 两个 四个字节读。2.为何如此麻烦的编译?一、Linux驱动程序。Makefile好管理。内联/函数放在头文件里。
2025-03-30 21:40:05
242
原创 Linux内核3-Uboot移植
因为无论使用那种方法都存在内存不够的情况,必须将uboot,完整的从nandflash中拷贝到sram中,sram足够大。1.由于程序不能存放RAM中,只能提前存放在ROM中,对于Mini2440来说,就只能是nor-flash或者是nand-flash中了。5.copy drivers/char/first driver.ko ~/nfs/rootfs//在内核中找到这个.ko文件。insmod first_driver.ko//执行。1.创建一个ctags //ctags -R ./
2025-03-28 23:35:35
329
原创 Linux内核2-TFTP与NFS环境搭建
12. 需要重新进入uboot配置bootargs环境变量,设定内核启动后,文件系统采用nfs挂载方式实现。uboot启动后倒数计时完毕执行bootcmd命令,再通过bootargs传入内核参数,让内核找到文件系。Uboot:引导程序 初始化硬件设备,初始化c语言环境,为内核加载做准备。4.将lib目录下的内容覆盖掉~/nfs/rootfs/lib下。bootcmd uboot启动后要执行的第一条命令。bootcmd uboot启动后要执行的第一条命令。bootdelay uboot倒计时时间。
2025-03-28 19:12:10
399
原创 Linux内核1-环境
4.cp [.b, .w, .l ] source target count //从source拷贝count个单元到target(内存拷贝命令)1. md [.b, .w, .l] address [# of objects]//查看寄存器状态、查看ram的值。2.nm [.b,.w,.l] address//内存修改命令(地址不自增)3.mm [.b,.w,.l] address//内存修改命令(地址自增)如:setenv myarg ‘hello 2440’如: setenv myarg ‘’
2025-03-28 11:39:46
266
原创 stm32-IIC
当发送第九个bit时,主机会无条件发送一个高电平,从机给一个应答将其拉低,称之为ACK。sda置高不允许在SCK置高时置高,所以,当sda发送数据时,SCK必须保持稳定。主机让sck发出标准方波(高位先行)时钟线速率(100Kbps-400Kbps)i^2c,iiCBus,集成电路总线,同步串行半双工通信总线方式。通信协议:两个设备,无论在SDA还是、scl,未通信都是高电平。上拉电阻:保证双方都在释放总线时,都保持高电平。通信时,sda变低信号,意味着开始通信,停止位,双方同时置高,发送结束。
2025-03-24 20:11:23
457
原创 stm32-ADC
800分辨率的十位ADC,基准电压5v,则测量电压为多少?模拟信号:物理当中一切可感受到的都是模拟信号(连续的)位数也称之为分辨率,几位是2的几次方。过程:比较器有几个就叫几位adc,位数越多,越准确;1.ADC:模拟到数字的转换器。数字信号:二进制数(离散的)1.3a->c的过程。1.3.1量化的原理。
2025-03-22 16:53:40
370
原创 stm32-定时器
二、PWM定时器控制寄存器。PLL锁相环:作用是倍频。prescale:降频。2440芯片定时器配置。单稳态:执行一次后关闭。
2025-03-21 20:11:01
250
原创 嵌入式4-Modbus
用于在不同设备(如传感器、PLC、变频器、仪表等)之间交换数据。它支持串行通信(如 RS232、RS485)和以太网通信(Modbus TCP),具有简单、开放、易实现的特点。
2025-03-20 22:14:34
285
原创 STM32-汇编2、外设
reserved保留;^符号的意思是将spsr的值装入cpsr,保存用户模式下的寄存器到栈。网络编号 发光二极管 限流电阻。S3c2440A中的中断控制器接受来自60个中断源的请求。1.SRCRND:源中断模式(用来查的,发生中断加一)2.nop 空指令,什么不干,占四字节。5.INTOFFSET中断偏移寄存器。3.INTMSK中断屏蔽寄存器。4.INTPND中断挂起寄存器。2.INTPNO:中断模式。
2025-03-20 17:50:50
257
原创 STM32-汇编
V:该位是针对有符号数的操作,会在下面两种情形变为1,两个最高有效位均为0的数相加,得到的结果最高有效位为1;两个最高有效位均为1的数相加,得到的结果最高有效位为0;准确的说这里所指的是12位立即数imm12。汇编指令的s后缀,几乎所有的汇编指令都可以在指令后面加上s后缀,s后缀的含义是在指令执行过程中会更新cpsr寄存器的N,V,C,Z位。把某个数展开成2进制,这个数的最高位1至最低位1之间的二进制数序列的位数不能超过8位;如果某个数的数值范围是0~0xFF之间,那么这个数一定是立即数;
2025-03-19 17:22:36
1128
原创 STM32-ARM
Monitor:是为了安全而扩展出的用于执行安全监控代码的模式:也是一种特权模式。IRQ:当一个低优先级(normal)中断产生时将会进入这种模式。Supervisor:当复位或软中断指令执行时将会进入这种模式。FIQ:当一个高优先级(fast)中断产生时将会进入这种模式。System:使用和User模式相同寄存器集的特权模式。User:非特权模式,大部分任务执行在这种模式。Undef:当执行未定义指令时会进入这种模式。Abort:当存取异常时将会进入这种模式。ARM采用的是32位架构。
2025-03-19 09:16:59
337
原创 嵌入式2-按键
当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。2.定时器中有一个counter的寄存器,占2个字节(unsigned short)65535。函数的指针的数组,每一个中断向量都由系统创建。请示CPU中断的请求源称为中断源。二、STC89Cxx中文参考手册。3.考察当前中断请求的中断优先级。2.1.flash 闪存。1.中断源发出中断请求。5.执行中断服务函数。
2025-03-14 22:09:36
317
原创 嵌入式1- 51单片机
单片机通电后,51单片机的40个引脚均为高电平(即值均为1),其中引脚39~32为寄存器P0的八个引脚P00~P07,负责控制数码管a,b,c,d,e,f,g,dp的亮灭。单片机通电后,51单片机的40个引脚均为高电平(即值均为1),其中引脚21~28为寄存器P2的八个引脚P20~P27,负责控制LED模块的8个发光二极管。先第0位数码管从0跳变到9,再第1位数码管从0跳变到9,直到第3位数码管跳变完再循环至第0位数管。另外引脚1~4为寄存器P1的前四个引脚P10~P13,负责控制4位数码管模块的亮灭。
2025-03-13 21:14:41
268
原创 Linux16-数据库、HTML
create table 表名(列名1 数据类型, 列名2 数据类型, ....);select * from 表名 where 列名 like "%梅";select * from 表名 where 列名 关系运算符 值;select * from 表名 order by 列名 DESC;变量、数组、链表-------------》内存 :程序运行结束、掉电数据丢失。select 列名1,列名2 from 表名;column_value:保存找到的每一列的元素的值。select * from 表名;
2025-03-08 14:31:59
733
原创 Linux15-epoll、数据库
event:事件的结构体,在op= EPOLL_CTL_ADD或者 EPOLL_CTL_MOD时使用,2.文件描述符集尽在应用层创建,需要实现应用层和内核层的反复拷贝。2.文件描述符集合创建在内核,避免了应用层和内核层的数据拷贝。3.直接向应用层返回到达的io事件的集合,不需要进行遍历查找。1.创建文件描述符集合了 epoll_create();event:保存epoll_wait监测到的到达事件的结果。2.将关注的文件描述符加入到集合epoll_ctl();EPOLL_CTL_ADD:向集合添加。
2025-03-07 14:05:57
639
原创 Linux14-io多路复用
UDP:单循环服务器,服务器同一时刻只能响应一个客户端的请求TCP:并发服务器,服务器同一时刻只能响应多个客户端的请求。
2025-03-06 17:14:11
331
原创 Linux13-TCP\HTTP
1.TCP在接受数据时,多包数据粘在一起2.原因:2.1TCP发送数据时,会根据缓冲区数据的情况进行重新组包2.2TCP接收方,没有及时读走缓冲区数据,导致缓冲区大量数据缓存。3.如何解决3.1发指定大小字节将要发数据,封装在结构体里int id;float tmp;xxx缺点:发送端与接收端体系不同,32位与64位对齐方式的不同造成数据丢失;所有要在指定的相同平台使用,注意结构体对齐问题。3.2发送具有指定分隔符的数据miss you\n3.3封装自定义数据帧。
2025-03-04 23:03:28
1131
原创 Linux12-UDP\TCP
accept()(通信套接字、接收和服务端第一个完成三次握手的客户端,并产生一个通讯套接字)四次挥手:TCP断开连接时,需要进行四次挥手,从而确保通信双方都已收发数据结束。三次握手:TCP建立连接时,需要进行三次握手,确保收发数据前,双方都已准备就绪。listen()(监听:要和服务端建立三次握手的客户端)socket()//SOCK_STREAM流式套接字。1.画面传输 VNC 直播:要求实时性高、允许数据丢失、socket()(监听套接字)面向数据流(流式套接字)成功:实际收到的字节数。
2025-03-03 23:12:53
698
原创 Linux11-网络编程·套接字
不同主机,进程间通信1.达到不同主机之间的困难:解决主机之间的硬件层面的互联互通解决主机之间的软件层面的互联互通广域网:进行大范围网络数据交换IP地址:区分不同主机 唯一的(软件地址)MAC地址:硬件地址端口号:区分同一主机上的不同进程。
2025-03-03 00:23:09
676
原创 Linux10-共享队列
size:共享内存大小(向上取整到页大小的整数倍)4096 PAGE_SIZE。shmaddr:映射的用户首地址(NULL让操作系统自己去找,返回空间首地址)shmaddr:映射的用户首地址(NULL让操作系统自己去找,返回空间首地址)shmflg:对对象内存的操作 IPC_CREAT | 0664。msgflg:标志位 IPC_CREAT |0664。msgp:要存放接收的消息的结构体首地址。msgp:要发送的消息的结构体首地址。cmd:IPC_RMID:删除。成功:映射的用户空间首地址。
2025-02-27 21:21:28
623
原创 mplayer的控制软件
seek<value>[type] 定位电影的某些地方 例:<value>% 或者 <value>秒。mplayer -slave -quiet 1.flv 打开控制1.flv视频。播放模式设置:顺序播放、单曲播放、随机播放。3.需要以多文件方式实现,用Makefile进行多文件管理。播放定位 请输入定位位置:50。2.对mplayer的控制应该具备以下功能。speed_set 2 2倍速播放。1.如何在程序中播放mplayer。mplayer:开源的播放软件。pause 暂停/播放。
2025-02-27 16:35:03
216
原创 Linux9-进程间通信-管道、信号
2.Ctrl+C 3.Ctrl+\ 9.强制结束11.段错误 13.管道破裂 14.为进程定时,到达时间进程结束 17.子进程结束发给父进程 18.让停止态继续执行 19,让运行态停止 20.让进程暂停转后台Ctrl+Z。mkfifo fifo(名为fifo的管道文件) int mkfifo(const char *pathname, mode_t mode);handler:typede void (* sighandler_t handler)(捕获方式处理,自定义)
2025-02-25 18:05:12
650
原创 Linux8-互斥锁、信号量
(pipefd[0],管道的读端,pipefd[1]管道的写端)4.解锁 int pthread_mutex_unlock。3.加锁 int pthread_mutex_lock。5.销毁锁 int pthread_mutex_destroy。1.创建 pthreaad_mutex_t mutex。临界资源:多个线程可以同时操作的资源空间(全局变量、共享内存)实现线程间同步(使用同步方式访问临界资源,可以达到互斥的效果)
2025-02-24 18:39:37
704
原创 Linux7-线程
这是一个字符串参数,表示要切换到的目标目录的路径。:在成功改变当前工作目录时,chdir()函数通常返回0:如果因为某些原因(如路径不存在、权限不足等)无法改变目录,chdir()函数将返回一个错误码(在C语言中,如-1)
2025-02-22 17:25:34
1040
原创 轻量级命令解释器
知识点:*命令有三类:外置命令、内置命令(cd)、别名。*getcwd()获得当前工作目录。chdir()改变当前工作路径。2.获取终端用户输入命令。5.退出当前exit。
2025-02-22 10:07:42
243
原创 Linux6-进程消亡、
2.让子进程成为一个孤儿进程,让孤儿进程会被系统中的进程收养,由系统进程负责回收。孤儿进程:父进程先消亡,由该父进程产生的子进程变为孤儿进程被系统进程收养。<-1回收指定进程组内的任意子进程(-100.等待GID=100的进程组中的任意子进程)exclp("ls","ls","-l",NULL);僵尸进程:进程已结束,但其资源空间未被其父进程回收。*使用非阻塞方式回收,需要加轮询方式可以让父进程执行自己的任务。
2025-02-21 17:41:05
854
原创 linux5-多任务--进程fork()
cpu在调度时常用的调度算法:时间片轮转调度算法、高优先级优先算法、先来先服务后来后执行、短作业优先进程的状态:三态图linux进程七态图1.运行态(用户运行态、内核运行态) R正在执行,且被CPU任务调度所执行的进程2.就绪态 R正在执行,没有CPU任务调度执行的进程(只缺少cpu)3.可唤醒等待态 S也称为睡眠态,阻塞等待资源的进程4.不可唤醒等待态 D不想被CPU任务调度所打断的进程任务可以设置为不可唤醒等待态5.暂停态 T被暂停执行的进程6.僵尸态Z。
2025-02-20 17:15:19
571
原创 Linux4-目录io
成功:返回所读文件具体内容的结构体指针(地址)name:需要打开的目录名称。dirp:指向目录流的指针。dirp:指向目录流的指针。功能:打开一个目录,并获得一个目录流指针。chomd +/-r 目录名。chomd +/-x 目录名。成功:返回目录流指针。chomd +/-w 目录名。3.关闭目录 closedir。1.打开目录 opendir。功能:读取目录中一个文件信息。chomd 八进制 目录名。pwd获得当前目录绝对路径。功能:获取当前工作路径。功能:创建一个文件夹。
2025-02-18 14:09:33
327
原创 工程日志模块(调试)
2025-2-17 17:38:45][ERROR]:系统xxx模块初始化失败![2025-2-17 17:38:45][WARNING]:xxx队列为空![2025-2-17 17:48:45][INFO]:xxx设备初始化成功![2025-2-17 17:48:45][ERROR]:xxx文件打开失败!write_log(ERROR,"系统xxx模块初始化失败!日志文件名称按以下格式命名:Log20250217.log。1.按照以下格式记录系统运行过程中的日志信息。//创建一个日志文件。
2025-02-17 20:02:29
270
原创 Linux3-文件io、时间有关函数
标准io (FILE *) 文件io。成功:文件描述符(操作系统为已打开文件分配的标识符;一个小的非负的整形数据,代表一个已打开的文件)1.当scanf输入10\n直接结束程序,因为scanf接收了10,fgets(接收了\n结束程序),O_WRONLY 只写。O_TRUNC 清空文件。文件描述符泄漏:打开的文件使用完时,未及时。2.块设备文件、字符设备文件、目录文件、普通文件、套接字文件、管道文件均可使用文件io。所接收的\n利用buff[strlen(buff)-1]=0;
2025-02-17 17:35:07
491
原创 Linux2-标准io、缓冲区
成功:返回当前文件位置指针相对于文件开头的偏移量(以长整型。size:要写入的每个数据项的大小(以字节为单位)size:要写入的每个数据项的大小(以字节为单位)功能:函数从指定的内存位置开始,将一块数据写入到指定的文件流中。ptr:指向要写入文件的数据块的指针。ptr:指向要写入文件的数据块的指针。成功:返回成功写入的数据项的数量。成功:返回实际读取的数据项的数量。功能:函数从指定的文件流中读取数据块到内存中。功能:函数从指定的文件流中读取数据块到内存中。功能:函数从指定的文件流中读取数据块到内存中。
2025-02-15 17:25:01
758
原创 Linux1-标准io
char *fgets(char * s,int size FILE * stream)//输入什么输出什么包括换行(换行停止)fgets:char *fgets(char * s,int size FILE * stream) 包括换行。标准IO:将一个打开的文件和一个文件流指针(FILE*)关联,后面操作文件,皆面向文件流指针。stderr --> 标准出错流 -->显示屏(终端)stdout --> 标准输出流 -->显示屏(终端)stdin --> 标准输入流 -->键盘。
2025-02-14 17:37:11
905
原创 makefile
4)链接: gcctest.o-otest将目标文件与库文件(静态库或动态库)链接得到可执行文件。3)汇编: gcc-ctest.s-otesto将汇编指令代码转化为目标文件。gcc编译:xxx.c------>二进制指令:xxx.o------>可执行程序a.out。1)预处理: gcc-Etest.c-otesti对预编译指令都做相应的处理。2)编译: gcc-Stesti-otest.s编译成汇编指令代码。时间戳:根据时间戳,可以只编译发生修改后的文件II。
2025-02-13 18:58:50
176
原创 数据结构6-二叉树、时间复杂度
完全二叉树:在满二叉树的前提下,增加数据只能从上到下、从左至右;其他节点只有一个前驱节点,但可以有多个后继节点。满二叉树:在不增加层数的前提下,无法再增加一个结点。满二叉树->完全二叉树。满二叉树第K层结点个数:2^(K-1)结点的度:当前结点的后继结点个数。分支结点(非终端结点):有前驱结点,有后继结点。K层满二叉树结点总个数:2^K-1。叶子结点(终端结点):有前驱结点、无后继结点。层遍历:从上到下,从左到右,逐层遍历。广度:树中最大结点的度就是树的广度。二叉树:树的度为二,且左右子树不可交换位置。
2025-02-13 13:42:44
459
原创 数据结构5-队列、哈希散列
1.定义:将要存储的数据的关键字和数据的存储位置之间建立关系,存储数据时,按照函数关系寻找存储位置;栈(Stack)和队列(Queue)是两种基本的数据结构,它们在数据存取的方式上有显著的区别。查看队列尾(Rear/Back):返回队列尾部的元素(在某些实现中可能不提供此操作)。缓冲区管理:在数据传输中,队列用于临时存储数据,例如打印队列、网络数据包的排队等。广度优先搜索(BFS):在图的遍历中,队列常用于实现广度优先搜索。存取顺序:栈是后进先出(LIFO),队列是先进先出(FIFO)。
2025-02-11 20:31:37
684
原创 数据结构4-栈、4G的虚拟内存空间
由于主函数中的sum与被调函数的sum在内存中保存在不同地方,所有值传递是错误的法,因此需要采用指针传递地址去修改值。栈:只允许从一端进行数据的插入和删除的线性结构。后缀表达式(逆波兰表达式):运算符在两个操作数之后1 2 +前缀表达式(波兰表达式):运算符在两个操作数之前+ 1 2。满栈入栈操作:先移动栈顶再入栈数据。出参:将函数执行获得的某个结果传递给被调函数。顺序栈:满赠栈、空增栈、满减栈、空减栈。4.栈的应用:进行四则运算、回文。满栈、空栈:栈顶是否存有元素。链式栈:以链表的形式实现。
2025-02-10 18:45:26
195
原创 数据结构3-gdb、内核链表
n (继续执行下一行代码)b 7 (在第七行加断点)-g:允许使用 gdb进行调试。不同点:不再将数据存放在链表结点中,而是将结点作为结构体的成员存在。containerof:根据结构体成员的地址,获取结构体首地址。普通链表:一旦链表中的存储类型确定,这种链表只能保存这一种数据类型的数据。offsetof:获取结构体某格成员到结构体开头的偏移量。优势:链表作为存储数据的载体,可以存储任意类型的类型。内核链表:本质是一个双向有头的循环链表。a:gdb定位段错误。
2025-02-09 18:37:57
307
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人