- 博客(109)
- 收藏
- 关注
原创 关键字 const 在嵌入式中的用法
const表示。这对防止意外写操作、明确意图和让编译器更好地优化有重要作用。在大多数嵌入式编译器(如 Keil、GCC)中,加了const的数据可以被放入只读区域(ROM/Flash),节省宝贵的 RAM。
2025-05-22 10:47:29
300
原创 关键字 volatile 在嵌入式中的用法
volatile是C/C++语言中的一个关键字,用于指示编译器某个变量可能在程序控制之外被改变,因此编译器不应对其进行优化。这种优化可能导致程序行为异常,特别是在处理硬件寄存器或实时数据时。例如,在硬件寄存器映射或串口通信中,使用volatile可以确保每次访问变量时都从内存中读取最新值,而不是从CPU寄存器中读取缓存值。此外,volatile还禁止编译器对变量的指令重排和去除无用读取操作,确保程序的正确性和实时性。在底层实现中,volatile关键字通过禁止编译器的优化行为,确保对变量的访问始终从内存中进
2025-05-22 10:11:42
200
原创 MCU-芯片时钟与总线和定时器关系,举例QSPI
时钟源:时钟源为系统时钟提供原始频率信号,系统时钟则通过(分频、倍频、选择器)成为整个芯片的“主时钟”,驱动 CPU 内核、总线(AHB、APB)及外设的运行。HSI(高速内部时钟):64 MHz,配合PLL1用于系统时钟。HSI48(高速内部时钟):48 MHz,HSI48 是内部高精度时钟源,频率为 48Mhz,配合 CRS 可以直接作为 USB的时钟源使用。HSE(高速外部时钟):4-48 MHz(通常使用25 MHz的外部晶振PLL配置: 通过PLL1可以将时钟频率提升到最高。
2025-03-20 21:02:07
866
原创 AUTOSAR-NvM调用Fee向flash的物理地址写数据的链路逻辑
32 位的虚拟地址【16 位用于块号(Block Number)(标识逻辑块,最多允许 65536 个逻辑块,获取物理基地址)】 + 【16 位用于块地址偏移量(Block Address Offset)(用标识逻辑块内的具体位置,每个逻辑块最大 64KB,基地址 + 偏移量)】其 Virtual Page 的结构包含 Page Header(用于存储页面的元数据,如页面状态和标识)+ Data Area(实际存储数据的区域)Fee的blocknumber是608,size是22byte,
2025-03-10 20:05:04
182
原创 ARM架构-SRAM的深度理解
(如 AXI SRAM),若外设 DMA 直接操作 D1 SRAM,会导致总线带宽被抢占,影响实时任务。D1 Domain:高性能域,直接连接 Cortex-M7 内核,包含 AXI 总线、Flash 和部分 SRAM(ITCM、DTCM、AXI)。D3 Domain:低功耗域,用于低功耗模式下的数据保持,包含 SRAM4 和 Backup SRAM。D2 Domain:外设域,连接大部分外设和 DMA,包含 SRAM1~SRAM3。传感器通过 SPI 的 DMA1 将数据存入 SRAM1(D2 域)。
2025-03-07 13:23:31
522
原创 MCU-缓存Cache与CPU中的主存SRAM
(如 MPU 设置)决定。普通 SRAM(如 AXI SRAM、SRAM1/SRAM2)可能被 D-Cache 缓存,具体取决于 MPU(内存保护单元)的配置。TCM 是紧耦合内存,直接挂载到 CPU 总线,不经过 Cache,访问。Flash、SRAM 或外部存储器 读取的数据。Cache 的缓存范围是全局的,可以覆盖所有可缓存的地址空间(包括内部 SRAM)。是否需要缓存某个内存区域,由内存属性配置。数据缓存(D-Cache)指令缓存(I-Cache):缓存从。Cortex-A7(含MMU)
2025-03-06 17:25:43
511
原创 MCU-SDRAM-W9825G6KH的存储单元
在Cortex-M7中,存储器一共有4GB的地址空间,4GB的地址空间又被划分为8个区域块,每个块有512M的内存。Note:4GB的地址空间为 0x0000 0000 - 0xFFFF FFFF,可寻址的512M的地址空间为 0x0000 0000 - 0x1FFF FFFF,可寻址的地址是指处理器可以直接访问和寻址的存储区域,如flash,SRAM,寄存器。外部External RAM 通常映射到0x6000_0000到0x9FFF_FFFF的外部存储区域。
2025-03-06 12:59:43
704
原创 电脑和树莓派在插入网线的情况下,如何保持wifi上网
Win10设置优先使用无线网络的方法,只需修改网络接口活跃点,WiFi活跃度大于以太网卡活跃度即可。
2025-02-05 15:28:58
267
原创 Ubuntu22.04安装docker desktop遇到的bug
1. 确认已启用KVM虚拟化1. 确认已启用KVM虚拟化如果加载了模块,输出应该如下图。说明 Intel CPU 的 KVM 模块已开启。
2024-12-12 16:13:42
745
原创 TriCore架构-TC397将code从原来在P-Cache地址移到PSPR的地址,CPU的负载率为什么没影响
但是实际情况下,这个是CPU通过LPB (local pflash bank) 直接访问PFlash的性能,PFI 有prefetch buffer,可以预取指,并不是通过Cache访问的。而从下图可以看出来,CPU从PCache & PSPR & DSPR & Dcache取指(instruction fetch),性能是一样的,CPU距离存储空间的距离也是差不多的。私有的:PSPR,DSPR,P-Cache,D-Cache,PF(X),LMU,DLMU,LPB。之间频繁切换,可能会引入额外的延迟。
2024-12-08 10:56:18
672
1
原创 ARM架构-Cache的底层原理
写通法的另一个变种就是写回法,是指处理器在执行写操作时,被写的数据只写入 Cache,不写入主存,仅当需要替换时,才把已经修改的 Cache 块写入主存RAM。嵌入式ARM内核一般采用的都是哈佛结构,哈佛结构中Cache设计采用了指令 Cache(简称 I-Cache)和数据Cache(简称 D-Cache)分开的方式,也就是说运行的时候程序Code存储在flash中,数据Data存储在RAM中,也就是说CPU从flash中取Code指令,之后在到RAM中取数据。
2024-12-06 20:07:10
513
原创 MCU-USB转UART的底层逻辑
当单片机不集成直接 USB 或 OTG 接口时,USB/UART 桥接器是必不可少的工具。它促进了 PC 和单片机之间的通信,尤其是在原生 USB 仍然不是很常见的嵌入式系统中。监视和控制嵌入式外围设备,从而促进嵌入式系统的开发和维护。可以轻松调试单片机,使用终端显示日志和错误消息。编程器或闪存单片机,无需本机 USB 接口。USB/UART 桥接器的好处。
2024-12-04 13:58:14
481
原创 ISO26262-(Timing Monitoring)在多核MCU的TPU上功能安全ASILB与ASILD有什么区别
在多核微控制器(MCU)的时间保护方面,针对功能安全ASIL B与ASILD等级的设计和实施存在显著差异,这些差异主要体现在系统对时间关键性操作的保障程度、故障检测能力、以及系统响应的严格性上。时间关键性:在ASIL B等级,系统设计注重于识别并处理大部分可能影响安全的时间相关故障,但允许在某些情况下未被覆盖的故障存在。一旦检测到时间保护失败,系统将采取极端措施,如立即触发安全动作、系统复位或切换到预先定义的安全状态,以避免任何潜在的不安全状态。全面故障检测:要求近乎完美的故障检测能力,
2024-12-03 15:25:57
444
原创 ISO26262-(Timing Monitoring)基于AUTOSAR OS与TC397实现TPU时间保护
Deadline Supervision:提供监督软件在两个状态之间的转换时间,通过在代码中设置检查点,WdgM定期检查这些点是否被按时到达,防止任务进入无限循环或完全停止执行。规定任务或第二类中断(Cat2 Interrupts)两次激活之间的最小时间间隔,确保任务执行的周期性和间隔的稳定性,防止任务执行过于频繁或不规律。监控任务或中断在获取资源、锁或中断挂起上的时间,确保这些操作不会超出预定的限制。时间保护和监控和以下属性有关:监控任务在特定时间调度,不超过预期执行时间,不独占OS资源。
2024-12-03 14:23:32
109
原创 ISO26262-(Memory Partitioning)在多核MCU的MPU上功能安全ASILB与ASILD有什么区别
在ISO26262中基于AUTOSAR创建每个TASK的时候根据任务的危害分析和风险评估确定对应的ASIL等级,在开发的时候并对ASIL进行适度分解,之后在软件开发中对每个TASK施行不同的软件策略,比如内存分区的复杂度,诊断和错误处理,冗余与容错等软件机制,最终实现各个ASIL Level。ASIL D级别的系统在动态内存分配上可能需要更严格的控制,以避免运行时的内存错误,这可能影响MMU的配置策略,要求实时监控和保护堆和栈的完整性。ASIL B系统在这一点上可能允许更多依赖于软件层面的管理。
2024-11-30 12:06:31
268
原创 ISO26262-(Memory Partitioning)基于TC397的MPU实现内存分区
TC397芯片有5个Core,每个核有18个Data Memory Protection Ranges,10个Code Protection Ranges。
2024-11-29 19:44:56
492
原创 ISO26262-(Memory Partitioning)针对不同SWC和Interface实现功能安全内存分区
内存方面的 FFI - 保护 ASIL-B(较高 ASIL-X)分区的数据免受 QM(较低 ASIL)分区代码执行的影响。时间方面的 FFI - 保护 ASIL-B(较高 ASIL-X)分区执行免受 QM(较低 ASIL)分区执行的影响,(能够检测 ASIL-B 任务的 CP 到期情况,将 ASILB 任务作为高优先级)这应完全从软件架构层面完成。Goal:满足混合 ASIL-B 产品在内存和执行方面的 FFI(Freedom From Interference)
2024-11-28 20:16:19
187
原创 MCU-基于STM32H7XX的Bootloader启动与更新固件逻辑
基于一种安全升级的方式,将两个BANK分别都用于存储APP程序,一个是A面,一个是B面,之后在升级的过程中,可以确保如果升级失败,可以回滚到上一个有效版本,以及升级过程中可以实现网络安全的机制。
2024-11-07 21:05:52
280
原创 ISO26262-E-GAS功能安全软件架构与AURIX TC397 SafeTpack
主要功能是监控系统的运行状态,以确保系统在预定的功能范围内正常工作。TLF35584能够以预定的周期进行喂狗,就是正常状态,否则执行停止喂狗,报告异常。Level2 是功能监控层,用于监控 Level1 功能的运行是否正常。当任意一个核运行异常,比如在执行某个函数的时候发生野指针,State Combiner 的状态为 NOT OK,硬件狗就会复位 MCU。Level1 是功能实现层,完成具体的功能实现,比如对于电机控制器来说,这一层实现了将请求的扭矩转换为电机的扭矩输出。
2024-10-29 16:00:14
1640
原创 ISO26262-通信故障与故障检测和反应在功能安全中的应用
在实施带有紧急运行安全机制的故障处理中,整个流程分成故障检测(Fault detection),故障处理(Fault reaction),措施实施(Emergency operation),进入安全状态(Safe State)4个阶段,故障检测(Fault detection)这部分就是诊断功能。首先这个的message报文周期是20ms或200ms(报文没有问题的时候是周期20ms,当信号有问题,报文要进入fault的周期发送,会变成周期200ms),举例:一般是通信报文传输的问题。
2024-10-28 14:35:24
989
原创 MCU-内部flash模拟成EepRom(重新梳理)
通过fee写数据Data的过程中,数据会mapping一个虚拟地址,这个虚拟地址就是你的身份,在向flash写数据的过程中会写入很多相同虚拟地址的不同数据,在读取或切页的过程中,遍历数据只会认为最下面第一个的虚拟地址所持有的数据是有效数据,其他的都是老数据,可以丢弃。模拟成eeprom的两个eep_page写数据逻辑就是,先在eep_page0写数据,eep_page0写满后,将eep_page0的有效数据copy到eep_page1,之后擦eep_page0;
2024-09-13 14:35:01
413
1
原创 MCU-QSPI读写外部Flash(W25Q256JV)
每到一个新的扇区,就要判断这个扇区里面是否是干净的,不干净就要先去擦Sector,将数据全部擦成 0XFFFFFFFF,之后才可以一个page一个page写数据。需要注意的是,写完的数据就不能更改,如果更改数据,我们需要将所在扇区的存储内容全部读出,然后擦除该扇区,再按照新数据对该扇区进行编程。向flash写数据,是以page为单位写的(不可以随意的写字节),通过QSPI将写的数据写到flash的buffer里,写完后,如果不够一个page, flash会自动填充满一个page,之后写到Sector中。
2024-09-12 18:27:09
481
原创 AUTOSAR-CAN通信的Com层触发I-PDU的逻辑
对于传输模式的选择,可以根据Message定义的周期等待Com_MainFunction发送,也可以是只有数据变更时,等到一个Com_MainFunction就向外发送,数据无变化,不需要向外发送。当I-PDU被填充完整后,判断I-PDU的传输模式,等待Com_MainFunction将I-PDU根据传输方式向底层传输。因为是向外发送,所以Can_MainFunction_Write会读Can驱动寄存器,确认传输是否完成,也就会返回Com_TxConfirmation,可以配置是否需要触发Callout。
2024-08-14 16:14:30
211
原创 ARM架构-MPU对于OS下任务和内存的保护
其实这三种方式没有MPU也可以实现, 只不过归不用MPU的操作归属于 CPU 架构层面,而MPU属于内存层面的控制,进一步对region划分了区域,哪些可以Cache,哪些可以Share,只不过这种操作是基于内存的操作,。更细化权限控制,MSP和PSP 指针是 CPU 架构层面的特权级划分,MPU 机制是基于内存区域的访问控制。内核直接访问芯片内存,如上图,去掉Cache走总线AXI或AHB的链路。如果开启共享(Shareability),等同于关闭Cache。Cortex-A7(含MMU)
2024-07-25 14:17:42
1103
原创 ARM架构-内存与指针和堆栈的关系
栈顶指的是当前栈指针(Stack Pointer, SP)所指向的内存地址。栈底指的是栈的起始地址,也就是栈区域在内存中的最低地址。在一个空栈中,栈顶是没有元素的,通常被定义为 -1 或 NULL。
2024-07-19 16:32:25
840
原创 ARM架构-FreeRTOS中内存地址与flash,SRAM,堆栈关系
在Cortex-M7中,存储器一共有4GB的地址空间,4GB的地址空间又被划分为8个区域块,每个块有512M的内存。Note:4GB的地址空间为 0x0000 0000 - 0xFFFF FFFF,可寻址的512M的地址空间为 0x0000 0000 - 0x1FFF FFFF,可寻址的地址是指处理器可以直接访问和寻址的存储区域,如flash,SRAM,寄存器。
2024-07-16 19:59:39
1406
OSEK/VDX 标准中容错通信协议(FTCom)的功能与架构
2025-03-11
汽车安全评估中的电子油门控制系统研究及应用(汽油车)
2025-03-11
汽车电子OSEK VDX时间触发操作系统(OSEKtime)规格介绍及实现方法
2025-03-11
汽车发动机管理系统的标准化E-Gas监控概念及其关键技术解析与应用
2025-03-11
嵌入式实时操作系统OSEK-VDX OS的架构及任务管理机制解析
2025-03-11
AUTOSAR多核操作系统监控与优化:同济大学与维克多汽车技术联合研究成果
2025-03-11
OSEK/VDX标准:实时接口语言规范(ORTI)促进车载分布式控制系统开发与调试
2025-03-11
汽车电子控制系统OSEK/VDX标准解析及其应用案例
2025-03-11
汽车电子嵌入式系统中AUTOSAR OS调度表显式同步优化算法及其应用
2025-03-11
汽车诊断与编程中的Bootloader过程详解及应用场景
2025-03-11
汽车电子OSEK/VDX规范绑定配置详解及应用
2025-03-11
符合OSEK标准的嵌入式操作系统微内核设计:任务调度与上下文切换优化
2025-03-11
智能网联汽车环境感知系统预期功能安全第1部分:触发条件分析与描述方法
2024-12-03
智能网联汽车环境感知系统预期功能安全的乘用车测试与评价方法标准编制说明
2024-12-03
智能网联汽车高速与城市快速路自动驾驶标准编制说明
2024-12-03
智能网联汽车车载时间敏感网络(TSN)中间件标准编制与应用解析
2024-12-02
车载时间敏感网络通讯交换芯片标准编制及产业应用
2024-12-02
车路协同智能路侧决策系统标准及应用编制详解
2024-12-02
车路协同路侧基础设施第1部分:总体技术要求
2024-12-02
车载时间敏感网络中间件技术规范解析
2024-12-02
车路协同智能路侧决策系统的架构、应用及协同决策机制解析
2024-12-02
车路协同路侧基础设施信息安全通用技术要求编制进展与验证
2024-12-02
车路协同路侧基础设施信息安全通用技术要求
2024-12-02
车路协同系统路侧基础设施总体技术要求编制说明
2024-12-02
汽车智能化发展中基于AI的开放式软件架构研究
2024-10-21
中国汽车基础软件发展现状及关键技术研究报告
2024-10-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人