- 博客(123)
- 收藏
- 关注
原创 计算机体系结构之多级缓存、缓存miss及缓存hit(二)
多级缓存、缓存miss以及缓存hit存在的意义是为了保持成本效益的同时,尽可能地提高计算机系统的性能和效率。它们是现代处理器设计中关键的元素,对于提高用户体验和系统吞吐量是占据至关重要的一环。
2024-11-07 08:00:00
1744
2
原创 微控制器(MCU)如何运行存储在Flash的程序???
以上应该是可以帮助大家了解关于存储在Flash的程序至RAM运行的过程,当然,可能涉及其他的知识点(缓存机制、为什么要有缓存?、缓存MISS会发生什么?、多级缓存的目的是什么?又有什么优点?。。。。。。)大家不是很了解,作者会持续更新维护文章,充分将各个知识点进行相关联。这里也解释下为什么不在此文章中做发散,嵌入式领域知识体系之广泛,并不能通过寥寥万字/十几万字可以解释的,其知识体系在兼容的同时是不断更新迭代,做这一行毕生都将持续学习,所以作者只能针对单个知识点逐一讲解。
2024-11-05 11:00:04
2924
1
原创 C语言函数指针及其应用
在C语言中,函数指针的应用是非常广泛的,也许初学C的新星暂未接触,初入嵌入式行业者暂未实践,故,最近会针对C语言的实战应用以及作者在项目中的所见所闻所解决的问题一一盘点。
2024-10-24 10:33:17
1198
原创 Modbus协议概述及实例详解(二)附源码
通过上一篇《Modbus协议概述及实例详解(一)》相信大家已经了解到Modbus的相关原理以及应用,也了解到了Modbus中在RTU/ASCII/TCP三种协中必不可少协议RTU协议。本章将详细讲解关于Modbus RTU协议的相关内容并附带源码一份,以帮助有需要的读者朋友可以快速开发迭代自己的软件。
2024-10-21 14:27:11
1562
原创 Modbus协议概述及实例详解(一)
Modbus是一种串行通信协议,最初是由Modicon公司(现为施耐德电气的一部分)在1979年开发,用于实现PLC之间的通信。由于其开放性和可靠性,Modbus已成为工业领域事实上的标准通信协议之一。当然啦,在嵌入式行业也同样流行,比如常见的电源行业,开关电源、模拟电源和数字电源等。
2024-10-21 10:58:27
662
原创 原码、反码、补码与移码详解
在计算机系统中,原码、反码、补码与移码是用来做什么的?分别又有什么作用?它们为什么会出现?下面通过这篇文章,咱们就来谈谈四码的相关知识点。
2024-10-19 12:51:19
1299
原创 基于IO模拟IIC与SPI驱动实现
最近项目上,由于一些变更问题,导致硬件设计上未考虑到相关GPIO是否支持硬件驱动,考虑到这两个驱动的应用场景并不普遍,基本上只有在下电与Boot升级时才可以会被应用(相信有经验的朋友以及猜出来是什么功能了),具体功能就不详说了,我们直接讲解关于IIC与SPI的模拟驱动吧。
2024-10-17 09:54:37
1201
原创 从零认识操作系统任务应用及原理
如:A/B/C三个任务均会调用函数Func()优先级由高到低,且为抢占式调度,当B任务在运行时调用函数Func(),正在函数Func中,此时A任务为就绪态,那么A任务会获取到CPU控制权,并允许函数Func(),此时是有可能破坏原任务的数据的,因为两任务有可能共用一套数据。解:在单一CPU情况下,不存在真正的多任务机制,存在的只有各个任务轮流获取CPU控制权的占用,所以其本质还是单任务或者说裸机运行,区别是在于有一个大管家管理各个任务在各个任务需要时做出最优判断,并将CPU控制权给到其任务。
2024-10-14 09:43:06
1149
原创 深入解析CAN总线Bus-off机制:从物理故障到系统表现
本文深入分析了CAN总线的Bus-off机制在不同物理故障下的表现。通过对比四种典型短路故障,揭示了显性和隐性状态对总线行为的影响:当总线无法形成显性电平(如CANH对地短路)时,节点会因发送错误快速进入Bus-off状态;而当总线被锁定在显性状态(如CANH对电源短路)时,节点不会报Bus-off但会导致网络瘫痪。文章指出单一Bus-off机制的局限性,建议采用应用层心跳、硬件监控等多层次诊断策略提升系统健壮性。这对理解CAN协议底层原理和设计可靠通信系统具有重要启示。
2025-12-08 15:46:55
768
原创 这是一篇为1024程序员节准备的文章,希望能引发你的共鸣
摘要:本文以1024程序员节为背景,将程序员比作"内存世界的架构师",通过Heap内存管理的发展历程,生动展现了程序员思维方式的演进。从Heap_1的简单分配到Heap_5的复杂规划,再到栈溢出检测和内存块推迟合并等优化技术,体现了程序员构建稳定、高效系统的智慧与执着。文章以诗意语言致敬程序员在二进制宇宙中构建秩序、对抗混沌的平凡而伟大的工作,号召程序员在节日里为自己付出的心血干杯。
2025-10-23 09:43:46
571
原创 深入理解TC3XX的ECC策略:为汽车电子的可靠性保驾护航
英飞凌AURIX TC3XX系列MCU采用ECC(纠错码)技术保障存储器可靠性,主要用于检测和纠正由宇宙射线、电磁干扰等引起的随机比特翻转错误。其SEC-DED机制能自动纠正单比特错误并检测双比特错误,但无法防范程序逻辑错误(需MPU防护)。ECC通过实时计算校验码实现写入保护,采用读-修改-写策略处理非对齐写入。该技术作为物理层防护手段,与MPU协同工作,共同提升汽车电子系统的功能安全等级。
2025-10-15 10:17:14
739
原创 AES工作模式详解:从ECB到GCM。如何选择最适合的加密方式
本文深入解析AES加密的四种工作模式:ECB、CBC、CTR和GCM。ECB模式简单但安全性差,已遭淘汰;CBC引入随机性但仍存在漏洞风险;CTR高效但需确保Nonce唯一性;GCM作为AEAD模式兼具加密与认证功能,是现代加密的首选。通过真实案例对比各模式的优缺点,建议新系统优先采用GCM模式,并严格遵循安全实践。加密模式的选择直接影响系统安全,开发者需根据需求谨慎决策。
2025-08-06 13:14:57
1645
原创 MISRA C-2012准则之控制语句表达式
MISRA-C:2012是汽车产业软件可靠性协会制定的C语言开发标准,旨在提升嵌入式系统的安全性、可读性和可维护性。该标准对控制语句表达式提出严格要求:循环计数器必须使用整型而非浮点型;for循环需包含完整的三要素(初始化、条件、更新);控制语句需提供有效退出条件避免死循环;if和循环条件必须使用布尔表达式而非赋值或非布尔值。通过规范化的代码编写方式(如避免浮点循环计数器、完整for结构等),能有效预防程序错误,提高代码可靠性。这些规则适用于汽车、航天、医疗等多个对安全性要求高的领域。
2025-07-23 09:26:27
551
原创 MISRA C-2012准则之副作用
MISRA-C:2012是汽车产业软件可靠性协会制定的C语言开发标准,旨在提升嵌入式系统的安全性、可移植性和可靠性。该标准对副作用处理提出了严格要求:禁止在初始化列表、sizeof操作数中使用有副作用的表达式;要求确保表达式副作用顺序一致性;避免在逻辑运算符右侧使用持续副作用;不推荐使用赋值运算结果。通过规范副作用处理,可有效预防未定义行为,提高代码可靠性。该标准已从汽车行业扩展到航天、医疗等多个安全关键领域。
2025-07-21 09:38:40
1542
1
原创 MISRA C-2012准则之基本数据类型
摘要:本文介绍了MISRAC-2012标准的基本数据类型规范,该标准旨在提升嵌入式系统安全性、可靠性和可移植性。文章详细列举了数据类型操作的正确示例(如操作数类型匹配、字符运算、显式类型转换等)和错误示例(如类型不匹配、隐式窄类型转换、字符溢出等)。同时强调编写代码时应注意使用显式转换、避免隐式类型转换、确保运算不溢出等要点,并提供了相关文章的参考链接。MISRAC标准虽不能完全避免程序问题,但能有效提高代码质量。
2025-07-18 14:50:55
453
原创 MISRA C-2012准则之指针类型转换
MISRA-C:2012是汽车产业软件可靠性协会制定的C语言开发标准,旨在提升嵌入式系统的安全性、可移植性和可靠性。该标准涵盖环境准则、代码处理、注释规范、数据类型等关键内容,特别对指针类型转换作出严格规定:禁止函数指针与整型转换、不完整类型指针转换、删除const限定等操作,仅允许字符指针与void指针间的有限转换。标准通过规范编码实践,显著提高代码的可读性、可维护性和安全性,已被广泛应用于汽车、航天、医疗等多个领域。
2025-07-18 14:50:44
680
原创 MISRA C-2012准则之表达式
MISRA-C:2012是汽车产业软件可靠性协会制定的C语言开发标准,旨在提升嵌入式系统的安全性、可移植性和可靠性。该标准涵盖代码规范、表达式处理、数据类型等多个方面,要求明确运算符优先级、限制移位操作数范围、避免逗号运算符和无符号溢出等问题。其应用已从汽车扩展到航天、医疗等多个领域,通过规范编码实践有效提升代码质量。标准建议使用括号明确运算顺序,检查移位操作范围,拆分复杂表达式,并预防无符号整数回绕,从而提高代码的可读性、可维护性和安全性。
2025-07-18 14:50:34
740
原创 MISRA C-2012准则之初始化
本文介绍了MISRA-C:2012标准在C语言开发中的应用,重点阐述了变量初始化的规范要求。MISRA-C标准由汽车产业软件可靠性协会制定,旨在提升嵌入式系统的安全性、可靠性等五大维度性能。文章通过正反示例详细说明了自动变量、结构体、数组和联合体的正确初始化方法,并列举了未初始化、部分初始化等常见错误。特别强调在严格遵循规范时应明确指定数组大小、完全初始化结构体成员,避免重复初始化等注意事项。这些规范要求对提高代码质量和系统可靠性具有重要意义。
2025-07-18 14:50:11
423
原创 MISRA C-2012准则之声明与定义
MISRAC是由MISRA协会制定的C语言开发标准,旨在提升嵌入式系统的安全性、可移植性和可靠性。最新版本为MISRA-C:2012,广泛应用于汽车、医疗、航天等领域。标准包含14项声明与定义规则,其中10项为必需遵守,4项为建议。核心要求包括:显式声明类型、规范函数原型、确保声明一致性、限制外部链接使用、禁止重复定义等。这些规则通过强制代码规范性,从可靠性、可读性、可维护性等五个维度提升软件质量。典型示例如禁止restrict限定词、要求枚举值唯一等,帮助开发者避免常见编程错误。
2025-07-17 14:12:15
717
1
原创 MISRA C-2012准则之常量
MISRAC是由汽车产业软件可靠性协会制定的C语言开发标准,旨在提升嵌入式系统的安全性和可移植性。标准涵盖多个行业应用,最新版本为MISRA-C:2012。本文重点介绍了MISRAC关于常量的四项规范要求:禁止使用八进制常量、无符号常量必须加后缀、避免小写'l'后缀、限制字符串赋给非常量指针对象。通过代码示例展示了违规情况,这些规范有助于提高代码的可靠性、可读性和可维护性。MISRAC虽不能完全避免程序错误,但能有效预防潜在问题。
2025-07-17 14:02:42
368
原创 MISRA C-2012准则之标识符
MISRAC是提升嵌入式系统安全性的C语言开发规范。其标识符命名规则要求:外部标识符必须唯一区分(避免跨文件冲突);同一作用域内禁止重复声明;内部标识符不得隐藏外部标识符;宏、typedef、标签名称必须唯一;具有外部/内部链接的标识符应避免重复。通过9个典型错误示例(如全局变量冲突、宏重定义、变量隐藏等),展示了违反规则导致的编译或链接问题。这些规范能有效提升代码可靠性、可读性和可维护性,适用于汽车、航天等高安全要求领域。
2025-07-17 13:57:21
507
原创 MISRA C-2012准则之注释
摘要:MISRAC是MISRA制定的C语言开发标准,旨在提升嵌入式系统的安全性和可移植性,广泛应用于汽车、航天等多个领域。最新版本为MISRA-C:2012,具有提升可靠性、可读性等优势。文章列举了5种常见注释错误:嵌套注释、//注释中使用行拼接、混合注释方式导致意外注释、注释干扰字符串字面量以及注释干扰预处理指令。这些错误会导致语法问题或代码逻辑错误,违反了MISRAC规范要求。正确使用注释对保证代码质量至关重要。
2025-07-17 13:39:04
416
原创 MISRA C-2012准则之未使用的代码的处理
MISRAC是为提高嵌入式系统安全性和可移植性制定的C语言标准,广泛应用于汽车、航天等领域。文章重点阐述了未使用代码的处理规范,要求删除所有无效代码,包括死代码、未使用的类型声明、标签、宏定义、局部变量、函数参数和全局变量等8类情况,并通过具体代码示例说明这些错误及修正方法,以提升代码的可靠性、可读性和可维护性。
2025-07-17 13:30:08
353
原创 MISRA C-2012准则之标准C环境准则
MISRA-C是提高嵌入式系统安全性和可移植性的C语言开发标准,广泛应用于汽车、航天等领域。文中列举了8个违反标准C规范的典型错误示例,包括未定义行为(如整数溢出、解引用空指针)、未指定行为(如函数调用顺序、位域存储顺序)、语言扩展使用(如GCC内置函数)以及违反语法标准(如在不支持的编译器中使用C11特性)等问题。这些示例展示了开发中容易忽视但可能导致严重后果的编码问题,强调了遵循MISRA-C规范对于提升代码可靠性、可读性和可维护性的重要性。
2025-07-17 11:25:24
1107
1
原创 理解TCP如何稳定、高效地 工作在网络上的关键
本文深入解析TCP协议的核心机制,包括拥塞控制算法、TCP选项字段和异常处理策略。在拥塞控制方面,详细介绍了慢启动、拥塞避免、快速重传和快速恢复等核心思想,以及Reno、NewReno、Cubic和BBR等算法演变。TCP选项字段部分阐述了MSS、窗口缩放、时间戳、SACK等关键选项的功能。异常处理章节则分析了丢包、乱序、超时重传、连接中断等常见问题的应对机制。文章通过系统梳理TCP协议的复杂设计,展现了其在保证可靠传输方面的强大能力,同时指出不同实现算法可能带来的公平性挑战以及现代网络环境带来的新问题。
2025-07-15 14:42:21
953
1
原创 低代码开发与低代码平台的好处
低代码开发正成为数字化转型的重要工具。文章指出,在IT人才短缺和疫情加速数字化的背景下,低代码平台通过可视化开发环境让非技术人员也能快速创建应用,显著缩短开发周期(降低74%成本),缓解IT积压。其优势还包括提高安全性、减少项目失败等。Gartner预测,到2024年65%的应用将采用低代码开发。低代码不仅满足业务需求,更能帮助企业在变革中保持竞争力,是应对当前挑战的有效解决方案。
2025-07-14 17:12:34
660
原创 RTOS:创建队列-移除任务TCB,将其添加到就绪列表(含源码分析))
文章摘要:本文详细分析了FreeRTOS内核中xTaskRemoveFromEventList()函数的实现逻辑。该函数负责从事件列表中移除最高优先级任务并将其加入就绪列表。分析内容包括:1) 通过事件列表获取任务控制块;2) 根据调度器状态分别处理任务(直接加入就绪列表或暂存待处理列表);3) 单核/多核环境下的优先级处理机制;4) 支持低功耗模式的tickless idle相关处理。代码片段展示了完整的实现细节,包括断言检查、列表操作和上下文切换标志设置等关键环节。该函数是FreeRTOS任务调度机制的
2025-06-26 14:59:48
821
原创 RTOS:创建队列-队列数据结构初始化(含源码分析)
RTOS队列初始化函数xQueueGenericReset解析:该函数用于重置FreeRTOS队列或初始化新队列,首先检查队列有效性并进入临界区保护数据。在临界区内重置队列指针、计数器及锁状态,并根据xNewQueue参数决定是否唤醒等待任务或初始化等待列表。最后退出临界区返回操作结果,确保队列操作的原子性和数据一致性。该函数是RTOS队列管理的核心操作之一,体现了操作系统底层对数据同步和任务调度的关键处理机制。
2025-06-25 16:06:32
341
原创 RTOS:创建队列-初始化新队列过程函数(含源码分析)
本文分析了RTOS内核中队列初始化函数prvInitialiseNewQueue的实现细节。该函数主要完成新队列的基本配置:根据是否分配存储空间设置队列头指针,初始化队列长度和元素大小等核心参数,并通过条件编译支持跟踪功能和队列集扩展功能。函数采用模块化设计,通过编译器指令灵活控制功能开关,体现了RTOS可配置、高效的特点。该初始化过程为后续队列操作提供了基础,是RTOS内核实现的关键组成部分。
2025-06-25 14:52:04
388
原创 ADC:流水均值滤波法(平滑ADC采样数据)
流水均值法(滑动窗口平均法)是一种简单有效的数字滤波技术,用于平滑ADC采样数据并抑制噪声。该方法通过维护一个固定大小的窗口,对最近的N个采样值取平均来输出平滑信号。其优势包括实现简单、计算高效和有效抑制高频噪声;缺点是会引入延迟、对信号突变不敏感且窗口大小需经验调整。文中提供了C语言实现示例,通过维护运行总和优化计算效率。流水均值法在嵌入式系统和数据采集中应用广泛,合理选择窗口大小可平衡滤波效果与响应速度。
2025-06-18 15:49:18
915
原创 DMA:在不同内存空间建立目的地址的情况分析及后果
摘要 本文探讨了DMA控制器访问不同内存空间时的数据一致性问题。当DMA访问缓存地址空间时,由于CPU缓存的存在,可能产生数据不一致性,需要硬件缓存一致性机制或软件干预(如缓存行失效、写回操作)来解决。而在非缓存地址空间下,由于直接访问主存,天然不存在一致性问题,但CPU访问速度较慢。两种方式各有优劣:缓存空间适合通用数据传输但管理复杂,非缓存空间适用于设备寄存器等需要精确控制的场景。选择方案需根据具体需求权衡性能与管理复杂度。
2025-06-10 16:52:37
1356
原创 DSRAM:是什么?有什么作用?与DMA结合应用的好处有哪些?
Data ScratchPad RAM(缩写DSRAM),中文可以理解为数据 ScratchPad RAM。DSRAM 的主要作用是提供一种由软件控制的、低延迟、低功耗的数据存储区域。以优化特定应用的性能。DMA(Direct Memory Access,直接内存访问)控制器可以在不占用 CPU 资源的情况下,在内存的不同区域之间传输数据。
2025-06-10 15:18:47
766
原创 RTOS:创建队列(含源码分析)
本文分析了FreeRTOS内核中队列创建函数xQueueGenericCreate的实现逻辑。该函数首先进行参数检查,确保队列长度和项目大小合理且不会造成内存溢出。随后动态分配内存空间,包括队列控制结构和存储区。内存申请成功后,通过prvInitialiseNewQueue初始化队列参数,并标记为动态创建。函数最终返回队列句柄,失败时返回NULL。文章详细解析了各参数检查条件、内存计算方式及初始化过程,并提醒使用时需注意FreeRTOS系统初始化状态、参数合理性及内存限制等问题。该实现展现了RTOS内核严谨
2025-06-05 16:37:53
1447
1
原创 RTOS:关于静态任务创建和调度器-总结
本文分享了对嵌入式操作系统的探索历程,从最初的敬畏到实际应用中的理解。作者通过阅读RTOS-Kernel代码,解析了静态任务创建和调度器启动的实现机制:静态任务创建过程涉及任务函数、堆栈和控制块的初始化,而调度器启动则会创建空闲/定时器任务并开始任务调度。这些操作通过对任务数据结构的处理,实现了操作系统的任务管理和调度功能,体现了嵌入式系统的核心设计思想。
2025-06-04 12:55:17
320
原创 RTOS:任务MPU配置(含解析)
本文分析了RTOS-Kernel中任务MPU配置的实现过程。通过vPortStoreTaskMPUSettings函数,系统为任务栈和用户定义区域设置内存保护单元(MPU)参数。主要内容包括:1) 配置内存属性寄存器MAIR0;2) 根据栈是否位于特权SRAM区域来决定是否启用MPU保护;3) 处理用户自定义的可配置内存区域,设置访问权限属性。该实现展示了如何在嵌入式系统中通过MPU进行内存访问控制,为RTOS任务提供安全隔离机制。 关键词:RTOS、MPU配置、内存保护、任务栈、嵌入式系统
2025-06-04 09:29:13
547
原创 RTOS:初始化新任务(含源码复杂点解读)
这篇文章摘要主要讲解了RTOS内核中任务初始化的过程。作者首先分享了自己从对操作系统感到神秘到逐步掌握的心路历程,然后通过详细代码分析展示了任务控制块(TCB)的初始化实现。代码解析了关键步骤:堆栈管理(包括内存对齐和堆栈填充)、任务优先级设置、任务名称处理等核心功能,并包含了对MPU支持、堆栈增长方向等硬件相关特性的处理。文章体现了作者从裸机编程到RTOS开发的成长轨迹,旨在通过源码分析提升对操作系统原理的理解。
2025-06-03 13:43:47
473
原创 RTOS:静态任务创建-参数检查与准备(含源码复杂点解读)
本文分析了RTOS-Kernel中静态任务创建函数prvCreateStaticTask的实现细节。该函数通过接收任务代码、名称、堆栈、参数等参数,在确保内存缓冲区有效的情况下,初始化任务控制块(TCB)和堆栈空间。关键步骤包括:内存缓冲区校验、TCB结构体初始化、堆栈指针绑定,以及通过prvInitialiseNewTask完成最终任务初始化。文章通过逐行代码解析,揭示了RTOS静态任务创建的核心机制和内存管理方式,为理解嵌入式操作系统任务管理提供了技术参考。
2025-06-03 09:59:17
754
原创 RTOS:启动调度器的作用(含源码逐行解读)
本文分析了RTOS内核中启动调度器vTaskStartScheduler()的实现逻辑。该函数首先创建空闲任务,若配置了定时器则创建定时器任务,随后进行中断禁用、TLS设置等初始化工作,最终调用xPortStartScheduler启动调度器。若启动失败,通常是由于内存不足导致任务创建失败。文章揭示了操作系统中调度器启动的关键步骤,包括任务创建、中断管理和硬件相关初始化等核心机制。
2025-05-30 15:39:07
1129
原创 RTOS:静态任务创建应用接口(含源码逐行解读)
摘要 本文分析了RTOS内核中静态内存分配方式的任务创建函数xTaskCreateStatic的实现细节。该函数通过prvCreateStaticTask创建任务控制块,设置多核亲和性后,将新任务加入就绪队列。静态内存分配方式具有内存占用可控、无需动态分配、适用于汽车电子等关键领域的优势。文中还介绍了调试跟踪函数和代码覆盖率测试标记的作用,为嵌入式开发者提供了RTOS任务创建机制的深入解读和实践参考。
2025-05-30 11:24:24
517
原创 RTOS:任务控制块介绍(含源码逐行解读)
RTOS内核任务控制块(TCB)是任务管理的核心数据结构。本文基于RTOS-Kernel源码分析TCB组成:包含堆栈指针(pxDummy1)、MPU设置(xDummy2)、优先级(uxDummy5)、任务名称(ucDummy7)等基础字段,以及多核调度(uxDummy23/24)、任务通知(ulDummy18)、线程存储(pvDummy15)等扩展功能字段。这些通过条件编译宏配置的成员,完整记录了任务的运行时状态,相当于任务的"身份证",是RTOS实现任务调度和管理的关键。文章通过逐字段
2025-05-30 10:42:33
531
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅