自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LwIP的内存管理(1)

主要内容参照,整理出来自用。LwIP 本质上是对数据的处理,而网络中的数据量通常非常庞大,因此 LwIP 对这些数据的处理必然会消耗系统资源。一套优秀的内存管理策略就显得至关重要,内存分配策略、分配效率等都是衡量系统性能的重要因素。

2025-08-10 22:16:28 702

转载 【转载】FreeRTOS-消息队列

消息队列/* 存储区域的起始地址 *//* 下一个写入的位置 */union} u;/* 等待发送列表 *//* 等待接收列表 *//* 非空闲队列项目的数量 *//* 队列长度 *//* 队列项目的大小 *//* 读取上锁计数器 *//* 写入上锁计数器 *//* 其他的一些条件编译 */} xQUEUE;AI写代码c运行123456789101112131415161718。

2025-08-09 19:32:15 9

原创 ENET_GetRxFrame vs ENET_ReadFrame

若应用层只需直接获取帧的字节流(如解析简单的自定义协议),

2025-08-08 20:41:40 557

原创 LWIP网络接口管理

主要内容参照,整理出来自用。

2025-08-07 21:01:54 358

原创 关于RTOS的状态切换和资源释放逻辑设计

理解抢断式RTOS的运作机制主要需要理解以下一句话:如果最高优先级的任务不主动挂起或者阻塞,意味着其他任务永远不会运行。。

2025-08-06 19:40:40 1033

原创 eclipse类IDE导入现有工程教程

基于 Eclipse 架构的 IDE 有很多,界面上大同小异,以下以MCUXpresso来介绍下如何导入现有工程,以及如何导入非本IDE编译器的工程(仅当做文本编辑器用)。

2025-08-05 21:00:51 332

原创 lwIP 代码解析:sys_arch.c

基于线性同余算法的伪随机数生成器,使用固定种子(12345u),保证了结果的可重现性,适合测试场景。用于调试阶段的断言检查,当条件不满足时打印消息并进入死循环,在非调试模式下可被优化掉。在裸机环境下,则通过 SysTick 中断维护一个全局时间变量。通过互斥锁实现对 TCP/IP 核心操作的保护,同时。函数用于断言检查当前上下文是否有权限执行特定操作,防止线程安全问题。在操作系统环境下,该函数通过。,提供毫秒级的时间戳。

2025-08-04 21:54:33 395

原创 LWIP从FreeRTOS到uC/OS-III的适配性改动

LWIP 适配 uC/OS-III 的改动主要集中在和。

2025-08-03 19:32:58 257

原创 Windows 下 fping 指令使用指南

fping 是 “fast pinger” 的缩写,它可以向一系列 IP 地址发送 ICMP 回声请求。与标准的 ping 程序不同,fping 能够以并行化的方式工作,在发送 ping 请求时无需等待每个请求的响应,而是以 “轮询” 的方式持续发送,直到所有请求发送完毕或达到设定的条件。这种异步操作模式使得 fping 在处理大量主机时,性能远远优于传统的 ping 命令,大大提高了网络检测的效率。

2025-08-02 20:09:34 481

原创 eclipse 类IDE报错: “Open Declaration“期间发生了内部错误。Cannot invokeorg.eclipse.cdt.core.dom.ast.

这个错误通常发生在 Eclipse CDT(C/C++ 开发工具)中,主要原因是 C/C++ 代码的语法分析或索引出现了问题,导致在尝试查看某个函数参数的声明时,Eclipse 无法正确获取参数信息(参数对象为 null)。

2025-08-01 20:48:48 245

原创 <RT1176系列13>LWIP Ping功能入门级应用和基础API解析

本文通过NXP官方SDK讲解如何移植LWIP Ping相关功能的驱动,面向刚入门的小白。官方IDE:MCUXpresso,SDK:MIMXRT1170-EVK。

2025-07-31 20:58:46 1088

原创 <RT1176系列13>LWIP概念介绍

LWIP 由瑞典计算机科学院(SICS)的 Adam Dunkels 等人开发,其设计目标明确,旨在为资源受限的嵌入式系统提供高效的 TCP/IP 协议实现。与传统的 TCP/IP 协议栈相比,LWIP 通过一系列的技术手段,极大地减少了对系统资源的占用。

2025-07-30 20:56:34 540

原创 <RT1176系列12>DMAMUX入门级应用和DMAMUX MAP表

之前在<RT1176系列5>LPUART入门级应用和基础API解析-CSDN博客文章中简要讲述如何引用DMA进行配置,这里继续这篇文章进行一些关于DMA源的配置点。

2025-07-29 20:24:16 952

原创 <RT1176系列11>DMAMUX解读

DMA(直接内存访问,DIrect Memory Access)工作原理:DMA控制器直接在内存和外设之间传输数据,而不需要CPU的干预。优点:极大地提高了数据传输效率,释放CPU资源。适合大批量数据传输,减少CPU负担。缺点:需要额外的硬件支持(DMA控制器)。实现复杂度较高,涉及内存管理和总线控制。RT1176配备两个 DMA 控制器,且相应地配有两个 DMAMUX(DMA 多路复用器)。EDMA(增强型 DMA)位于 CM7(Cortex-M7)域,与 CM7 协同工作;

2025-07-28 19:26:44 722

原创 FLASH 中的程序代码是否一定要搬到 RAM 中运行

这是因为 FLASH 被映射到处理器的地址空间中,与 RAM 一样可被 CPU 直接访问。若程序需要在运行时修改自身代码(如固件升级、动态补丁),而 FLASH 不支持 “边读边写”(多数 FLASH 写入时需暂停读取),则需先将修改代码的程序段搬至 RAM 运行,再通过 RAM 中的程序去更新 FLASH 中的内容。虽然 FLASH 的读取速度通常慢于 RAM,但对于多数低功耗、低主频的嵌入式设备(如传感器、小家电控制器),FLASH 的读取速度足以匹配 CPU 运行需求,无需额外迁移代码。

2025-07-27 15:37:24 306

转载 嵌入式以太网通信移植参考

Bsp 文件下新建一个 ETH 文件夹,将stm32f4x7_eth.h 和 stm32f4x7_eth.c 改为stm32f429_eth放入bsp/ETH中,再stm32f4x7_eth_bsp.c、 stm32f4x7_eth_bsp.h 和stm32f4x7_eth_conf.h 三个文件放入bsp/ETH中,stm32f4x7_eth_bsp改名为stm32f429_phy。TA 为状态转换域, 若为读操作, MAC 输出两个位高阻态,而 PHY 芯片则在第一位时输出高阻态,第二位时输出“0”。

2025-07-26 17:37:15 12

原创 <RT1176系列10>ENET入门级应用和基础API解析(ENET配置)

本文通过NXP官方SDK讲解如何移植ENET的驱动,面向刚入门的小白。官方IDE:MCUXpresso,SDK:MIMXRT1170-EVK。

2025-07-25 21:55:08 729

原创 <RT1176系列9>ENET入门级应用和基础API解析(PHY配置)

本文通过NXP官方SDK讲解如何移植ENET的驱动,面向刚入门的小白。官方IDEMDIO(Management Data Input/Output,管理数据输入 / 输出)是一种用于以太网物理层(PHY)和媒体访问控制层(MAC)之间进行管理通信的标准接口,广泛应用于嵌入式系统和网络设备中。它定义了一套简单的总线协议,让 MAC 能够读取和配置 PHY 的寄存器,从而实现对 PHY 工作状态的监控、模式设置(如速率、双工模式)、故障诊断等功能。1)复位PHY,通过芯片上的RESET管脚拉低拉高给复位信号。

2025-07-24 19:51:37 827

原创 <RT1176系列8>ENET 基础以太网模块解读(MAC与PHY,寄存器配置表)

是数据与物理网络(如网线、光纤)的直接接口。将 MAC 传来的数字信号转换为物理介质(如网线)可传输的电 / 光信号(发送时),或反之将接收的物理信号还原为数字信号(接收时),同时提供速率适配、信号调制解调等物理层功能。MAC 与 PHY 通过标准化接口(如 MII、RMII、RGMII)通信,接口定义了数据、时钟和控制信号(如发送使能、接收准备)。通过 MII 等接口与 PHY 交互,是数据链路层的核心。PHY 属于 OSI 模型的。(第二层),主要负责。(第一层),主要负责。

2025-07-23 21:55:19 947

原创 <RT1176系列7>ENET 基础以太网模块解读(基础通信协议)

IPv6 的头部在 IPv6 数据包的最开头,是按 32 位(4 个字节)一组来排的,长度是固定的,一共 10 组(也就是 40 个字节)。Next Header 字段标识紧跟在 IPv6 首部之后的首部类型,其定义类似 IPv4 中的协议标识符,但新增了用于标识扩展首部的定义。这些扩展首部可插入 IPv6 首部与协议首部之间,从而相应地改变协议首部的位置。首部的字节序遵循前文所述 IP 首部的约定。IP 首部后紧跟的数据,数据中可包含更多协议首部(例如,如协议字段值所指示的 TCP 或 UDP 首部)。

2025-07-22 21:11:20 630

原创 <RT1176系列6>ENET 基础以太网模块解读(特性概述)

RT1176芯片配置两个基础以太网模块:ENET和ENET_1G,地址分配如图。

2025-07-21 21:26:40 471

原创 自己动手写从0到1写嵌入式操作系统 源代码学习笔记<5>

使用快速查表法查找效率很高,时间复杂度为O (1)。本文参考课程为李述铜老师的《自己动手写从0到1写。》,仅用作个人笔记复习和分享。

2025-07-20 21:16:42 164

原创 瑞萨e2 studio CC-RX工具链安装以及编译头文件包含报错问题解决(E0520005)

第一次用瑞萨IDE e2 studio,记录遇到的两个问题。

2025-07-19 16:43:38 250

原创 <RT1176系列5>LPUART入门级应用和基础API解析

本文通过NXP官方SDK讲解如何移植LPSPI的驱动,面向刚入门的小白。官方IDE获取LPUART默认配置结构。

2025-07-18 17:24:07 903

原创 <RT1176系列4>LPUART解读

RT1176芯片配置12个LPSPI模块,对应为LPUART1 ~ LPUART12,地址分配如图。低功耗通用异步收发器(LPUART)模块提供与外部设备的异步串行通信能力。

2025-07-17 19:33:48 1128

原创 <RT1176系列3>LPSPI入门级应用和基础API解析

本文通过NXP官方SDK讲解如何移植LPSPI的驱动,面向刚入门的小白。官方IDE:MCUXpresso,SDK:MIMXRT1170-EVK。

2025-07-16 16:09:58 853

原创 <RT1176系列2>LPSPI解读

RT1176芯片内置6个LPSPI模块,支持主/从模式,具有低功耗特性。主模式下支持4个外设片选,16字收发FIFO,可配置时钟极性与相位,提供全/半双工传输(支持1/2/4位传输)。从模式使用相同移位寄存器,需静态保持TCR配置。模块支持数据匹配功能,可在运行/停止/调试模式下工作(需时钟支持),并支持DMA传输和中断请求。关键特性包括灵活的定时参数、接收数据过滤及32位字长支持,适用于高效SPI通信场景。

2025-07-15 19:46:10 959

原创 <RT1176系列1>启动问题踩坑记录以及经验总结

无法正常烧写基本可以确定是硬件的问题,从RT的启动配置开始分析,硬件主要检查两处,一个是Boot Mode,另一个是Boot Configuration,板子是FLEXSPI启动,Boot Mode配置的是0b10:Internal Boot,没有问题,Boot Configuration是全0,对应的启动Type是FlexSPI1,按理说也没问题,但实际板子有纰漏,NC处接了0Ω的电阻导致启动配置出现异常,拿掉后问题解决。0x3000_0480处的配置则根据不同的NORFLASH进行不同的修改。

2025-07-14 16:40:34 326

原创 MCUXpresso IDE 踩坑经验总结

4、Debug模式和Release模式:NXP官方默认配置两种模式,可以在Bulid路径下更改,二者区别在于编译优化、断言启用、调试信息等,对于嵌入式而言,还要关注两个模式的ld文件,Debug模式默认直接在RAM上加载(省去搬运环节调试更快),Release模式默认在FLASH上加载;5、想查看编译生成的.hex文件或者.dump文件,直接右键二进制文件-Binary Utilties-对应选择即可。1、导入一个新工程编译报错,有可能是因为SDK未安装,在导入的时候会提示你关联你的SDK;

2025-07-11 14:50:15 181

原创 自己动手写从0到1写嵌入式操作系统 源代码学习笔记<4>

如果只是使用同等优先级个数的数组,其实就是把任务切换转为从低到高查找首个置为的元素,这样时间复杂度理论上是O(n),为了提高查找效率,我们可以引入位图的概念。而在进入临界段时,有中断发生,在退出临界段时中断会得到响应,说明临街段只是延迟了中断的响应时间,并没有真正的阻止中断。开关中断,在禁止中断时有触发中断的事件发生,当使能中断时该中断不会在响应,说明开关中断是阻止了中断的发生。就绪表:8个8位元素的数组,每个位表示一个优先级,OSRdyTbl[8]对应8个字节,每个bit位表示该行的该列值。

2025-05-21 19:34:56 293

原创 自己动手写从0到1写嵌入式操作系统 源代码学习笔记<3>

本文主要介绍了嵌入式操作系统中双时间片运行原理和双任务延时原理。首先,SysTick定时器作为系统滴答定时器,用于定期产生中断,其配置涉及LOAD、VAL、CTRL等寄存器,用于设置中断间隔和使能定时器。其次,SystemInit函数中的条件编译代码用于处理未对齐内存访问的异常。在任务管理方面,空闲任务在所有其他任务阻塞时运行,主要用于防止CPU空转和统计任务负荷。空闲任务钩子函数可用于执行低优先级功能、测试系统处理裕量和配置低功耗模式,但需遵守不阻塞和快速返回的规则,以确保系统资源的有效回收。

2025-05-19 19:55:42 588

原创 自己动手写从0到1写嵌入式操作系统 源代码学习笔记<2>

xPSR置位为1目的是设置Thumb模式,这里拓展一下Thumb模式和ARM模式的区别,这两者是ARM架构下的不同指令集,在指令长度、性能、代码密度上有一定区别,在RTOS中,任务通常要求运行在Thumb模式,主要是相比于ARM模式,Thumb模式代码密度更高,更节省存储空间,同时中断响应更快。void (*entry)(void *)是一个函数指针类型,它指向一个返回void并接受耦合void *类型参数的函数,简单来说,entry就是一个。本文参考课程为李述铜老师的《自己动手写从0到1写。

2025-05-07 19:29:30 396

原创 自己动手写从0到1写嵌入式操作系统 源代码学习笔记<1>

SVC 用于产生系统函数的调用请求。例如,操作系统不让用᠋户程序直接访问硬件,而是通过提供一些系统服务函数,用᠋程序使用 SVC 发出对系统服务函数的呼叫请求,以这种方法调用它们来间接访问硬件。因此,当用᠋程序想要控制指定的硬件时,它就会产生一个 SVC 异常,然后操作系统提供的 SVC 异常服务例程得到执行,它再调用相关的操作系统函数,后者完成用᠋程序请求的服务。知识点3:STR指令,STR指令是LDR指令的逆操作,LDR是把后者的值加载到前者,STR是把前者的值写入到后者。(如RTOS中的任务调度)。

2025-05-06 19:57:56 189

原创 简单分析龙芯start.S部分指令

mfc0,mtc0 : mfc0 从协处理器0的寄存器中读出数据,f表示from;or, xor, xori :or或运算,xor异或运算, xori 中的i表示立即数,意味着和一个数字进行异或运算;lui 加载立即数到高16位,u表示高16位uper,l表示加载(load),从内存读数据到寄存器。sb s表示存储(store),表示是从寄存器写入到内存,b表示字节,表示该指令只操作一个字节;bal b表示跳转(branch),bal表示跳转的同时,保存返回地址到ra寄存器;

2024-05-29 19:24:00 243

原创 windows环境下龙芯ejtag常用的实用指令

program_cachelock XXXX.bin 0x20000,这里引申出一个问题就是每次烧写的时候,是擦除所有flash还是根据烧写代码的大小而决定擦除的大小,根据实际经验来看,是只会擦除重新写代码的片区;2、调试相关:(1)set:暂停CPU;3、通过d4指令查看memory存储的值,该指令不可看flash的值,只能把flash的值映射到ram上再通过d4查看:其中d4/d2/d1只是一次性显示出来的字节长度不一样,d8根据描述是可以改memory的值,但具体没有操作过;

2024-05-21 19:18:03 383

原创 bootloader+和内存地址映射相关

存储地址是代码编译的地址,是指令的存储位置,运行地址是代码编译完成后的实际地址,可以通过Map查看一些全局变量的偏移位置(这个是这些变量的实际地址),实际运行过程中,会将一些代码从Flash里加载到SRAM、DRAM中运行,这样做的好处一是速度更快,二是避免flash空间不够,如果程序是在flash里运行,则运行地址和加载地址是相同的。“如果程序是在ram里运行,但程序是存储在flash里,则运行地址指向ram,而加载地址是指向flash。做单片机固件下载校验,过程中遇到的一些知识点整理;

2024-05-15 19:51:37 227

空空如也

空空如也

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

TA关注的人

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