自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux驱动学习:从Linux主机nfs共享文件到uboot

NAT模式下使用uboot来ping主机死活也ping不同,不知道啥原因,有知道的大佬可以私信俺。第三步:打开nfs服务配置文件/etc/exports,并加入如下图所示内容,注意替换为自己的共享文件夹的绝对路径。在这里有个点需要注意以下,Linux主机的网络配置需要改成。修改完成之后重启nfs服务即可完美解决此问题,让兄弟们少走点弯路。

2024-04-03 22:33:09 665 1

原创 CAN总线基础详解以及stm32的CAN控制器

CAN(Controller Area Network),是IOS国际标准化的串行通信协议。为了满足汽车产业的“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需求。低速CAN(ISO11519)通信速率10~125Kbps,总线长度可达1000米高速CAN(ISO11898)通信速率125Kbps~1Mbps,总线长度≤40米(经典CANCANFD 通信速率可达5Mbps,并且兼容经典CAN,遵循ISO 11898-1 做数据收发帧起始:表示数据帧开始的段,显性信号。

2024-01-07 15:42:36 1787

原创 su-03t语音模块固件的制作与烧录(stm32实战)

SU-03T 是一款低成本、低功耗、小体积的离线语音识别模组,能快速应用于智能家居,各类智能小家电,86 盒,玩具,灯具等需要语音操控的产品,SU-03T也具备强大的软件开发能力,我们可以在“​​智能公元​​”平台上实现语音固件的零代码开发,提高工作效率。其中需要注意的是UART0的B0、B1是调试器的语音固件烧录口,串口烧录则选择UART1的B6、B7引脚,当固件烧录完成之后则可以使用UART1的B2、B3 引脚和MCU进行通信。唤醒词自定义。

2024-01-04 17:46:32 8775 13

原创 STM32实战之IAP代码升级

IAP(In Application Programming)即在应用编程, IAP 是用户自己的程序在运行过程中对User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信接口对产品中的固件程序进行更新升级。通常实现 IAP 功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信方式(如 USB、 USART,蓝牙)接收程序或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。

2023-12-30 23:57:32 2590 3

原创 Linux驱动开发之Linux内核中的中断处理与等待队列以及相关API和例程分析

中断机制和等待队列在Linux内核中发挥着重要作用,它们的合理利用可以构建出高实时性和高效性的系统。中断编程涉及内核低层操作,需要谨慎处理,但掌握后可以大大提升系统的异步处理能力。

2023-12-30 11:14:00 1513 1

原创 Linux驱动开发之杂项设备注册和Linux2.6设备注册

杂项设备注册是Linux驱动开发中的一种设备注册方式。在Linux系统中,杂项设备是一类没有明确分类的设备,它们不属于字符设备、块设备或网络设备等特定类型。杂项设备可以包括各种不同类型的设备,如传感器、LED灯、温度计等。杂项设备注册的目的是将这些杂项设备描述成设备文件,以便通过文件操作来控制和访问设备。通过设备文件,应用程序可以打开、关闭、读取和写入杂项设备,实现对设备的控制和数据交互。在杂项设备注册中,使用​​结构体来描述设备的属性和设备文件的名字。

2023-12-26 15:25:28 1565 1

原创 STM32实战之深入理解I²C通信协议

通过I2C协议与AT24C04 EEPROM芯片进行交互的函数。EEPROM代表电可擦除可编程只读存储器,这是一种非易失性存储器,用于计算机和其他电子设备中存储断电后必须保存的少量数据。​​:此函数初始化与AT24C04芯片通信的I2C接口。​​:此函数将单个字节的数据写入AT24C04芯片的指定地址。​​:此函数从AT24C04芯片的指定地址读取单个字节的数据。​​:此函数将多个字节的数据写入AT24C04芯片的指定地址。AT24C04的内存被划分为多个页面,每个页面可以容纳多个字节的数据。

2023-12-25 22:48:11 2264 1

原创 深入理解串口通信原理及应用

通过本文对串口通信的原理、协议、接口、应用等各个方面的介绍,可以看到串口通信技术在计算机与外部设备连接以及工业控制领域中发挥着重要作用。串口通信以其简单、灵活、通用等优点,在很多场合仍然是最实用的通信方式。深入理解串口工作原理,掌握串口通信接口的选择和编程方法,有助于我们更好地应用串口技术,设计更加可靠的通信系统。随着嵌入式系统、工业控制的快速发展,串口通信技术还有很多创新与发展的空间。希望本文对大家串口通信技术的理解有所帮助。

2023-12-24 20:36:50 6805 1

原创 Linux操作系统之面试必刷50题

1、static作用2、什么是宏定义;宏定义中的#和##3、函数指针与指针函数区别定义4、对指针的理解5、const、volatile6、C与C++的区别7、C指针与C++的引用区别8、C++多态性,如何实现多态9、C/C++内存分布;C/C++中分配内存方式10、C++static使用11、C++异常处理方式12、实时操作系统与linux区别13、对Linux系统的认识14、linux系统框架15、linux用户密码相关文件16、etc目录作用

2023-12-23 17:39:11 877 1

原创 Linux网络编程之TCP/IP实现高并发网络服务器设计指南

epoll服务器根据不同的需求和场景,我们可以选择不同的高并发服务器设计方案。多进程服务器、多线程服务器、I/O多路复用服务器和epoll服务器都有各自的优缺点和适用场景。通过分享的例程和相关API函数的介绍,读者可以更好地理解和选择适合自己需求的设计方案,从而高效处理大量并发请求,满足互联网快速发展的需求。

2023-12-22 23:58:54 1154

原创 出错处理封装函数 - 使Socket编程更安全可靠

在Socket编程中,错误处理是至关重要的一环。通过封装出错处理函数,我们可以提高代码的可读性和可维护性,增加代码的重用性,统一管理错误信息,提高系统的稳定性和可靠性。本文将详细介绍为什么要进行出错处理函数的封装,并探讨如何使Socket编程更加安全可靠。

2023-12-21 10:24:01 891

原创 Linux网络编程之TCP/IP通信基础以及例程分享

TCP/IP网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层。应用层(Application Layer):应用层是最靠近用户的一层,它提供了用户与网络之间的接口。在应用层,应用程序可以通过使用各种协议(如HTTP、FTP、SMTP等)来进行通信。应用层的主要任务是处理应用程序之间的通信和数据交换。传输层(Transport Layer):传输层负责在网络中的两个主机之间提供可靠的端到端数据传输。

2023-12-19 20:30:30 1532

原创 Linux系统编程之信号以及相关API函数详解

SIGHUP: 当用户退出shell时,由该shell启动的所有进程将收到这个信号,默认动作为终止进程SIGINT:当用户按下了组合键时,用户终端向正在运行中的由该终端启动的程序发出此信号。默认动作为终止进程。SIGQUIT:当用户按下组合键时产生该信号,用户终端向正在运行中的由该终端启动的程序发出些信号。默认动作为终止进程。SIGILL:CPU检测到某进程执行了非法指令。默认动作为终止进程并产生core文件SIGTRAP:该信号由断点指令或其他 trap指令产生。

2023-12-18 21:23:49 981

原创 Linux驱动开发之平台设备总线相关API与例程分享

定义了一个平台设备结构体 mypdev 和一个资源结构体数组 myres。定义了一个释放设备的回调函数 myrelease()。在初始化函数 myled_dev_init() 中,设置了资源结构体数组 myres 的内容,包括寄存器地址、有效电平和引脚编号。初始化平台设备结构体 mypdev 的各个字段,包括名称、ID、资源数量、释放回调函数和资源数组。调用 platform_device_register() 函数向内核注册平台设备。

2023-12-18 00:09:08 1070

原创 Linux设备树简介以及相关API与历程分享

设备树的结构是一种层级的树状结构,以.dts(设备树源文件,相当于C语言里的源文件)、.dtsi(设备树头文件,厂商写的设备树文件,我们的设备树文件一般要包含这类文件)和.dtb(设备树二进制文件,相当于C语言中的可执行文件)的形式存在。设备树描述了硬件设备的各种属性和连接关系,包括设备的类型、地址、中断信息、寄存器配置等。它可以描述处理器、总线、外设等各个层次的硬件设备。

2023-12-17 17:55:29 1194 1

原创 Linux系统编程之使用存储映射与共享内存实现进程间通信详解以及例程分享

共享内存和存储映射的关系在于,共享内存可以通过存储映射的方式实现。通过将共享内存区域映射到各个进程的地址空间中,多个进程可以直接访问同一块内存区域,从而实现数据的共享。在这种情况下,使用​​mmap()​​函数可以将共享内存映射到进程的地址空间中,然后各个进程可以通过对映射区域的读写操作来实现共享数据的访问。

2023-12-17 00:01:40 1450 1

原创 Linux系统编程之使用管道实现进程间通信以及相关API与例程分享

管道(Pipe):管道可在具有亲缘关系的进程间搭建通道,用于PROCESS-PROCESS之间的通信。信号量(Semaphore):主要作为进程间以及同一进程不同线程之间的一种锁机制,用于进程间的同步。消息队列(Message queue):消息队列是由消息的链表,存放在内核中并由消息队列标识符标识的一种通信机制。共享内存(Shared memory):映射一段可以被其他进程所共享的内存区域,这段共享内存区域可供多个进程进行读写,从而交换数据。套接字(Socket):更为一般的进程间通信机制,可用于

2023-12-16 14:53:30 1045 1

原创 Linux驱动下的IIC总线的介绍以及相关API与例程

I2C(Inter-Integrated Circuit)是一种飞利浦(Philips)于1980年推出的同步串行半双工通信协议,用于连接多个从机设备到一个主机,并且支持多主多从的连接。I2C总线由两条线组成:时钟线(SCL)和数据线(SDA)。这两条线由硬件进行传输,传输速率随波特率而定,支持的速率有普通模式(100 kbps)、快速模式(400 kbps)和高速模式(3.4 Mbps)。

2023-12-16 00:25:30 1529 1

原创 Linux驱动开发之输入子系统的简介以及相关API与例程

输入设备驱动(Input Device Drivers):实现不同输入设备的硬件访问,如键盘、鼠标、触摸屏等。输入设备核心(Input Core):实现输入设备驱动和输入处理之间的抽象。它允许不同的事件源使用统一的接口与上层交互。输入处理层(Input Handlers):实现事件到键码的转换、不同键状态的跟踪、hotplug事件生成等。比如keycode转换成keysym。输入设备模型(Input Device Model):用于维护有关输入设备的信息,如名称、特性等。并向用户空间提供统一的输入设

2023-12-15 14:17:55 1163

原创 rkmedia的视频采集、编码、推流与保存以及相关API和例程解析

RKMedia的作用包括采集音频数据(PCM格式)、对音频进行编码(AAC格式)、采集视频数据(YUV或NV12格式)、对视频进行编码(YUV转H264格式)等。此外,RKMedia还可以进行视频裁剪、检测摄像头是否有遮挡、视频合成、视频分解、视频录制等操作。在RKMedia中,还有一些专用的名词,如VI(视频采集通道)、VENC(视频编码)、VDEC(视频解码)、AI(音频采集)、AO(音频输出)、AENC(音频编码)、ADEC(音频解码)和MD(移动侦测)。通过RKMedia,开发者可以方便地进行音视频

2023-12-15 10:04:22 5252 2

原创 使用C语言设计一个学生信息管理系统,系统功能:系统能实现学员信息的管理的基本功能,如信息录入,删除,修改,查找,成绩排序等功能

项目思路使用结构体(struct)来表示一个学生的信息,包括学号、姓名、性别和分数使用数组来存储多个学生的信息,并用变量count记录当前已有学生数量提供菜单界面供用户选择功能根据用户选择调用功能函数实现功能,使用switch分支控制主要功能有增删改查:添加新学生信息删除指定学生信息修改指定学生信息查询并打印学生信息还包括排序、按条件打印等扩展功能主体框架采用do-while循环,直到用户退出。

2023-07-24 23:17:50 930

原创 C语言计算该日在本年中是第几天

定义一个结构体来接收年月日,先判断接收的数据是否合法,再根据年份来判断是否为闰年,累加输入月份之前的所有天数,再根据输入的月份来判断输入的日期是否合法,最后加上日期即可。

2023-07-20 00:34:12 824 1

原创 VS中scanf()函数错误C4996的原因及解决办法

但是它不是所有编译器都支持的。但是在其他一些编译器中,如 GCC 和 Clang 等,scanf_s 可能会被视为非标准扩展,并且可能会导致编译时警告或错误。如果您想写跨平台的代码,建议使用标准的 scanf_s函数并遵循安全编程实践来确保程序的安全性。例如,在读取字符串时,scanf_s函数会自动检查输入数据是否符合要求,并在必要时截断输入数据。scanf函数可以读取用户输入的数据,但它无法检查输入数据是否符合要求,可能会导致缓冲区溢出等安全问题,简单来说就是输入字节的长度可能会超过接受变量的长度。

2023-06-13 21:13:27 805 1

空空如也

空空如也

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

TA关注的人

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