自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(92)
  • 资源 (1)
  • 收藏
  • 关注

原创 CANFD通信 TDC发送延时补偿 以及自动重发机制和错误总结

5.1。

2025-04-11 16:53:54 737

原创 stm32H7擦除flash显示成功,但是再次读取数值没变问题

问题:HAL_FLASHEx_Erase(&FlashEraseInit, &SectorError) 擦除成功,但是下次读取stmflash_read_word(addrx)!= 0XFFFFFFFF又成立。原因:在STM32H7等高性能芯片中,存在数据缓存(D-Cache)和指令缓存(I-Cache)。在进行Flash操作后,需要确保缓存被正确清除和无效化,以避免读取到缓存中的旧数据。

2025-01-04 11:54:45 402

原创 0730_驱动2 gpiod子系统

【代码】0731_驱动2 gpiod子系统。

2024-08-01 20:20:48 300

原创 0730_驱动1 gpio子系统

【代码】0730_驱动1 gpio子系统。

2024-07-31 18:53:54 424

原创 0729_驱动2 设备树

在linux-3.10内核版本之后引入设备树,设备树是用来存放硬件相关信息的设备树本质上就是一个结构体,这种方法进行管理会让目录层次更为清晰linux操作系统启动时,先下载设备树,下载成功之后,内核进行启动,解析设备树,设别墅解析成功之后,会以树状的形式存放在内存中驱动工程师需要将硬件相关的信息卸载设备树中,编程时,需要解析设备树中的地址。

2024-07-30 20:10:30 487

原创 0729_驱动1 异步通知

使用阻塞,io多路复用,都是用户主要调用接口等待数据返回使用阻塞,io多路复用,如果硬件中的数据没有准备好,用户需要阻塞等待,进程进入休眠状态进程在休眠状态这段期间不可以做其他任何事情,所以内核中引入异步通知能够在数据准备好的时候,底层给应用层发送一个通知当应用层接收到这个统治之后,去读取硬件中的数据,在没有接收到这个通知的时候,应用层去做其他的事情。

2024-07-30 19:03:26 416

原创 0726_驱动3 epoll

【代码】0726_驱动3 epoll。

2024-07-30 18:46:11 135

原创 0726_驱动2 io多路复用

1.当一个app应用程序,如果像读取多个硬件中的数据,监听多个文件描述符,这时就要引入io多路服用机制2.使用select/poll/epoll监听多个文件描述符3.如果所有硬件数据(文件描述)没有准备好,进程进入休眠状态4.如果有一个或者多个硬件数据(文件描述符)准备好。唤醒休眠进程5.当进程被唤醒之后,在内核空间,读取到准备好的文件描述符6.从准备好的文件描述符集合中,读取准备好的文件描述符7.从文件描述符中读取数据。

2024-07-29 08:59:24 656

原创 0726_驱动1 非阻塞/阻塞

1.当一个app应用层程序,取读取硬件中的数据2.不管硬件中的数据是否准备好3.都会立即返回数据。

2024-07-27 19:20:08 339

原创 0725_驱动1 内核中并发和竟态解决方法

1.同一个驱动程序,同时被多个应用层程序进行访问2.访问同一个临界资源,驱动产生竟态。

2024-07-27 19:06:15 1059

原创 0724_驱动2 inode和file结构体功能

1.在进程中调用open函数,打开设备文件时,会返回一个文件描述符2.每个进程都有自己唯一的文件描述符,文件描述符之间没有干扰3.在进程中调用open函数,返回的文件描述符4.所以在进程中可以找到文件描述符相关信息5.通过task_struct结构体,记录描述进程的相关信息6.所以task_struct结构体中可以找到文件描述符。

2024-07-27 17:34:17 254

原创 0724_驱动1 字符设备驱动内部实现

【代码】0724_驱动1 字符设备驱动内部实现。

2024-07-27 17:24:24 251

原创 0723_驱动2 ioctl使用

1.前面通过read和write函数完成对设备的读写操作2.在驱动中,有的时候需要完成对设备的控制3.所以需要将设备的控制,与设备的读写分开。

2024-07-27 16:51:36 213

原创 0723_驱动1 自动创建设备节点

1.因为应用层通过设备节点调用内核层,每次都需要输入mknod命令手动创建设备节点2.mknod命令手动创建设备节点,需要注意主设备号和次设备号。

2024-07-27 16:29:33 553

原创 0722_驱动3 地址映射驱动点灯

在芯片手册上查看到的地址属于物理地址,在硬件层在内核空间地址属于虚拟地址,在内核层在驱动中,操作的是虚拟地址需要将物理地址《--mmu内存管理单元--》虚拟地址映射。

2024-07-27 16:08:34 195

原创 0722_驱动2 用户空间和内核空间数据传输

函数功能:将用户空间的数据,拷贝到内核空间参数:to:内核空间首地址from:用户空间首地址n:拷贝大小返回值: 成功返回0,失败返回未拷贝的字节数。

2024-07-27 15:57:19 550

原创 0722_驱动1 字符设备驱动框架

字符设备驱动按照字节流进行访问,并且只能顺序访问设备号一共有32位,主设备号(高12位)+次设备号(低20位)

2024-07-27 15:50:53 281

原创 0719_驱动6 通用Makefile

【代码】0719_驱动6 通用Makefile。

2024-07-27 15:36:28 151

原创 0719_驱动5 导出符号表

1.因为内核空间共用3-4G空间2.通过上面可知,B模块只要拿到A模块add'函数地址就可以调用A模块的add函数3.A模块:提供者4.B模块:调用者。

2024-07-27 15:33:55 250

原创 0719_驱动4 内核模块传参

1.应用层使用argc和argv进行传参2.内核模块传参需要借助宏函数,接收外部传参信息3.如果厂商提供驱动文件.ko文件,对于驱动工程师可以不关心驱动内部的实现,通过外部传参进行使用驱动文件4.例如:厂商提供屏幕背光亮度驱动代码,对于驱动工程师不需要关心屏幕背光亮度驱动代码,直接通过外部传参,修改屏幕背光亮度。

2024-07-27 15:18:34 337

原创 0719_驱动3 printk使用方法

5.printk有8中打印级别(0-7),打印级别用来过滤信息。6.printk打印级别称之为消息级别,终端打印级别称之为终端级别。10.printk格式:printk(打印级别“格式控制符)3.在内核空间执行grep "printk" * -nR。11.使用dmesg命令,可以查看printk打印的消息。1.应用层打印使用printf,内核层使用printk。7.只有消息级别大于终端级别,消息才能在终端进行打印。13.消息灯集可以省略不写,使用默认的消息级别。9.设置消息级别大于终端级别。

2024-07-27 15:01:17 256

原创 0719_驱动2 编写编译linux内核模块

linux内核模块三要素:入口:执行insmod 安装命令操作出口: 执行rmmod 卸载命令操作许可证:遵循GPL协议,开源,指定入口地址,出口地址。

2024-07-27 14:02:03 442

原创 0719_驱动1 arm裸机开发与linux驱动开发区别

1.只要有硬件存在的地方,就会有驱动存在2.在windows操作系统中,usb驱动,网卡驱动,电源驱动......3.在linux操作系统中,电源驱动,网卡驱动,内存驱动,EMMC驱动.....

2024-07-27 13:48:28 565

原创 0706_ARM8

PWM控制蜂鸣器,风扇,震动马达。

2024-07-06 12:17:04 314

原创 0703_ARM7

封装exti,cic初始化函数。

2024-07-03 19:48:46 303

原创 0702_ARM6

【代码】0702_ARM6。

2024-07-02 21:16:53 335

原创 0701_ARM5

练习:使用usart4。

2024-07-02 10:28:16 455

原创 0628_ARM4

【代码】0628_ARM4。

2024-06-28 19:31:32 223

原创 0627_ARM3

思维导图:

2024-06-27 21:43:16 109

原创 0625_ARM2

汇编实现1-100累加,结果保存在r0。

2024-06-25 19:26:15 629

原创 0624_ARM1

思维导图:

2024-06-24 21:01:58 489

原创 0619_QT5

2024-06-22 14:34:45 279

原创 0618_QT4

完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面如果账号和密码不匹配,弹出错误对话框,给出信息”账号和密码不匹配,是否重新登录“,并提供两个按钮Yes|No,用户点击Yes后,清除密码框中的内容,继续让用户进行登录,如果用户点击No按钮,则直接关闭登录界面如果用户点击取消按钮,则弹出一个问题对话框,给出信息”您是否确定要退出登录?

2024-06-18 20:27:04 623

原创 0617_QT3

初始界面: 账号或密码错误提示:成功跳转界面:

2024-06-17 19:37:37 388

原创 0614_QT2

【代码】0614——QT2。

2024-06-17 08:52:21 587

原创 0613_QT1

【代码】0613_QT1。

2024-06-13 20:43:27 540

原创 0612_C++7

思维导图:

2024-06-12 19:11:06 165

原创 0611_C++6

以下是一个简单的比喻,将多态概念与生活中的实际情况相联系:比喻:动物园的讲解员和动物表演想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴子等。现在,动物园里有一位讲解员,他会为每种动物表演做简单的介绍。在这个场景中,我们可以将动物比作是不同的类,而每种动物表演则是类中的函数。而讲解员则是一个基类,他可以根据每种动物的特点和表演,进行相应的介绍。具体过程如下:定义一个基类 Animal,其中有一个虛函数perform(),用于在子类中实现不同的表演行为。

2024-06-11 19:18:17 639

原创 0610_C++5

(5)另外, RMB 类还包含一个静态整型成员变量 count,用于记录当前已创建的 RMB 对象的数量。每当创建一个新的 RMB 对象时,count 应该自增 1;(1)重载算术运算符 + 和 -,使得可以对两个 RMB 对象进行加法和减法运算,并返回一个新的 RMB 对象作为结果。(2)重载关系运算符 >,判断一个 RMB 对象是否大于另一个 RMB 对象,并返回 true 或 false。(3)重载前置减减运算符 --,使得每次调用时 RMB 对象的 yuan、jiao 和 fen 分别减 1。

2024-06-10 15:35:00 728

原创 0606_C++4

思维导图:

2024-06-06 20:33:29 139

空空如也

空空如也

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

TA关注的人

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