
嵌入式系统
文章平均质量分 92
ARM, SOC, uboot,Linux OS启动
文火冰糖的硅基工坊
行路当下,惜缘随缘;
仰望星空,梦在远方;
俯瞰天下,顺道而为;
点亮心灯,照亮周遭。
----贝尔实验室授予杰出技术专家DMTS终身荣誉
展开
-
[创业之路-286]:《产品开发管理-方法.流程.工具 》-2- 人的管理是任何组织首要解决的问题 - 企业与研发组织组成、构架、组织分工
IPD(集成产品开发)中的两个重要跨职能组织是IPMT(集成产品管理团队)和PDT(产品开发团队)。在IPD(集成产品开发)体系中,IRB(投资评审委员会)、IPMT(集成产品管理团队)、PDT(产品开发团队)是核心的跨职能团队。然而,关于BMT,在标准的IPD框架中并没有明确提及,它可能不是IPD核心框架的一部分,或者在某些公司的特定实践中可能有不同的定义和角色。因此,以下将重点介绍IRB、IPMT和PDT的人员组成、主要职责以及关注重点。原创 2025-02-06 23:36:32 · 533 阅读 · 0 评论 -
[嵌入式系统-78]:RT-Thread:线程管理的基本原理与应用
RT_Thread实时操作系统为空闲线程提供了一个钩子函数(钩子函数:用户提供的一段代码,在系统运行的某一路径上设置一个钩子,当系统经过这个位置时,转而执行这个钩子函数,然后再返回到它的正常路径上) ,可以让系统在空闲的时候执行一些特定的任务,例如系统运行指示灯闪烁,电源管理等,除了调用钩子函数,RT_Thread也把线程清理(rt_thread_cleanup)函数,真正的线程删除动作放到了空闲线程中(在删除线程时,仅改变线程的状态为关闭状态不在参与系统调度)。在系统线程切换时,这个钩子函数将被调用。原创 2024-05-14 00:32:20 · 2480 阅读 · 0 评论 -
[嵌入式系统-77]:RT-Thread-快速上手:嵌入式系统调测工具大全
此外,J-Link仿真器还有多个版本,如J-Link Plus、J-Link Ultra、J-Link Ultra+、J-Link Pro、J-Link EDU、J-Trace等,可以根据不同的需求来选择不同的产品。JTAG最初是为了在芯片制造过程中检测芯片内部的连接错误而设计的,但随着时间的推移,它已经被广泛应用于更广泛的领域,包括现场编程、调试、故障隔离和系统验证。特殊的CPU,称为外合(bond-out)CPU,这种CPU的封装被打开,并且可以通过特殊的连接访问到CPU的内部信号。原创 2024-05-13 21:20:31 · 1306 阅读 · 0 评论 -
[嵌入式系统-76]:RT-Thread-快速上手:利用Keil MDK集成开发环境中,通过模拟器模拟ARM芯片,运行RT-Thread操作系统和应用程序示例,无需硬件开发板
uVision是Keil公司开发的一款集成开发环境(IDE),主要用于嵌入式系统的软件开发,特别是基于ARM架构的微控制器。注:由于工程中包含的内核例程代码较多,若使用的是 MDK 试用版本,则会有 16KB 限制,此时可以只保留某个目标例程的代码(例如内核例程只保留一个 thread_sample.c 参与编译),将其他不用的例程先从工程中移除,然后编译。的集成开发环境(IDE),它出自 ARM 公司,包括了针对 ARM 芯片(ARM7,ARM9,Cortex-M 系列,Cortex-R 系列等)的。原创 2024-05-13 00:34:15 · 3430 阅读 · 0 评论 -
[嵌入式系统-75]:RT-Thread-快速上手:正点原子探索者 STM32F407示例
至于“MDK4、MDK5和IAR工程”的具体含义,这里的“工程”通常指的是在MDK或IAR开发环境中创建的一个具体项目或应用程序。提示:注:正点原子一键下载电路和终端工具冲突,在使用终端工具如:PuTTy、XShell 时,会出现系统不能启动的问题,推荐使用串口调试助手如:sscom。内核的开发板,最高主频为 168Mhz,该开发板具有丰富的板载资源,可以充分发挥 STM32F407 的芯片性能。如没有自动运行,按下复位按键重启开发板,观察开发板上 LED 的实际效果。,点击下载按钮即可下载程序到开发板。原创 2024-05-12 07:37:45 · 2786 阅读 · 0 评论 -
[嵌入式系统-74]:RT-Thread-快速上手:初识RTT实时操作系统
RT-Thread 提供了开放的软件包平台,这里存放了官方提供或开发者提供的软件包,该平台为开发者提供了众多可重用软件包的选择,这也是 RT-Thread 生态的重要组成部分。而对于资源丰富的物联网设备,RT-Thread 又能使用在线的软件包管理工具,配合系统配置工具实现直观快速的模块化裁剪,无缝地导入丰富的软件功能包,实现。在 RT-Thread 系统中,任务通过线程实现的,RT-Thread 中的线程调度器也就是以上提到的任务调度器。RT-Thread 主要采用 C 语言编写,浅显易懂,方便移植。原创 2024-05-10 23:46:51 · 1516 阅读 · 0 评论 -
[嵌入式系统-73]:RT-Thread-快速上手:如何选择RT Thread的版本?
RT-Thread 有十多年的历史,在开发过程中也放在 Github 上由大家协同开发,并发布一个个版本,导致了不同人群面对多样的版本无从下手,此文档将说明如何选择一个合适自己的版本进行开发。例如当前 master 分支的版本是 4.0.1,最新发布版本是 4.0.0,之后也可能会发布 4.0.1、4.0.2、... 等版本。lts-v3.1.x,最新发布版是 3.1.2,之后还可能会发布 3.1.3、3.1.4、... 等版本,但是该分支上不会发布 3.2.x 版本。发布版本稳定性高,推荐使用。原创 2024-05-10 23:44:51 · 1435 阅读 · 0 评论 -
[嵌入式系统-72]:ARM芯片选型基础
架构之路-17]:目标系统 - 硬件平台 - ARM CPU架构与系列选型_硬件平台选型方法-CSDN博客ARM(Advanced RISC Machines)是一家英国的半导体和软件设计公司,专注于设计低功耗、高性能的RISC(精简指令集计算机)处理器架构。ARM处理器架构在嵌入式系统、移动设备、网络设备和服务器等多个领域得到了广泛应用。特别是在移动设备领域,ARM架构几乎占据了绝对的主导地位,几乎所有的智能手机和平板电脑都采用基于ARM架构的处理器。原创 2024-05-10 12:31:19 · 3261 阅读 · 0 评论 -
[嵌入式系统-72]:RT-Thread-组件:单元测试框架utest
如果你在RT-Thread这样的实时操作系统环境中使用UTest,并且想要将测试单元作为线程来运行,那么你可能需要自己在代码中创建线程,并在线程函数中调用UTEST_UNIT_RUN来运行测试单元。这个宏/函数的作用是将你的测试代码封装成一个可执行的测试单元,但具体的执行方式(例如是否作为线程运行)则取决于UTest测试框架的实现以及你的测试策略。这个宏/函数的作用是将你的测试代码封装成一个可执行的测试单元,但具体的执行方式(例如是否作为线程运行)则取决于UTest测试框架的实现以及你的测试策略。原创 2024-05-09 01:56:23 · 2160 阅读 · 0 评论 -
[嵌入式系统-71]:RT-Thread-组件:日志管理系统ulog,让运行过程可追溯
同步模式适用于对实时性要求较高且系统资源相对充足的场景,但需要注意避免在关键线程中调用可能阻塞较长时间的日志输出函数。异步模式适用于需要保证系统响应速度和稳定性的场景,尤其是在多线程环境中。但需要注意合理配置和管理后台的日志输出任务,以避免过多的系统资源占用和潜在的性能问题。在 RT-Thread 中,ulog组件通常支持配置为同步模式或异步模式,具体取决于应用程序的需求和系统的资源情况。开发者可以根据实际情况选择适合的模式,并合理配置相关的参数和选项。设置日志格式。原创 2024-05-08 23:34:46 · 2510 阅读 · 0 评论 -
[嵌入式系统-70]:RT-Thread-组件:PM电源管理,嵌入式系统低功耗管理,延长设备待机时间。
当系统被唤醒后,由于全局中断为关闭状态,系统继续从该处执行,获取睡眠时间补偿系统的心跳,依次唤醒设备,通知应用从休眠模式退出。请求休眠模式,当请求高功耗模式后,未进行释放,系统将无法切换至更低等级的功耗。外设的功耗处理是低功耗管理系统的一个重要部分,在进入某些级别的休眠模式时,通常需要对一些外设进行处理,如清空 DMA,关闭时钟或是设置 IO 为复位状态;如果程序的其他地方请求了更高的功耗模式,如 Light Mode 或者 Idle Mode,则需要释放相应的模式后,深度睡眠模式才能被进入。原创 2024-05-08 23:33:45 · 1551 阅读 · 0 评论 -
[嵌入式系统-69]:RT-Thread-组件:网络组件“组”,RT-Thread系统通向外部网络世界的入口
RT-Thread SAL(Socket Abstraction Layer)套接字和BSD套接字在功能和使用上存在一些区别,尽管它们都用于网络通信,但各有其特定的设计和应用场景。SAL是RT-Thread操作系统中的一个组件,用于抽象和统一多种网络协议栈接口。它提供了一个Socket层面的TLS加密传输特性,并支持标准BSD Socket API。SAL套接字抽象层位于网络硬件层和应用层之间,通过它,RT-Thread系统能够适配下层不同的网络协议栈,并提供给上层统一的网络编程接口,方便不同。原创 2024-05-08 01:04:52 · 1524 阅读 · 0 评论 -
[嵌入式系统-68]:RT-Thread-组件:tmpfs 临时文件系统,是一种基于内存的文件系统
在RT-Thread中,ramfs可以通过特定的API进行创建和管理,但相比于tmpfs,它的使用相对较少,因为tmpfs提供了更多的功能和灵活性。在 rt-thread 源码的 rt-smart 分支上,打开 qemu-vexpress-a9 BSP,使用 menuconfig 在组件中配置 tmpfs,位于 "RT-Thread Components → Device virtual file system",退出保存。总的来说,tmpfs和ramfs在RT-Thread中各有其用途,原创 2024-05-06 00:56:22 · 1009 阅读 · 0 评论 -
[嵌入式系统-67]:RT-Thread-组件:虚拟-设备文件系统DFS,以目录结构和文件的方式存储和管理各种各样的数据
传统型的 RomFS 文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以 XIP(execute In Place,片内运行) 方式运行,在系统运行时, 节省 RAM 空间。例如,一个文件以 O_RDONLY 和 O_CREAT 的方式打开,那么当指定打开的文件不存在时,就会先创建这个文件,然后再以只读的方式打开。FatFs 充分考虑了多线程安全读写安全的情况,当在多线程中读写 FatFs 时,为了避免重入带来的问题,需要打开上述宏。原创 2024-05-05 11:26:14 · 2075 阅读 · 0 评论 -
[嵌入式系统-66]:RT-Thread-组件:Flash 抽象层FAL, 对 Flash 及基于 Flash 的分区进行管理、操作的抽象层, 上层统一了 Flash 及 Flash分区操作.
它可以准确的写入或者读取指定位置的原始 Flash 数据,快速的验证 Flash 驱动的完整性,甚至可以对 Flash 进行性能测试。所以,如果擦除操作地址或长度未按照 Flash 的扇区对齐,将会擦除掉与其关联的整个扇区数据。性能测试将会测试 Flash 的擦除、写入及读取速度,同时将会测试写入及读取数据的准确性,保证整个 Flash 或整个分区的 写入与读取 数据的一致性。Flash 设备表中,有两个 Flash 对象,一个为 STM32F2 的片内 Flash ,一个为片外的 Nor Flash。原创 2024-05-05 09:40:34 · 1006 阅读 · 0 评论 -
[嵌入式系统-65]:RT-Thread-组件:FinSH控制台, 用户与RT Thread OS实时命令行交互工具
这是因为虽然显示了完整的函数名,但是实际上 FinSH 中却保存了前 16 字节作为命令,过多的输入会导致无法正确找到命令,这时就可以使用 FINSH_FUNCTION_EXPORT_ALIAS 来对导出的命令进行重命名。有了 shell,开发者除了能更快的定位到问题之外,也能利用 shell 调用测试函数,改变测试函数的参数,减少代码的烧录次数,缩短项目的开发时间。FinSH 支持权限验证功能,系统在启动后会进行权限验证,只有权限验证通过,才会开启 FinSH 功能,提升系统输入的安全性。原创 2024-05-04 18:28:09 · 3077 阅读 · 1 评论 -
[嵌入式系统-64]:RT-Thread-组件:标准C库Libc
目录LIBC 简介1 LIBC 配平层2 ISO/ANSI C 标准3 POSIX 标准3.1 IEEE Std 1003.13.2 IEEE Std. 1003.133.3 POSIX标准及RT-Thread实现情况LIBC 简介RT-Thread 提供的 LIBC (C library, C库),包含编译器内置 LIBC 配平层(LIBC leveling layer)和 POSIX 层三部分。布局如下图所示:1 LIBC 配平层LIBC 配平原创 2024-05-04 12:47:13 · 1294 阅读 · 0 评论 -
[嵌入式系统-63]:RT-Thread-内核:内核在不同CPU架构上的移植和不同硬件板BSP上的移植
中断处理程序里处理完中断事务之后,中断退出之前,检查 rt_thread_switch_interrupt_flag 变量,如果该变量的值为 1,就根据 rt_interrupt_from_thread 变量和 rt_interrupt_to_thread 变量,完成线程的上下文切换。显然,在 Cortex-M 内核里 rt_hw_context_switch() 和 rt_hw_context_switch_interrupt() 功能一致,都是在 PendSV 里完成剩余上下文的保存和回复。原创 2024-05-04 00:28:33 · 1276 阅读 · 0 评论 -
[嵌入式系统-62]:RT-Thread-内核:多核CPU SMP的支持与移植
SMP: 对称多处理(Symmetrical Multi-Processing)简称 SMP,是指在一个计算机上汇集了一组处理器 (多 CPU),各 CPU 之间共享内存子系统以及总线结构。RT-Thread 自 v4.0.0 版本开始支持 SMP,在对称多核上可以通过使能来开启。该文档主要对 SMP 进行介绍,以及讲解如何移植 RT-Thread SMP。原创 2024-05-03 16:06:19 · 2316 阅读 · 0 评论 -
[嵌入式系统-61]:RT-Thread-内核:原子操作的支持, 原子操作与互斥锁的比较
该操作函数的语义为:对 ptr 地址指向的 4 字节原子标志进行设置,并返回该原子标志对象做设置操作之前的值。该操作函数的语义为:使用原子操作方式将 ptr 地址指向的 4 字节数据与 val 进行按位异或,将结果写入 ptr 地址指向的 4 字节空间,返回 ptr 地址处修改前的 4 字节数据。该操作函数的语义为:使用原子操作方式将 ptr 地址指向的 4 字节数据与 val 进行按位相或,将结果写入 ptr 地址指向的 4 字节空间,返回 ptr 地址处修改前的 4 字节数据。原创 2024-05-03 11:03:57 · 1314 阅读 · 0 评论 -
[嵌入式系统-60]:RT-Thread-内核:中断管理,线程与中断之间的协同工作与数据传送,中断管理是外部的异步事件与内核内部的线程之间的关系
中断屏蔽和中断disable都用于控制中断的处理,但它们的实现和范围略有不同。中断屏蔽通常是在硬件或软件级别上设置特定的屏蔽位来阻止特定中断源的中断请求,而中断disable则是通过修改处理器的状态或执行特定的指令来完全禁止所有中断的处理。原创 2024-05-03 10:02:54 · 1277 阅读 · 0 评论 -
[嵌入式系统-59]:RT-Thread-内核:内存管理(内存堆管理、内存池管理)
2)随着内存不断被分配和释放,整个内存区域会产生越来越多的碎片(因为在使用过程中,申请了一些内存,其中一些释放了,导致内存空间中存在一些小的内存块,它们地址不连续,不能够作为一整块的大内存分配出去),系统中还有足够的空闲内存,但因为它们地址并非连续,不能组成一块连续的完整内存块,会使得程序不能申请到大的内存。使用该函数接口时,首先通过需要被释放的内存块指针计算出该内存块所在的(或所属于的)内存池对象,然后增加内存池对象的可用内存块数目,并把该被释放的内存块加入空闲内存块链表上。原创 2024-05-03 00:20:50 · 1532 阅读 · 0 评论 -
[嵌入式系统-57]:RT-Thread-内核:线程间同步(互斥是一种特殊同步)
所谓优先级翻转,即当一个高优先级线程试图通过信号量机制访问共享资源时,如果该信号量已被一低优先级线程持有,而这个低优先级线程在运行过程中可能又被其它一些中等优先级的线程抢占,因此造成高优先级线程被许多具有较低优先级的线程阻塞,实时性难以得到保证。优先级继承是指,提高某个占有某种资源的低优先级线程的优先级,使之与所有等待该资源的线程中优先级最高的那个线程的优先级相等,然后执行,而当这个低优先级线程释放该资源时,优先级重新回到初始设定。如果互斥量没有被其他线程控制,那么申请该互斥量的线程将成功获得该互斥量。原创 2024-05-02 10:19:04 · 1191 阅读 · 0 评论 -
[嵌入式系统-56]:RT-Thread-内核:时钟管理,时钟节拍和基于时钟节拍的定时器
如下图所示,系统当前 tick 值为 20,在当前系统中已经创建并启动了三个定时器,分别是定时时间为 50 个 tick 的 Timer1、100 个 tick 的 Timer2 和 500 个 tick 的 Timer3,这三个定时器分别加上系统当前时间 rt_tick=20,从小到大排序链接在 rt_timer_list 链表中,形成如图所示的定时器链表结构。RT-Thread 的定时器提供两类定时器机制:第一类是单次触发定时器,这类定时器在启动后只会触发一次定时器事件,然后定时器自动停止。原创 2024-05-02 00:11:05 · 1698 阅读 · 0 评论 -
[嵌入式系统-55]:RT-Thread-内核:线程管理的基本原理:线程上下文,线程有哪些状态、如何创建一个线程、为什么会存在空闲线程?
假设有 2 个优先级相同的就绪态线程 A 与 B,A 线程的时间片设置为 10,B 线程的时间片设置为 5,那么当系统中不存在比 A 优先级高的就绪态线程时,系统会在 A、B 线程间来回切换执行,并且每次对 A 线程执行 10 个节拍的时长,对 B 线程执行 5 个节拍的时长,如下图。中用 list_thread 命令查看线程运行的过程中线程所使用的栈的大小,通过此命令,能够看到从线程启动运行时,到当前时刻点,线程使用的最大栈深度,而后加上适当的余量形成最终的线程栈大小,最后对栈空间大小加以修改。原创 2024-05-01 11:39:10 · 1645 阅读 · 0 评论 -
[嵌入式系统-54]:RT-Thread-内核:内核基础与核心概念
本章介绍 RT-Thread内核基础与核心概念,包括:内核简介系统的启动流程及内核配置的部分内容,为后面的章节奠定基础。RT-Thread 内核的简单介绍,从软件架构入手讲解实时内核的组成与实现,这部分给初学者引入一些 RT-Thread 内核相关的概念与基础知识,让初学者对内核有初步的了解,知道内核的组成部分、系统如何启动、内存分布情况以及内核配置方法。一、RT-Thread 内核介绍内核是一个操作系统的核心,是操作系统最基础也是最重要的部分。它负责管理系统的。原创 2024-04-30 18:52:03 · 3422 阅读 · 0 评论 -
[嵌入式系统-52]:RT-Thread:RT-Thread Studio工程的文件结构
RT-Thread内核模块的源代码其实并不多,也不复杂,也并没有想象的那么难。复杂的反而是集成开发环境的代码以及目标系统的各种组件和包的代码,RT Thread支持大量的物联网组件和包,这里包含了大量的源代码,反而是学习的难点。原创 2024-04-27 19:20:59 · 1821 阅读 · 0 评论 -
[嵌入式系统-51]:RT-Thread-内核:启动过程(不包括uboot情况下的RTT自组织初始化流程)
文本讲解的是:在没有uboot和其他bootloader的情况下,自组织的RTT系统是如何一步步初始化和构建起来的,因此,除了操作系统内核组件外,还包括对特定CPU和板级的初始化。原创 2024-04-27 18:13:35 · 1526 阅读 · 0 评论 -
[嵌入式系统-50]:UML中Signal,Event和Trigger的区别
总的来说,在RT-Thread中的Signal和Event也是用于描述和处理系统中的事件和交互,不过具体的实现和用法会根据RT-Thread的特性和应用场景而有所不同。总的来说,Signal更侧重于处理系统中的异步事件和进程间通信,而Event更侧重于描述和处理系统中的事件的发生和触发相应操作。总的来说,Signal描述系统中的异步事件,Event描述系统中的事件发生情况,Trigger描述事件发生的原因或条件。Signal与Event的区别在于,Signal通常用于描述系统中的异步事件,可以在系统中。原创 2024-04-27 11:06:40 · 1000 阅读 · 0 评论 -
[嵌入式系统-49]:RT-Thread-内核的信号、事件集、邮箱等通信机制
RT-Thread的信号(Signal)机制是一种用于任务间同步和通信的机制。信号可以用于触发和通知任务,使得任务可以在特定条件下执行或者唤醒。在RT-Thread中,信号可以通过信号量、事件标志组等方式进行实现。通过信号机制,一个任务可以向另一个任务发送信号,通知其某个事件已发生或者某个条件已满足,从而触发被通知的任务执行相应的操作。信号机制可以实现任务之间的协作,提高系统的响应速度和效率。原创 2024-04-27 09:50:32 · 2653 阅读 · 0 评论 -
[嵌入式系统-48]:常见轻量级嵌入式操作系统FreeRTOS、uC/OS、RT-Thread、嵌入式Linux比较与选型
综上所述,FreeRTOS、uC/OS和RT-Thread在嵌入式系统中都有各自的优势和适用场景,开发者可以根据项目需求和具体情况选择合适的操作系统。FreeRTOS、uC/OS和RT-Thread都是常见的嵌入式实时操作系统,它们在设计理念、特性和应用场景上有所不同。:Microcontroller Operating Systems的简称,是一款用于微控制器的实时操作系统,具有可裁剪性和可移植性。这些操作系统在嵌入式系统中具有广泛的应用,并根据项目需求和硬件平台的不同选择合适的操作系统。原创 2024-04-24 23:48:58 · 3728 阅读 · 0 评论 -
[嵌入式系统-47]:RT-Thread -三种不同版本(Nano版本、标准版版本、Smart版本),展现了RTT三种不同的演化阶段,三种不同的应用场合
因此,随着时间的推移,嵌入式系统开始逐渐采用操作系统,如嵌入式 Linux、FreeRTOS、Micrium OS等,以提供更高级的抽象和功能,同时降低开发和维护的成本。用户程序在执行过程中如果需要操作系统的服务,就会触发从用户态到内核态的切换,以便访问操作系统提供的功能和资源。总的来说,RT-Thread Smart版本操作系统通过用户与内核的隔离和多进程间的隔离,提供了更加安全、稳定和灵活的系统架构,适用于对安全性和可维护性要求较高的应用场景。在早期,嵌入式系统通常是为了执行特定的任务而设计的,这些。原创 2024-04-24 23:36:54 · 3024 阅读 · 0 评论 -
[嵌入式系统-46]:并行性、并发性、异步的区别
总的来说,并行性和并发性都是处理多任务的重要策略,但它们在定义、资源需求、效率与性能以及编程模型等方面存在显著差异。总的来说,异步性、并发性和并行性是多个层次上的概念,它们可以相互结合使用,也有各自独立的应用场景。综上所述,尽管并行性和并发性在定义、实现方式和性能特点上有所不同,但它们都关注于多任务处理、资源共享和系统效率的提升,并且都涉及到一些共同的编程和系统设计挑战。异步性、并发性和并行性是计算机编程中常见的概念,它们之间存在一定的关系,但又有着不同的含义和应用场景。原创 2024-04-06 15:58:19 · 1778 阅读 · 0 评论 -
[嵌入式系统-45]:图解内存访问的大小端模式:小端顺、大端逆
内存访问的端模式主要涉及到多字节数据在内存中的字节序排列方式,具体分为大端模式(Big-endian)和小端模式(Little-endian)。大端模式是指多字节数据(如0x12345678)的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。这意味着一个多字节的数据值在内存中的表示方式是从高位到低位依次存放。例如,一个十六进制数0x12345678在大端模式下的内存表示就是0x12在最低地址,0x34在次低地址,依此类推。小端模式则与大端模式相反,它是指数据的低字节保存在。原创 2024-03-31 17:34:39 · 2122 阅读 · 0 评论 -
[嵌入式系统-44]:CPU访问内存为什么需要端对齐?
CPU访问内存的端对齐(或称为内存对齐)是一种数据在内存中的排列方式,它要求数据的存储地址是数据大小(或特定单位如字、双字等)的整数倍。当数据按照这种方式对齐时,CPU能够更高效地访问这些数据。数据起始地址的对齐:例如,如果一个int类型(通常占4个字节)的变量存储在内存中,其起始地址应该是4的倍数。这样,CPU可以在一个内存访问周期内完整地读取或写入这个变量,而不需要跨越多个内存位置或进行额外的内存访问操作。性能优化:对齐的数据可以充分利用CPU的缓存行缓存行。原创 2024-03-31 16:59:52 · 690 阅读 · 0 评论 -
[嵌入式系统-43]:SOC芯片内部的总线规范
AMBA(Advanced Microcontroller Bus Architecture)是由。原创 2024-03-21 00:47:18 · 2157 阅读 · 0 评论 -
[嵌入式系统-42]:内存管理MMU与TLB-1-内存管理全方位概览
内存管理是指在计算机系统中有效地管理和利用内存资源的过程。在计算机系统中,内存是一种临时存储设备,用于存放运行中的程序和数据。内存管理的主要任务包括内存分配、内存释放、内存保护和内存优化等方面,旨在确保系统能够高效地利用内存资源,以支持程序的正常运行和系统的稳定性。内存分配:将系统中的可用内存分配给不同的程序或进程使用。内存分配通常通过操作系统的内存分配器来实现,根据程序的需求分配合适大小的内存块。内存释放:当程序不再需要某块内存时,需要将其释放回系统,以便其他程序可以继续使用。原创 2024-03-17 00:41:01 · 944 阅读 · 0 评论 -
[嵌入式系统-41]:uboot的启动流程与自拷贝、重定位
在 U-Boot 中,自拷贝指的是将自身的代码从一个内存区域拷贝到另一个内存区域的操作。这通常发生在启动过程中,其中的代码需要在不同的内存地址空间中执行,或者需要提高执行效率和可维护性。相对寻址是指根据当前指令的位置来计算目标地址的方法。在相对寻址中,指令中包含了一个偏移量或者相对地址,该偏移量表示了指令执行时目标地址相对于当前指令位置的偏移。当指令执行时,处理器会使用当前指令的地址加上该相对地址来计算目标地址。原创 2024-03-16 23:09:17 · 2212 阅读 · 0 评论 -
[嵌入式系统-40]:龙芯1B 开发学习套件 -10-PMON启动过程start.S详解
start.S文件在 /Targets/Bonito/Bonito 目录当中,是整个PMON代码的起点。我们首先研究它。文件一开头是版权声明部分,然后是包括一些头文件,然后是一些宏定义,然后才是代码。(1)与CPU相关的一些宏定义有/**/(2)编译指示下面是程序的开头,不过并不生成实际的二进制数据,它告诉编译汇编器一些信息。(3)程序入口指示_start: //程序入口标识start:解释:是告诉汇编汇编器不要对后面的代码进行优化处理,比如重新排列执行代码。原创 2024-03-16 17:11:06 · 1617 阅读 · 0 评论 -
[嵌入式系统-39]:龙芯1B 开发学习套件 -9-PMON的文件结构
参考:龙芯相关 - 心映真的空间。原创 2024-03-14 23:55:04 · 1233 阅读 · 0 评论