自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TCP/IP、socket、http

简单来说,socket 通讯就是两个(或多个)节点之间通过网络进行数据交换的过程,其中一个节点发起请求,另一个节点响应请求,它们通过 socket 接口实现数据的发送和接收。在 socket 通讯中,"节点" 通常指参与网络通信的端点,也就是进行数据发送和接收的实体。每个节点在网络中都有唯一的标识,由。,这两者共同构成了网络中唯一标识一个通信端点的 “地址”,确保数据能够准确地在两者之间传输。在 socket 通讯中,客户端和服务器。端口号的作用是区分同一设备上的不同服务。IP的作用是是定位网络中的设备。

2025-08-12 13:34:44 189

原创 关于海思的内核

从 SPI Flash 地址 0x1E00000 读取 0x100000(1MB)数据到内存地址 0x82000000(读取 logo 分区内容)3. saveenv:将上述设置的环境变量(bootargs 和 bootcmd)保存到 Flash 中,确保下次启动时仍能生效。3. rtoofs 20mb:用于存储系统运行所需的文件和数据,为系统提供文件管理等功能。:启动视频层(参数包含缓冲区地址和 1920x1080 分辨率):JPEG 数据地址(logo 数据存放地址):JPEG 数据大小(1MB)

2025-08-11 18:21:20 427

原创 makefile

【代码】makefile。

2025-08-06 12:00:39 91

原创 平台总线 和 字符设备驱动设备驱动

驱动的 “资源容器”

2025-08-05 21:38:23 144

原创 FT5X06 触摸芯片

FT5X06 触摸芯片除了 I2C 部分,还有另外两个 GPIO 分别为中断引脚和复位引脚。

2025-08-05 17:47:59 102

原创 stdin、stdout 、stderr

是三个标准的输入输出流,用于程序与外部环境(如终端、文件等)进行数据交互。它们本质上是预定义的文件指针(

2025-08-05 14:01:38 183

原创 IAP相关

stm32f103ZET6+W25Q64外部flash+AT24C02eeprom。

2025-08-04 21:48:51 857

原创 查找位置函数

strstr是 “字符串专属查找工具”,依赖\0识别字符串边界,适合纯文本处理。memmem是 “通用内存查找工具”,不依赖\0,通过显式长度参数控制搜索范围,适合二进制数据或特殊字符串。在解析协议(如之前提到的 GNSS 报文)时,memmem更常用,因为协议数据可能包含\0或二进制内容,无法用strstr正确处理。// 1. 查找协议头g_gnss_msg_buf_process + index, // 起始地址g_gnss_msg_len_process - index, // 剩余长度。

2025-08-03 21:57:11 212

原创 malloc、calloc、realloc

(2)用 调整内存大小 的特殊行为

2025-08-03 21:50:08 256

原创 cpy相关函数区分

功能:将 指向的字符串(包含 )完整复制到 ,直到遇到 的 为止。 特点: 不检查 缓冲区大小,若 长度超过 容量,会导致缓冲区溢出(覆盖其他内存)。 自动复制 的结束符 到 。 适用场景:仅在确定 长度小于 时使用(如常量字符串复制)。2. :有限制的复制(部分安全) 函数原型: 功能:最多复制 个字符从 到 。 特点: 限制复制长度为 ,避免缓冲区溢出(相比 更安全)。 关键缺陷: 若 长度 >= ,

2025-08-03 21:44:02 429

原创 C语言的各种区

(const int a,将变量修饰为常量)字符串常量、const 常量。

2025-07-28 19:37:21 97

原创 大端和小端

大端(Big-Endian)和小端(Little-Endian)是计算机存储多字节数据时的两种字节序规则,核心区别在于。

2025-07-28 19:34:34 387

原创 STM32启动流程

我们要实现Bootloader区代码在运行中跳转去运行APP区代码,实现的效果应该和上电复位后直接运行APP区代码效果一样,所以通用寄存器R0-R12,存储返回地址R14 等都不需要保护起来,我们只需要关心修改。当你在 C 语言中调用一个函数(包括通过函数指针调用)时,编译器会生成对应的汇编指令,这些指令的最终目的就是修改 PC 寄存器的值,让其指向函数的入口地址。)并将 PC(程序计数器)设置为该值,是实现程序从当前区域(如 B 区)跳转到 A 区执行的核心操作。B区跳到A区是单向的,无法回头。

2025-07-28 19:30:58 886

原创 STM32时钟源

STM32 微控制器具有灵活且复杂的时钟系统,为不同外设和核心提供精确的时钟源。

2025-07-28 19:03:58 149

原创 keil编译.bin

命令:

2025-07-25 18:16:46 85

原创 xmodem

接收方对收到的所有原始数据重新计算 CRC,若结果与收到的校验值一致,则认为数据未被篡改或出错如果不一致,则可确定数据在传输 / 存储过程中出现了错误。CRC(循环冗余校验码)校验的核心原理就是对输入的所有数据进行计算,生成一个固定长度的校验值。== 一字节报头+一字节包序号+一字节反包序号+128字节数据+2字节CRC校验。发送方将原始数据(所有字节)按 CRC 算法计算出校验值,随数据一起发送。

2025-07-24 16:57:35 119

原创 联合体知识点

应用场景:接收到16位数据需通过IIC转发,但是IIC一次收发8位数据,所以需要将16位拆为两个8位分别发送。联合体(union)和结构体(struct)的核心区别在于。

2025-07-24 16:33:12 250

原创 文件 I/O 于标准 I/O

1. 低级 I/O 直接与操作系统内核交互,无缓冲区(默认),提供更精细的控制能力,速度快。一般用于操作设备文件 /dev/...2. 标准 I/O 基于低级 I/O 封装,提供缓冲区机制和格式化操作,可以移植性高。一般用于操作普通文本文件。低级 I/O 函数标准 I/O 对应函数主要特点open()的flags参数更丰富(如O_RDONLYO_WRONLY等),mode指定文件权限;fopen()的mode是字符串(如 "r"、"w" 等)read()返回实际读取的字节数;fread()

2025-07-24 16:07:24 403

原创 关于全局标志位记录状态变化

此时可以发现,BootStateFlag 同时包含了两种状态。这种方式可以高效地在一个变量中同时记录多个独立的状态,且操作时不会影响其他已设置的标志位。

2025-07-24 10:04:31 110

原创 关于单片机的无符号整型uint32_x

足以容纳 OTA 过程中所有可能的状态(如升级阶段、错误类型、校验结果等)。(1 个字符用 4 字节存储),完全没有必要。,最多只能表示 8 个状态,可能不够用。是 “标志位变量”,通常用于。),而字符串在计算机中本质是。(通过位运算实现)。

2025-07-23 10:07:54 277

原创 SPI的收发(W25Q64外部flash 和 内部flsah)

1. SPI读:通过循环调用SPI1_ReadWriteByte,将wdata数组中的数据逐个发送。读数据时,从机返回的字节通常无意义,因此不处理返回值。因此 “发送” 和 “接收” 是绑定的(即使只需要读或写,也必须进行双向操作)。串口和SPI为全双工模式,独立收发线,默认支持同时双向传输。IIC为半双工,同一时刻只能单向传输。,SPI的收发类似于一个轮盘操作,(不影响从机输出)。

2025-07-22 16:47:01 168

原创 关于指针与数组。普通指针、数组指针、指针数组

这样修改后发现两个打印的地址差了四个字节,因为这里地址取的是(*p)的地址,也就是变量a的起始地址,即a[0]的地址。p+1改变了指向的地址,即偏移4个字节(int),即a[1]的地址。两个打印相同,皆为指针p的地址。因为p+1改变的是p存储的内容跟,即它指向的地址。指针的+ - 操作改变的是指针指向的地址,而不是指针本身。3.a的首地址+8字节偏移量(数组整体字节大小)输出结果:1.a的首地址,&a[0]2.a的第二个地址,&a[1]

2025-07-22 10:49:07 151

原创 iic子系统和时序

2. 确保在SCL为高电平时,SDA为稳定的低电平。应答信号:1. 第九个时钟脉冲前将SDA拉低。数据和应答信号都规定。要不然容易被误认为起始或停止信号。

2025-07-21 18:32:05 142

原创 系统滴答定时器配置延时函数

【代码】系统滴答定时器配置延时函数。

2025-07-21 18:20:00 374

原创 串口输出打印信息

方法二:重新一个函数,结合va_list和vsprintf(关于。

2025-07-21 16:48:25 209

原创 关于抢占式优先级,保证每个任务都可以执行

**`vTaskDelayUntil()` 比 `vTaskDelay()` 更适合周期性任务**(避免时间漂移)。- **高优先级任务必须让出 CPU**(`vTaskDelay()` 或事件驱动),否则低优先级任务会被饿死。- **Task4(低优先级)**:模拟通信任务(如CAN发送),每1000ms执行一次。- **Task3(中优先级)**:模拟状态计算(如SOC估算),每500ms执行一次。- **`vTaskDelayUntil()`**:确保任务按固定周期执行,避免时间漂移。

2025-07-20 14:52:53 658

原创 各种通讯模块输入输出配置

**浮空输入(GPIO_MODE_INPUT_FLOATING)** 或 **上拉输入(GPIO_MODE_INPUT_PULLUP)**- **浮空输入(GPIO_MODE_INPUT_FLOATING)** 或 **上拉输入(GPIO_MODE_INPUT_PULLUP)**- **开漏输出(GPIO_MODE_OUTPUT_OD)** + **上拉电阻**(外部或内部)- 原因:I²C是开漏总线,支持多设备线与逻辑。- **推挽输出(GPIO_MODE_OUTPUT_PP)**(主机模式)

2025-07-20 13:15:27 291

原创 驱动中device与driver的API函数

待更新。

2025-07-15 11:22:25 277

原创 linux中断

中断是指在 CPU 正常运行期间,由外部或内部事件引起的一种机制。当中断发生时,CPU会停止当前正在执行的程序,并转而执行触发该中断的中断处理程序。处理完中断处理程序后,CPU 会返回到中断发生的地方,继续执行被中断的程序。中断机制允许 CPU 在实时响应外部或内部事件的同时,保持对其他任务的处理能力。中断的执行需要快速响应,但并不是所有中断都能迅速完成。此外,Linux 中的中断不支持嵌套,意味着在正式处理中断之前会屏蔽其他中断,直到中断处理完成后再重新允许接收中断,

2025-07-14 15:01:35 245

原创 设备树知识点

内容的学习中,我们使用 platform_device 结构体来对硬件设备进行描述,这是一种传统的平台总线设备描述方式。每个 platform_device 结构表示一个特定的硬件设备,并通过注册到平台总线上来使得内核能够与该设备进行通信和交互。为了克制设备平台所导致的代码重复杂乱,进而引入。名称、资源(如内存地址、中断号等)、设备驱动程序等信息。

2025-07-14 10:12:33 137

原创 lora网关

若利用延时处理按键消抖,hal库里用systick中断实现延时,如果想在按键触发中断中使用延时,就得把默认的systick优先级由默认的15升高,这里systick升到2,gpio的按键为3.所需配置的引脚,SPI传输,PG13复位(输出引脚,推挽输出),PE2忙碌(输入引脚,浮空输入)PE6PE5输出。

2025-07-11 20:21:38 212

原创 stm32与ESP32-C3通过串口连接

ESP32-C3 是一款安全稳定、低功耗、低成本的物联网芯片,搭载 RISC-V 32位单核处理器,支持2.4 GHz和(LE)。ESP32-C3本身就可以作为一个单片机使用,但是我们这里只是把ESP32-C3作为一个Wi-Fi/蓝牙模块使用。STM32与ESP32-C3使用串口进行通讯。STM32可以给ESP32-C3发送命令,这种命令叫指令。首先通过pc串口ESP32中烧写ESP-AT固件,ESP-AT 是基于 ESP-IDF 实现的软件工程。

2025-07-09 17:17:39 350

原创 stm32Cubmax的配置

2.2.在时钟配置选项中,选择外部高速晶振作为时钟源;选择9倍频,得到72Mhz的系统时钟;设置APB1为二分频选则,得到36Mhz;设置APB2为72Mhz.2.1. 在RCC(复位和时钟控制)中,先配置外部高速晶振和外部低速晶振。1.在系统中,将debug改为单线调试。

2025-07-09 16:52:52 286

原创 关于tcp握手挥手

而接收方通过 ACK 告诉发送方:“我已经成功收到了截至某个序列号的数据,请继续发送后续数据”。这种机制是 TCP 实现可靠传输的基础,确保发送方知道哪些数据需要重传,哪些已成功交付。TCP 是可靠传输协议,发送方会给每个字节的数据分配一个唯一的。ACK 本身不直接表示数据长度,但可以通过。在 TCP 通讯中,例如:发送方上次发送的起始序列号是。

2025-07-09 15:49:42 252

原创 rtos内存管理

FreeRTOS 将内存分配 API 保留在其可移植层,提供了五种内存管理算法:

2025-07-09 15:03:13 141

原创 rtos事件标志组

如果 configUSE_16_BIT_TICKS 设置为 1,则事件组内实现的位数(或标志数)为 8;事件标志组(Event Flags Group)和信号量(Semaphore)都是FreeRTOS中用于任务同步和通信的机制,但它们在用途和行为上有一些关键的区别。事件标志组就像是一个共享的标志牌集合,每个标志位都代表一种特定的状态或事件。任务可以等待或设置这些标志位,从而实现任务之间的协同工作。每个标志位通常代表一个特定的状态或事件,任务可以等待某些标志的发生或者设置标志来通知其他任务。

2025-07-09 14:52:20 648

原创 Linux的互斥锁、Linux的POSIX信号量(二值、计数)、RTOS的二值信号量

POSIX 标准指出系统的最大限制值至少要为 32767。计数信号量可用于表示多个可用资源,当线程获取信号量时,信号量值减 1,释放信号量时,信号量值加 1,其值可以根据资源的使用和释放情况在允许范围内变动。其中rtos的二值信号量和linux的POSIX二值信号量本质一致,都是通过信号量置0 or 1,来释放与获取。POSIX 信号量分为。,主要用于实现互斥功能,类似互斥锁。

2025-07-08 17:48:00 262

原创 rtos信号量

FreeRTOS中的信号量是一种用于任务间同步和资源管理的机制。信号量可以是二进制的(只能取0或1)也可以是计数型的(可以是任意正整数)。信号量的基本操作包括“获取”和“释放”。比如动车上的卫生间,一个卫生间同时只能容纳一个人,由指示灯来表示是否有人在使用。适用于对资源的互斥访问,控制任务的执行顺序,或者限制同时访问某一资源的任务数量。存储和传递消息的数据结构,任务可以发送消息到队列,也可以从队列接收消息。用于任务之间的数据通信,通过在任务之间传递消息,实现信息的传递和同步。

2025-07-08 15:53:06 192

原创 关于数组和数组指针的取值or取地址细节

【代码】关于数组和数组指针的取值or取地址细节。

2025-07-08 15:33:44 354

原创 rtos消息队列

因为同一个队列可以被多个任务读取,因此可能会有多个任务因等待同一个队列,而被阻塞,在这种情况下,如果队列中有可用的消息,那么也只有一个任务会被解除阻塞并读取到消息,并且会按照阻塞的先后和任务的优先级,决定应该解除哪一个队列读取阻塞任务。因为同一个队列可以被多个任务写入,因此可有会有多个任务因等待统一个任务,而被阻塞,在这种情况下,如果队列中有空闲的位置,那么也之后一个任务会被解除阻塞并往队列中写入消息,并且会按照阻塞的先后和任务的优先级,决定应该解除哪一个队列写入阻塞任务。若接收方变更,发送方代码需修改。

2025-07-08 14:44:22 765

空空如也

空空如也

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

TA关注的人

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