自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(208)
  • 资源 (5)
  • 收藏
  • 关注

原创 11、内核驱动竞争和并发(共享资源保护)

使用自旋锁会禁止抢占,单核CPU中 A进程获得自旋锁,并且进入休眠状态,B进程也想获得自旋锁,但此时被A占用 获取不到,CPU的抢占被禁止了,进程B无法调度出去,A进程就会一直不能释放自旋锁 就导致 死锁的产生;为了保护共享资源提出的一种锁机制,内核中比较常见,已原地等待的方式解决资源冲突,当资源被占用后,其他线程获取不到,只能原地打转。6、在同时使用信号量和自旋锁时,要先获取信号量 再使用自旋锁,因为信号量会导致休眠,所以不能放在自旋锁的后面;1、自旋锁里的临界区代码不能太多,会占用系统资源。

2024-08-02 13:10:20 271

原创 10、字符设备和杂项设备开发流程

静态分配------------------register_chrdev_region()卸载 设备号 --------unregister_chrdev_region。动态分配----------- -alloc_chrdev_region()创建一个设备 ---------device_create。初始化cdev-------------cdev_init。注册cdev-------------- cdev_add。卸载设备 -------class_device。应用层 mknod 命令。

2024-08-02 11:14:12 414

原创 9、LED驱动

2、配置GPIO的寄存器(复用关系、方向、数据寄存器)3、驱动代码里使用ioremap 获取寄存器的虚拟地址。1、确定LED是哪个GPIO,通过看原理图确认。

2024-08-02 11:02:58 245

原创 8、驱动错误处理

常使用goto语句对错误进行返回。

2024-08-01 17:28:48 192

原创 7、杂项设备驱动

杂项设备使用结构体 miscdevice进行描述,定义在: include/linux/miscdevice.h。杂项设备的主设备号是相同的 10,次设备号是不同的,主设备号相同可以节省内核资源。字符设备: IO传输过程中以字符为单位,没有缓冲,比如:i2c spi。块设备: IO 传输过程中以块为单位。和存储有关的,TF卡 硬盘。杂项设备是字符设备的一种,自动生成设备节点,降低了开发难度。cat /proc/misc 可以查看杂项设备。网络设备:以socket 套接字来访问;

2024-08-01 17:04:01 178

原创 6、注册字符类设备(使用文件私有数据)

结构体中,专门为用户留了一个域用于定义私有数据。这意味着,在编写Linux驱动时,开发者可以在这个域中存储与文件相关的私有数据,这些数据对于驱动来说是私有的,不会被其他部分(如内核的其他部分或用户空间的程序)直接访问。尽管Linux本身并没有明确规定要使用文件私有数据。这实际上是Linux驱动遵循的一种“潜规则”,体现了Linux面向对象的思想。

2024-07-31 17:28:07 187

原创 5、注册字符类设备

Linux中通过udev来实现设备节点的创建和删除,udev是一个用户程序,可以根据系统中设备的状态来创建或者删除设备节点,比如说,如果驱动程序成功加载到Linux时,会自动在/dev目录下创建相对应的设备节点,当驱动程序卸载时,会自动删除/dev目录下的设备节点,应用层和内核不能直接进行数据传输,可以使用 copy_from_user,copy_to_user,需要包含头文件 Linux/uaccess.h,这些函数提供了对访问违规(如地址无效或越界)的检查,从而增加了内核的稳定性。

2024-07-31 17:03:53 797

原创 4、驱动设备号

Linux 规定 每个字符设备或者块设备必须有一个专属的设备号;一个设备号由主设备号 和次设备号组成;

2024-07-31 03:15:00 348

原创 3、内核模块符号导出

驱动程序可以编译成内核文件,就是KO文件,每个Ko文件时相互独立的,模块之间无法相互访问,但是某些场景下可能需要互相访问,例如B模块要引用A模块里的函数,就需要用到符号表;使用宏 EXPORT_SYMBOL 和 EXPORT_SYMBOL_GPL 导出符号到内核符号表中。符号就是内核中的函数名、全局定义的一些变量;导出的符号可以被其他模块使用;先加载a.ko 后加载b.ko。符号表:记录符号的文件;使用前需要声明一下;

2024-07-31 00:45:00 159

原创 2、驱动模块传参

基本类型:char /bool/int /long/short/byte/ushort/uint.1、设置驱动的相关参数,驱动程序更灵活 ,比如 缓冲区大小。就是驱动模块加载传递参数给我们的驱动。2、设置安全校验,防止驱动被别人盗用。通过命令可以查看 传参的描述信息。字符串:string。

2024-07-30 14:43:12 113

原创 1、一个简单的驱动程序

2、将驱动编译到内核模块,独立于Linux内核以外,需要的时候通过命令加载驱动文件(.KO文件),使用内核模块可以减少内核的体积,加快启动速度,插入或者卸载驱动不需要重启系统;1、头文件 必须包含 1、将驱动放在Linux内核里面,然后编译Linux内核。

2024-07-29 16:23:01 327

原创 通过mqtt.fx连接阿里云

通过mqtt.fx连接阿里云,需要完成以下步骤。请注意,以下步骤基于当前可用的信息和常见的操作流程,但实际操作时可能因阿里云平台的更新而有所变化。

2024-07-24 05:00:00 672

原创 mqtt.fx 下载 安装 配置

MQTT.fx是一款功能强大的MQTT客户端工具,专为测试和调试MQTT协议的服务器或应用程序而设计。

2024-07-23 04:15:00 815

原创 MQTT 协议中 PUBLISH 和 PUBACK 介绍

功能PUBLISH 命令用于从客户端向服务端(或反向)传输一个应用消息。它是 MQTT 协议中用于消息发布的核心命令。语法固定报头(Fixed Header):包含报文类型(0x03),DUP 标志(是否重复发送),QoS 等级(0, 1, 或 2),RETAIN 标志(是否保留消息),以及剩余长度(Remaining Length,表示可变报头和有效载荷的总长度)。可变报头。

2024-07-22 06:00:00 455

原创 STM32 移植MQTT

在STM32上移植MQTT客户端库(如Paho MQTT C库)涉及几个关键步骤,包括库的选择、环境配置、代码集成和测试。下面是一个概括的指南,帮助你开始这个过程。

2024-07-22 02:15:00 1274

原创 MQTT CONNECT命令的详细解释和说明

CONNECT命令是MQTT协议中客户端与服务器建立连接时发送的第一个报文。通过该命令,客户端向服务器提供必要的信息,如客户端标识符、用户名、密码等,以便服务器进行身份认证和会话管理。综上所述,CONNECT命令是MQTT协议中建立客户端与服务器连接的关键步骤,它通过包含客户端标识符、遗嘱信息、身份认证信息等参数,确保了连接的可靠性和安全性。注意:上述示例中的二进制数据(如客户端标识符、用户名、密码的16进制表示)仅为示意,实际使用时需要根据MQTT服务器的要求和客户端的实际情况进行编码和加密。

2024-07-21 03:30:00 947

原创 下载Paho MQTT C库有几种常见的方法

如果你使用的是支持包管理的集成开发环境(IDE)或构建系统,如Keil MDK、IAR Embedded Workbench或CMake等,你可以检查这些工具是否提供了对Paho MQTT C库的支持。虽然我不能直接提供下载链接(因为链接可能会随时间而变化),但你可以按照上述步骤在GitHub上找到Paho MQTT C库的最新下载链接。由于Eclipse Paho项目托管在GitHub上,因此你可以直接从GitHub仓库下载Paho MQTT C库的源代码。

2024-07-21 03:30:00 744

原创 MQTT剩余长度字段的编码方案

MQTT剩余长度字段的编码方案通过变长度的字节序列来表示可能的很大范围的剩余长度值,最高可达268,435,455字节(即256MB),这种设计使得MQTT协议能够高效地处理不同大小的报文。同时,该编码方案也考虑了编码后的数据紧凑性,减少了传输过程中的数据冗余。

2024-07-20 05:45:00 448

原创 MQTT 报文类型

MQTT目前定义了多种控制报文类型,这些报文可以分为几个主要的功能类别,包括连接、发布、订阅等。CONNECT功能:客户端与服务器建立连接时发送的第一个报文。组成:由固定报头、可变报头以及有效载荷组成,包含客户端的标识符、协议版本、连接标志等信息。CONNACK功能:作为对CONNECT报文的响应,由服务器发送给客户端,确认连接是否成功建立。包含信息:连接返回码和会话标志等。PUBLISH功能:用于客户端向服务器或客户端发送MQTT消息。包含信息。

2024-07-20 04:15:00 485

原创 MQTT 消息数据结构介绍

MQTT协议(Message Queuing Telemetry Transport,消息队列遥测传输协议)的结构主要由三个部分组成:固定报头(Fixed Header)、可变报头(Variable Header)和有效载荷(Payload,有时也称为消息体)。

2024-07-19 06:30:00 1286

原创 MQTT 固定报头中的剩余长度介绍

MQTT协议中的剩余长度(Remaining Length)是一个重要的概念,它表示当前报文剩余部分的字节数,包括可变报头和负载的数据,但不包括用于编码剩余长度字段本身的字节数。

2024-07-19 04:45:00 349

原创 MQTT 与HTTP 比较

综上所述,MQTT与HTTP在设计目的、速度与效率、架构与模式、消息QoS支持以及连接方式等方面都存在显著的差异。MQTT更适用于需要实时数据更新和多设备通信的物联网场景,而HTTP则更适用于传统的Web服务和客户端-服务器交互模式。

2024-07-18 11:22:44 1124

原创 为什么大家都喜欢使用VIM

综上所述,VIM以其高效性、可定制性、轻量级、强大的社区支持和习惯养成的特点吸引了大量用户。尽管学习和掌握VIM需要一定的时间和努力,但一旦熟练掌握,它将成为你编程和文本编辑的强大工具。

2024-07-18 09:51:41 228

原创 MQTT 协议的优势

MQTT(Message Queuing Telemetry Transport)协议是一种轻量级的消息协议,专为在设备之间以及设备与服务器之间的高效、可靠通信而设计。MQTT 协议在物联网(IoT)、移动应用、智能城市等领域中得到了广泛的应用。综上所述,MQTT 协议以其轻量级、高效、可扩展、可靠、易于实现和使用以及支持异步通信和安全性等优势,在物联网等领域中得到了广泛的应用和认可。

2024-07-18 09:47:49 240

原创 MQTT常见应用场景

MQTT协议因其轻量级、高效和可扩展的特性,在物联网(IoT)和机器对机器(M2M)通信中拥有广泛的应用场景。

2024-07-18 08:58:58 259

原创 mqtt 简介

定义:MQTT是ISO标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议,它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。开发者:该协议由IBM公司的安迪·斯坦福-克拉克及Cirrus Link公司的阿兰·尼普于1999年共同撰写了第一个版本。特点:MQTT协议具有轻量、简单、开放和易于实现的特点,这些特点使其适用范围非常广泛,尤其是在受限的环境中,如机器与机器(M2M)通信和物联网(IoT)。

2024-07-18 08:54:21 384

原创 Sourcetree 常用功能演示

Sourcetree是一款流行的Git和Mercurial桌面客户端管理工具,它提供了一个图形用户界面,使得Git和Mercurial的版本控制操作更加直观和易于使用。

2024-07-15 07:30:00 389

原创 如何使用Sourcetree进行Git克隆/新建

使用Sourcetree进行Git克隆(Clone)/新建操作,可以按照以下步骤进行。请注意,以下步骤基于Sourcetree的通用界面和操作流程,但具体界面可能会因版本更新而略有不同。

2024-07-15 04:45:00 857

原创 git 创建分支--命令行

在Git中创建分支是一个简单而强大的操作,它允许开发者在不影响主代码库的情况下进行独立的开发和测试。通过遵循上述步骤和注意事项,你可以有效地管理Git分支,促进团队协作和项目进展。

2024-07-14 05:30:00 408

原创 git 分支介绍

分支)的情况下进行开发或修复工作。你提到的五种分支类型是在Gitflow工作流(Gitflow Workflow)中常见的,这种工作流旨在提供一个清晰的项目开发流程,确保项目质量的同时提高开发效率。Gitflow工作流通过明确的分支类型和角色,帮助团队在保持项目稳定的同时,高效地进行功能开发和bug修复。在Git版本控制系统中,分支(Branch)是一种非常强大的功能,它允许开发者在不影响主代码库(如。

2024-07-14 03:30:00 759

原创 Sourcetree 下载 安装 配置 使用

一次,确保一致(十分注意:这样你才能达到和别人最新代码同步的状态,同时也能够规避很多不必要的问题)。:将多个同名文件合并为一个文件,该文件包含多个同名文件的所有内容,相同内容抵消。:从远程仓库获取信息并同步至本地仓库,并且自动执行合并(:团队工作时,每个人创建属于自己的分枝(加载创建一个与远程仓库一样的本地仓库。:将本地仓库同步至远程仓库,一般推送(:从远程仓库获取信息并同步至本地仓库。:将暂存区文件上传到本地代码仓库。即将已暂存的文件丢回未暂存的文件。:添加文件到缓存区。:移除文件至缓存区。

2024-07-13 05:15:00 247

原创 [linux]查看文件内容

按空格键:向前翻页。使用箭头键:进行精确的上下滚动。后输入关键字并回车:搜索内容。:显示当前行号等信息。

2024-07-13 03:30:00 147

原创 免费流程图工具 Draw.io Integration安装使用

Draw.io Integration 是 VS Code 上的一个插件,允许用户在 VS Code 中直接创建、编辑和查看 Draw.io 图表,如流程图、UML 图等。

2024-07-12 07:30:00 491

原创 【python学习】将两个 数组连接起来

对于Python的原生列表,你可以使用加号(+)操作符或者extend()方法。对于NumPy数组,你可以使用numpy.concatenate()函数或numpy.append()函数(尽管numpy.append()在性能上可能不是最优选择,因为它总是返回一个新的数组)。在大多数情况下,对于Python列表,使用加号(+)操作符是最直接和最简单的方法。对于NumPy数组,numpy.concatenate()是更常见和推荐的方法,因为它更加高效且易于理解。使用Python原生列表。

2024-07-12 05:00:00 406

原创 HAL_DMA_ERROR_BUSY

是一个在STM32 HAL(硬件抽象层)库中可能出现的错误标志,它表示DMA(直接内存访问)控制器当前正忙,无法接受新的数据传输请求。当尝试启动一个DMA传输操作,但DMA控制器已经处于忙碌状态时,这个错误标志可能会被设置。

2024-07-11 05:30:00 263

原创 linux编写驱动程序常用API

在Linux设备驱动开发中,有许多常用的API,这些API提供了与内核和其他驱动程序交互的功能。9. 设备树(Device Tree)和ACPI。5. I/O端口和内存操作。8. 消息队列、管道和信号。10. 电源管理和热插拔。1. 设备注册与注销。

2024-07-11 04:00:00 436

原创 如何才能在Linux下编写驱动程序

1. 了解Linux驱动开发基础知识。3. 编写驱动程序代码。4. 编译和加载驱动。8. 可选的高级步骤。

2024-07-10 08:00:00 227

原创 写一个字符设备的驱动步骤

以上步骤是一个典型的字符设备驱动编写流程,但具体实现可能因设备和需求的不同而有所差异。在实际编写过程中,建议参考Linux内核文档和相关书籍以获得更详细和准确的信息。

2024-07-10 04:15:00 407

原创 网络模型介绍

网络模型在网络领域中主要指的是用于描述计算机网络系统功能的各种框架,其中最具代表性的两种模型是OSI七层参考模型和TCP/IP四层参考模型。

2024-07-09 06:00:00 832 1

原创 常见的网络协议在不同的模型中层次分布

常见的网络协议根据其功能和作用,分布在OSI七层参考模型或TCP/IP四层参考模型的不同层次中。

2024-07-09 05:45:00 557

libtiff读tiff.rar

libtiff库的源码程序的演示代码,该例子用来演示如何读tiff图像,是初学tiff图像格式的入门程序! (libtiff library procedures demo source code, the examples used to demonstrate how to read tiff images, when a tiff image formats entry procedures!)

2020-04-29

Tiff Image Article.rar

打开Tiff的vc源代码,好用。(the vc open source code and ease of use)

2020-04-29

tifAPI.rar

功能类似libtiff库,此为c语言源码版本。Function similar to libtiff library, this is the c language source version)

2020-04-29

libtiff.lib.rar,libtiff库文件,包含.dll以及.lib

编译libtiff得到的库文件,直接添加后可以直接使用。主要支持windows32位曹祖系统。文件中包含有:libtiff.lib以及libtiff.lib

2020-04-29

read.rar,TTFF,LIBTIFF

利用libtiff库,使用VS2015编译环境将fax4压缩格式的.tiff文件转换为fax3格式的文件。支持多页转换

2020-04-29

空空如也

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

TA关注的人

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