- 博客(76)
- 收藏
- 关注
原创 4.17号驱动
保存现场(cpu自动完成)保存cpsr寄存器中的值,到spsr_寄存器中修改cpsr寄存器中的值修改状态位(T位)根据需要禁止相应的中断位(I/F)修改对应模式位保存函数的返回地址到lr寄存器中修改pc指向异常向量表恢复现场(手动完成)
2024-04-17 21:49:03
545
原创 4.16号驱动
应用层open write read 等函数设备驱动层 获取gpio号通过统一接口对硬件操作内核层 核心层 由内核工程师编写,提供gpio子系统框架屏蔽硬件差异,为上层提供统一接口厂商驱动层 根据设备驱动层,完成对硬件初始化,地址映射,寄存器初始化硬件层。
2024-04-17 20:45:59
1158
原创 4.15号驱动
在linux内核3.10版本之后,内核中引入了设备树,设备树用来存放硬件相关的信息它本质上就是一个结构体,这个管理方式会让层次目录更为清晰这个设备树在内核启动时,会被内核进行解析驱动工程师需要将所有的硬件相关信息,编写到设备树中编程时从设备树中获取相关地址信息就可以。
2024-04-16 21:09:52
668
原创 4.11号驱动
fd文件描述符是在进程中调用open函数,返回的一个文件描述每个进程都拥有自己唯一的一个文件描述符,并且文件描述符之间互相没有干扰文件描述符是在进程中调用open函数函数返回的所以在进程中可以找到这个文件描述符在内核空间,通过task_struct结构体来描述打开进程的相关信息所以在task_struct结构体可以找到文件描述符的相关信息。
2024-04-11 23:43:03
416
原创 4.10号驱动
1. 在使用insmod安装驱动时,可以在外部通过传递参数改变变量的值,而不用修改驱动文件2. 部分厂商只会提供对应的驱动.ko文件,驱动工程师根据.ko修改对应变量的值。
2024-04-10 21:02:27
730
原创 4.9号驱动
相同点:都是对硬件进行操作不同点:有无操作系统是否具备多进程多线程开发是否可以调用库函数操作地址是否相同,arm操作物理地址,驱动操作虚拟地址。
2024-04-10 18:41:33
231
原创 4.2号系统移植
uboot主要作用:引导内核进行启动,并且uboot启动成功之后,会给内核传递两个参数(bootcmd/bootargs)所以需要移植linux内核,也就是uboot引导启动的内核内核五大功能内存管理:内存的申请(malloc)和释放(free)文件管理:通过ext2\ext3\ext4格式进行管理进程管理:进程的创建、调度、销毁网络管理:通过网络协议栈完成的数据收发设备驱动管理:字符设备 、块设备。
2024-04-02 21:03:41
171
原创 4.1号系统移植
tf-a镜像文件:tf-a-stm32mp157a-fsmp1a-trusted.stm32(烧写位置:TF卡 / EMMC)uboot镜像文件:u-boot-stm32mp157a-fsmp1a-trusted.stm32(烧写位置:TF卡 / EMMC)内核镜像文件:stm32mp157a-fsmp1a.dtb 和 uImage(通过tftp服务器下载)根文件系统:rootfs(通过nfs服务器进行挂载)
2024-04-02 20:56:40
308
原创 3.30号系统移植
1、进入家目录下FSMP1A目录uboot源码目录下2、在uboot源码目录下,执行make distclean清除目标3、在uboot源码目录下,执行安全版本的默认配置文件成功现象:4、在uboot源码目录下,执行make menuconfig,去掉图形化界面配置信息5、在uboot源码目录下,执行make menuconfig,更改默认编译的设备树信息6、在uboot源码顶层目录下,执行make menuconfig,去掉adc电流。
2024-04-02 20:37:48
623
原创 3.29号系统移植
1、进入家目录下FSMP1A目录uboot源码目录下2、在uboot源码目录下,执行make distclean清除目标3、在uboot源码目录下,执行非安全版本的默认配置文件成功现象:4、在uboot源码目录下,打开Makefile文件,配置交叉编译工具链,编译生成arm架构修改为:5、安装库:sudo apt-get install libncurses5-dev6、在uboot源码目录下,执行make menuconfig,进入图形化界面信息。
2024-04-02 19:20:18
688
原创 3.28号arm
控制器局域网(Controller Area Network,CAN),其特点是可拓展性好,可承受大量数据的高速通信,高度稳定可靠,因此常应用于汽车电子领域、工业自动化、医疗设备等高要求环境。CAN是异步通讯,只有CAN_High和CAN_Low两条信号线,且这两条信号线是差分信号线,以差分信号的形式通讯;CAN是半双工的,在同一时刻,一个通讯节点发送消息,其他节点只能接收消息。
2024-04-01 20:01:38
780
原创 3.26号arm
spi是一种同步全双工串行总线,全称串行外围设备接口通常SPI通过4个引脚与外部器件相连:MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。SCK: 串口时钟,作为主设备的输出,从设备的输入。CSN(NSS): 从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为“片选引脚”,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。
2024-04-01 19:23:07
633
原创 3.25号arm
I2C总线是PHLIPS公司在八十年代初推出的一种串行的半双工总线,主要用于连接整体电路。I2C总线为两线制,只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。I2C硬件结构简单,接口连接方便,成本较低。因此在各个领域得到了广泛的应用。I2C:同步半双工串行总线i2c支持一主机多从机通信,每个接到I2C总线上的器件都有唯一的地址。
2024-03-25 22:01:58
1097
原创 3.18号arm
实现汇编程序跳转的两种方式直接修改PC的值通过跳转指令跳转b 标签@程序跳转到指定的标签下执行,此时LR寄存器不保存返回地址bl 标签@程序跳转到指定的标签下执行,此时LR寄存器保存返回地址。
2024-03-19 21:10:26
474
原创 3.15号arm
汇编文件中由伪操作、伪指令、汇编指令以及代码注释这几部分组成伪操作:ARM的汇编中伪操作以.为前缀,所有的伪操作不占用内存空间,编译汇编时告诉编译器怎么编译当前文件,主要用来修改汇编内容的 .text .global .globl .end .if .else .endif伪指令:不是指令,但是伪指令也会占用指令内存,执行一条伪指令时也会让运算器进行相关运算汇编指令:汇编指令执行时会让运算器进行相关运算数据处理指令跳转指令内存读写指令状态寄存器传送指令。
2024-03-16 09:07:15
690
原创 3.14号arm
输入设备:将数据转换成计算机可以识别,存储,处理的形式,发送到计算机中输出设备:将计算机对程序和数据的运算结果输送到外部的设备存储器:用于将数据保存的模块。有寄存器,存在于CPU内部,用于暂时存放数据。CPU访问没有延时。高速缓存内存外部存储运算器:运算器由算术逻辑单元(ALU)、累加寄存器、数据缓冲寄存器和 状态条件寄存器组成,它是数据加工处理部件,完成计算机的各种算术和逻辑运算。控制器:控制器由程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器组成。
2024-03-15 19:06:10
846
原创 3.6号freeRtoS
GPIO(General Purpose Input/Output,通用输入/输出)是非常重要的外设,用于与外界数字通信。允许微控制器与外部器件(如传感器、执行器、LED等)进行数据交换,以实现各种功能。
2024-03-07 09:07:28
584
原创 2.26号qt
头文件包含#include<QPoint> //向量类类内声明//鼠标按下//鼠标移动QPoint p;//存放坐标//求出当前窗口的坐标点//鼠标移动// 全局的坐标(向量) 当前窗口的坐标(向量)
2024-02-26 20:36:04
557
原创 2.23号qt
作业头文件Q_OBJECTpublic:~Widget();源文件delete ui;ibtn1->text()=="启动")ui->btn1->setText("关闭");else if(ui->btn1->text()=="关闭")ui->btn1->setText("启动");
2024-02-26 08:59:26
568
原创 2.22号qt
Qss是Qt程序界面中用来设置控件的背景图片、大小、字体颜色、字体类型、按钮状态变化等属性,它是用来美化UI界面。实现界面和程序的分离,快速切换界面。优点:实现简单、便捷。
2024-02-22 21:14:24
512
原创 2.21号qt
signals: //信号权限,该权限下函数 都是信号//只需要声明 不需要实现public slots: //槽函数权限 ,该权限下函数 都是槽函数//需要声明 也要实现自定义的信号,定义在signals权限下,是一个不完整的函数,只要声明,不要实现。自定义 的信号,需要手动触发,使用emit关键字进行发射信号,如果自定义的信号一旦被发射,则会自动执行对应的槽函数处理。
2024-02-21 21:12:20
893
原创 2.20号qt
/1.类似与printf//2. 类似与cout 默认有换行 比较常用的方式qDebug() << "你好";//1.类似与printf//2. 类似与cout 默认有换行 比较常用的方式qDebug() << "你好";
2024-02-20 20:36:16
832
原创 2.18号c++
菱形继承又称为钻石继承,是由公共基类派生出多个中间子类,又由多个中间子类共同派生出汇聚子类。汇聚子类会得到多份中间子类从公共基类继承下来的数据成员,会造成空间浪费,没有必要。问题:1> 汇聚子类会得到多份中间子类从公共基类继承下来的数据成员,会造成空间浪费,没有必要。2>会对公共基类的数据成员进行多次初始化,或多次释放。解决问题:虚继承。
2024-02-18 21:33:35
528
原创 2.17号c++
静态数据成员和静态成员函数是属于类的,不属于类的某个实例,它们在类的所有实例中都是共享的。在数据成员前加 static ------>静态数据成员在成员函数前加 static ------>静态成员函数静态数据成员必须在类外初始化,如果不初始化(不建议),默认为0。静态成员函数只能访问静态数据成员,不能访问非静态数据成员。
2024-02-18 21:25:41
178
原创 2.8号作业
3.不能任意情况都能转化,必须是ASC码中有的字符才行,0~255范围内。1.static修饰的局部变量可以延长生命周期,全局可用。2.修饰全局只能文件内可用,其他文件不可用。2.getchar的返回值是ASC码。3.修饰函数只能文件内可用。
2024-02-08 21:29:20
122
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人