自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 linux通用基础

0:就绪的 fd 总数0:超时-1:出错(errno)定义 fd_setFD_ZERO 清空FD_SET 把需要监听的 fd 加进去调用 select用 FD_ISSET 遍历判断哪个就绪。

2026-06-16 17:18:23 318

原创 Platform总线的驱动编写

of_match_table = of_match_ptr(my_of_match), // 设备树匹配(可选)},

2026-06-15 16:42:51 232

原创 实习日记--驱动编写

* 数据缓冲区 *//* 当前数据长度 *//* 打开次数统计 */

2026-06-15 16:15:21 178

原创 实习日记--SDK相关知识

SDK 的全称是,中文叫。简单来说,你可以把它理解成一个。当你想在某个软件项目里实现一个复杂的功能(比如微信登录、支付、云存储),如果从头自己写,会非常耗时且困难。这时候,你就可以直接“拎”起这个现成的工具箱来用。

2026-06-12 11:49:55 158

原创 实习日记--核心板第一周

了解公司核心板:IDO-EVB3568-V1/IDO-EVB3562-V1对两块核心板的功能外设进行了解,了解各个接口分别是什么。

2026-06-09 17:26:22 239

原创 实习日记--基础内容学习

win+r输入sysdm.cpl,然后在系统属性中选高级,点环境变量,在系统变量里面找到path,选中之后编辑,新建选择我下载的adb.exe的路径,最后点确定。接着win+r输入cmd进入终端,输入adb devices,如果显示.....device,代表连接正常,便可以通过adb shell进入板子系统adb,不是在开发板的 shell 里用的deviceadb shelladb logcatCtrl+Cadb rebootfastbootdeviceofflineunknown。

2026-06-05 10:07:14 248

原创 C++学习--类和对象

1、类是抽象的模板,对象是具体的实例2、一个类可以创建无数个对象,每个对象都拥有类定义的属性和行为,但数据可以不同3、类规定了 “是什么样”,对象是 “这个具体的东西构造函数 = 创建对象时自动调用的初始化函数,用来给成员变量赋初值,避免野数据。(只能在public里面)无返回类型,函数名与类名一致系统也会生成一个默认拷贝构造函数如果类中含有指针类型的变量,浅拷贝会发生一些错误。

2026-05-29 10:49:25 234

原创 C++学习基础

为了防止命名冲突使用方式。

2026-05-24 17:09:07 48

原创 EXIT外部中断

中断程序结束后,要记得调用清除中断标志位的函数,不然只要中断标志位置一了,程序就会跳转到中断函数,如果不清除中断标志位,那它就会一直申请中断,就卡死了。NVIC根据每个中断的优先级分配先后顺序,然后根据唯一的输出口告诉cpu该处理哪个中断,所以中断优先级不是由cpu分配的,cpu不参与分配优先级。这些是 STM32 里能产生中断的外设,它们会把中断请求信号发给内核里的 NVIC。抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,两个优先级相同的按中断号排队。高抢占优先级可以打断低抢占优先级的中断。

2026-05-23 10:21:30 265

原创 stm32学习1--新建工程

iopcen使能gpio时钟用于配置输出模式(推挽/开漏)

2026-05-21 17:59:31 73

原创 ARM Linux:库移植

拷贝ARM动态库到NFS根文件系统 cp /home/linux/sqlite-install/lib/libsqlite3.so* /home/linux/nfs_root/usr/lib/6、# 拷贝头文件到NFS根文件系统 cp /home/linux/sqlite-install/include/* /home/linux/nfs_root/usr/include/ #arm-linux-gnueabihf-gcc -lxxx -L xxx/lib 需要使用-L指定库的路径。

2026-04-19 21:20:22 359

原创 Linux驱动:中断

本次以IMUX6ULL的按键驱动中断为例。

2026-04-15 22:00:17 365

原创 linux中断:顶半部与底半部

中断可以分成两个部分,顶半部和底半部。

2026-04-15 20:15:24 373

原创 IIC子系统

实现基于IIC总线驱动的IIC设备驱动例在之前的bsp里面裸机驱动,lm75->设备驱动,IIC->总线驱动 IIC的收发->(master_xfer())调master_xfer所需资源:从机地址,adapter分离,分层设备跟驱动分离,总线驱动和设备驱动分层。

2026-04-15 14:52:43 525

原创 linux驱动----驱动程序

设备驱动分类:设备驱动分类:字符设备驱动 -- 数据的访问是字节流(有序访问)块设备驱动 -- 数据可以随机访问(一般访问是按块访问的存储设备)网络设备驱动 -- 集成复杂的协议栈,网络设备靠名字管理1. 设备的操作方法(open/read/write/ioctl/close)2. 设备号 ---用于区分不同的设备设备号: 高12位主设备号 + 低20位的次设备号组成主设备号: 区分设备类型 (功能)次设备号:区分同类的不同设备3. 向系统注册设备驱动。

2026-04-09 20:59:31 70

原创 Linux驱动2

tftp 0x80800000 zImage tftp下载,将zImage下载到内存的0x80800000地址处。tftp 0x83000000 pt.dtb tftp下载,将pt.dtb下载到内存的0x83000000地址处。bootz 0x80800000 - 0x83000000 启动0x80800000地址处的内核。向内核新增文件(以向drivers/char目录下新增demo.c为例)3. 修改同层目录下的Kconfig文件,新增一个DEMO的配置。setenv ipaddr 删除环境变量。

2026-04-08 20:29:49 236

原创 linux驱动1

3-2 根文件系统在ubuntu上,则内核应该通过nfs挂载ubuntu上的rootfs目录(bootloader向内核传参是应该包含内核启动阶段使用的ip)2-1 内核在SD卡中,则bootloader需要在代码中初始化好SD卡,然后读SD的kernel分区写入内存。--- 搬移内核到内存 --- 向内核传参(根文件系统类型,init进程,控制台)nfs----网络文件系统(做网络之间的文件共享)-----bootload不再控制CPU,CPU控制权移交给内核。

2026-04-07 20:15:01 370

原创 I2C通信

空闲时总线保持高电平,SDA由高到低时代表一次通信开始,SCL开始产生时钟信号,SCL为低时,SDA可随意跳变,SCL为高时,SDA保持不变若最后结束时为高电平,接收方应答有效则会把总线拉低,无效则会保存高电平若最后结束时为低电平,接收方应答则保持不变,无效则上拉电阻将电平拉高小结:起始信号:SCL为高时,SDA由高变低数据发送期间:SCL为低时,SDA可以跳变,SCL为高时,SDA保持不变(每次传输以8bit为基本单位),数据发送完成后,由接收方发出应答信号(1bit的低电平)

2026-04-01 10:55:32 372

原创 ARM———UART

指单位时间(1 秒)内通信链路可以传输的码元数量,是衡量通信符号传输速率的核心指标。在 UART 串行通信中,单个码元仅能承载 1 个 bit 的二进制数据,因此 UART 的波特率在数值上等同于单位时间内传输的 bit 数。USR2:TXDC/RDR 发送完成状态位,用于判断发送链路是否完全空闲 接收数据就绪状态位,用于判断是否有新数据可读。,单帧数据内的起始位、数据位、停止位,均遵循统一的单 bit 时长,以此保证收发双方的时序同步。UBIR/UBMR:设置波特率。URXD:读取收到的数据。

2026-03-30 21:35:10 490

原创 Linux常用知识点

1、只使用局部变量(栈上)2、不读写全局变量、静态变量3、不调用不可重入函数(如 malloc、printf、strtok)4、不修改自身代码5、不使用固定缓冲区。3、heap(堆):2.8/2.9G左右,进程空间中其他部分使用剩余的空间,使用时需要手动申请。(新开辟一个线程,就要新开辟一个栈,若一个进程空间有多个栈,则是多线程)4、map(映射区):映射一些库(函数)的地址(库位置/函数偏移地址)2、stack(栈):8M,局部变量/函数参数/函数返回地址。

2026-03-28 10:35:32 500

原创 ARM——General Purpose Timer (GPT)

配置延时函数GPT 是一款 32 位多功能定时器,输入时钟经 12 位预分频器(1~4096 分频)后驱动 32 位计数器自由计数;它同时支持与两大核心功能:输入捕获通道可在引脚电平跳变时(如 GPT_CAPTURE1 的上升沿),将当前计数值锁存到对应 Timer Input Reg 并触发捕获中断;输出比较通道则通过将计数器值与 3 组 Timer Output Reg 比对,匹配后触发输出中断并通过输出模块控制引脚电平变化;

2026-03-27 20:22:48 780

原创 ARM中断设置--定时器中断

在上图的例子便是在计数寄存器counter register和load register,假设counter register和load register里面都是100,开始计数之后,counter register就会开始递减,当counter register减到0之后,load register里面的100便会装进去,然后再重新开始计数。EPIT 计数寄存器(EPITx_CNR)是 32 位只读寄存器,用于实时记录当前递减计数的剩余计数值,是定时器计数状态的直观体现。EPIT 加载寄存器(

2026-03-27 19:32:04 437

原创 ARM时钟配置

由于担心分频/倍频过于频繁,最后的频率老是确定不了,导致收到错乱的时钟,使得工作极其不稳定,因此先给最后接上晶振,等待分频/倍频配置完成之后,再给其接上。1、先根据下面寄存器,先将step_sel选为24M,再改为step_clk(最后记得配置完改回pll1_main_clk)PERCLK_CLK_ROOT、AHB_CLK_ROOT、IPG_CLK_ROOT这些常用,根据图片配置其分频器与选择器件。2、再根据下面寄存器,先给13位置1使能,再根据公式算出div_select填入最后。RTC是用来记时间的。

2026-03-26 20:48:10 485

原创 ARM 中断初始设置

GIC中断优先级设置:GIC_SetPriority(“中断号”,“优先级”);GIC中断使能:GIC_EnableIRQ(IRQn_Type IRQn);配置引脚功能及其方向 GPIO_DIR。ICR:中断配置寄存器,IMR:中断屏蔽寄存器。设置中断触发方式 ICR/IMR。一、首先要设置异常向量表地址为0(因为为0才可重映射)在汇编中结合c函数进行。因此在iqr中要先给lr减4再入栈。

2026-03-25 21:09:17 195 1

原创 常见知识点总结

HTTP 应答报文的结构分为三部分:状态行、响应头(报头)、空行、响应正文。3、常用排序时间复杂度。

2026-03-24 21:05:31 179

原创 常用知识点

通过仲裁机制实现“主设备动态切换”,当多个主机同时发起通信时,通过SDA线电平竞争决定谁获得总线控制权。→ 实时性好,延迟低,功耗控制优异,完美匹配“边缘设备 + 实时推理 + 能效比最优”三重需求;,设备只能作为从机,不可切换为主机(除非是OTG,但标准USB不支持动态切换)→ 极高能效比(如手机SoC中的NPU、寒武纪、华为达芬奇架构等);→ 缺点:功耗高、体积大、不适合边缘设备(如手机、IoT终端);→ 优点:可定制化强、功耗可控、适合特定场景加速;→ 缺点:AI推理效率低、功耗高、延迟大;

2026-03-23 21:33:31 923

原创 arm基础IMX6ULL----点亮led

3、在IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03中低四位配置成0x10b0,GPIO1_IO03。--再根据led0这个网络标号找到在插接件的B47这(其实此时已经找到在gpio3那了)--将其配置成GPIO_IO3 mode值为0101。--使用一个选通门(用MUXIO_SW来控制这个选通门)选择引脚功能。--先在底板找led1找到其对应的网络标号是led0。--再去核心板上查找得到GPIO1_IO3。--该板子由一个底板和一个最小系统板组成。--使用PAD_SW控制电气特性。

2026-03-22 18:35:51 360

原创 ARM基础内容

R12 为调用暂存寄存器,无需保存;:调用者无需保存,用于传递前 4 个整数 / 指针参数,R0 额外承载函数返回值。:被调用函数需保护这些寄存器,调用结束后恢复原值,避免影响调用者逻辑。程序计数器, 一般指向正在运行的下下条指令,默认做自加运算,复位值为。当前程序状态寄存器, 进借位、溢出、中断使能、工作模式、大小端控制。: 缓存,访问速率介于寄存器和内存之间,提高程序执行的效率。:内存管理单元,用于虚拟地址到物理地址的映射。上述指令只能对寄存器操作,不能针对存储器。数据搬移(MOV指令)不指定Rn。

2026-03-20 20:34:17 1913

原创 常用知识点总结

多线程环境中共享的标志位或状态变量(虽然现代更推荐用原子操作或互斥锁,但 volatile 在某些简单场景仍有用)将程序使用的虚拟地址(Virtual Address) 转换为实际的物理地址(Physical Address)volatile 用于防止编译器优化,适用场景为:可能被“外部”(中断、多线程、硬件)修改的变量。从任一节点到其所有后代叶子节点的简单路径上,均包含相同数量的黑色节点。如果一个节点是红色,则它的两个子节点都是黑色。判定覆盖(分支覆盖)所有叶子节点(NIL)都是黑色。

2026-03-17 21:37:09 459

原创 Linux系统编程----文件编程

a+----追加读和写 //这两个文件存在则定位到末尾开始写,不存在则创建。// 2. 写操作 write(fd, "", 1);w+---读和写 //这两个若文件不存在则创建,存在则被截断。// 定位到距开头 100 字节处 lseek(fd, 100, SEEK_SET);// 定位到末尾 lseek(fd, 0, SEEK_END);空洞文件创建示例:// 1. 定位 lseek(fd, 100, SEEK_SET);SEEK_SET // 文件开头 → offset 不能是负的。

2026-03-17 20:04:11 604

原创 服务器的并发模型

/ 2 给套接字绑定 ip +port ,方便客户端找到服务器。// 2 给套接字绑定 ip +port ,方便客户端找到服务器。// 通信套接字,表示从服务端来看,conn 是客户端的套接字。// 通信套接字,表示从服务端来看,conn 是客户端的套接字。// 3 进入监听状态 (套接字进入可以被链接的状态)// 3 进入监听状态 (套接字进入可以被链接的状态)// 1 打开网络设备,获得文件描述(套接字)// 1 打开网络设备,获得文件描述(套接字)while (1) // 与客户端的多次收发。

2026-03-12 17:08:06 458

原创 数据库 sqlite3

insert into user1 values (2,'张三',23,datetime('now','+8 hours'));insert into user3 values (NULL,'李四',23,datetime('now'));事务(Transaction)是以逻辑顺序完成的工作单位或序列,可以是由用户手动操作完成,也可以是由。数据库,是一个应用程序。fun 如果sql语句是查询操作,需要 这个函数,则该回调函数用来回收查询的结果。解决方案 ,在批量插入前开启事务,插入结束后提交事务。

2026-03-12 17:07:55 452

原创 多路io(select/epoll)

应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标的输入、中断信号等等事件,再比如web服务器如nginx,需要同时处理来来自N个客户端的事件。events: 这个是输出的集合,当有io设备准备就绪(可读,可写)。4. 当epoll_wait 返回后,准备就绪的文件描述符都储存在 events 集合中,相对容易。maxevents, 在一次检测中,可以同时复制到events 中的 数量。可以直接写1024;功能:创建一个集合(二叉树) ,存续需要被检测的文件描述符。

2026-03-11 09:06:35 534

原创 http 超文本传输协议 (网页)

http 超文本传输协议, 是基于tcp的。默认端口号 80。https(加密版本的http) ,443。html 超文本标记语言, 编写网页的一类编程语言。经过浏览器的解析,最终显示在浏览器。url , 统一资源定位符。在整个互联网唯一表示一个资源(网页,照片,电影。简介:是一个应用层的协议。主要用于浏览器和服务器之间的交互。GET / HTTP/1.1\r\n 请求行。接收http响应报文和数据。发送http 请求报文。期望接收的数据的类型。连接方式 : 长连接。

2026-03-11 09:06:20 212

原创 UDP与TCB

如果接收的大小小,剩下的数据就接收不到了(1包数据)。/有链接 ,在正式通信之前,需要先确定一条链路。参数:domain 地址族,PF_INET == AF_INET ==>互联网程序。参数:domain 地址族,PF_INET == AF_INET ==>互联网程序。/因为需要可靠传输,就需要维护链路的状态信息,网络开销,网络延迟大。dest_addr: 必选,表示要发送到的目标主机信息结构体。addrlen: 参数2的长度,如果参数2为NULL,则该值。my_addr 是物理接口的结构体指针。

2026-03-10 19:07:55 486

原创 进程间通信--网络编程

6、数据链路层:负责物理相邻(通过网络介质相连)的主机间的数据传输,主要作用包括物理地址寻址、数据帧封装、差错控制等。7、物理层:负责把主机中的数据转换成电信号,再通过网络介质(双绞线、光纤、无线信道等)来传输。4、传输层:管理网络通信两端的数据传输,提供可靠或不可靠的传输服务。1、应用层:为网络用户提供各种服务,例如电子邮件、文件传输等。3、会话层:负责信息传输的组织和协调,管理进程会话过程。2、表示层:为不同主机间的通信提供统一的数据表示形式。5、网络层:负责数据传输的路由选择和网际互连。

2026-03-10 18:56:48 324

原创 Linux系统编程 线程2

死锁:使用锁(互斥锁,信号量)机制的过程,由于逻辑错误,申请释放逻辑错误,导致程序无法继续运行。步骤:信号量的定义 ===》信号量的初始化 ==》信号量的PV操作===》信号量的销毁。// 全局变量的位置。定义互斥锁 ==》初始化锁 ==》加锁 ==》解锁 ==》销毁。atrr 互斥锁的属性,初始化的值,一般是NULL表示默认锁。atrr 互斥锁的属性,初始化的值,一般是NULL表示默认锁。如果sem没有资源(==0),则线程阻塞等待,一旦有资源。如果sem有资源(==1),则申请该资源,程序继续运行。

2026-02-26 20:18:48 624

原创 线程与进程

0:例:调用进程pid=200,等待进程组组id为200的这个组的子进程。进程创建的开销大(0~3G),线程只需要开辟对应的栈(8M)空间,其他区域共享进程的。本质上是一个函数的名称即可。线程,数据共享, 对应的栈区是私有 ,进程,用户空间的内存,都是私用的。进程适合需要大量资源的复杂任务, 不需要大的资源的任务,线程完成。retval : 需要返回出去的数据的指针。补充:WIFEXITED(status):判断是否退出,是返回非零,不是返回零。线程是轻量级进程,一般是一个进程中的多个任务(不同线程)。

2026-02-25 19:56:53 388

原创 数据结构——单向链表排序

选择合适的位置,放入合适的数,每次放入最小值,因此每次可以确定一个最小值,外层循环的作用是找合适位置,只需要找n-1次(因为最后一个位置放的就是最大值),内层循环是从下一个位置上的数开始,与当前位置上的数字进行比较,若小于当前位置便与之交换,直到比到最后一个数字。插入排序是将无序区的数插入有序区,插入时与有序区上的数字进行比较,若比有序区的数字大,则有序区该数往后移一位,要插入的数继续往前移,进行比较,直到遇到比自己小的数或者到头了,则插入该数。首先定义结构体(链表节点)

2026-02-02 20:47:56 143

原创 c语言基础篇---指针2

2、char *const s:表示s本身是一个只读量,s指向不能改变。3、const char * const s:基类型和s本身都是只读。例子: 1、const char *s:表示基类型只读,不能通过*s修改参数值。返回值:char*----成功则返回s,失败则返回NULL。补充:const:表示将参数限定为只读,不能修改参数的数据。原型char *gets(char *s);2、从右边(end)开始,找比基准值小的数。步骤:1、找一个基准值,以每次区间的首元素作为基准值。

2026-01-22 20:40:32 409

空空如也

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

TA关注的人

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