☰
ARM微处理器与嵌入式系统设计:从教材到工程落地的精读指南
2026/10/24 1:14:35 网站建设 项目流程

简介:《微处理器系统结构与嵌入式系统设计(第3版)》是一本基于ARM内核的经典教材,系统讲解微处理器系统组成、体系结构与嵌入式系统设计方法,适合通信、电子信息、自动控制、集成电路等专业本科生作为微机原理与嵌入式系统课程教材,也适用于考研复试备考及毕业设计阶段的底层硬件参考。全书从逻辑电路与IP核设计层次剖析微处理器体系结构与指令系统设计的核心思想,揭示软件指令与硬件电路之间的接口联系,并着重探讨嵌入式操作系统结构、系统移植、引导与加载、软硬件协同设计以及SoC设计等关键技术,帮助读者提升编写与底层硬件交互的高效代码的工程设计能力。资源为PDF文档,共1个文件,压缩包约96MB,文字已经过OCR识别转为可编辑状态,同时自带完整书签目录,方便读者检索、批注与摘录重点内容。目前已有830人学习下载,尤其适合需要系统复习ARM体系结构、准备研究生复试或开展嵌入式方向课题的读者,是一份内容完整且实用价值高的学习资料。

1. ARM微处理器与嵌入式系统设计:从翻书到落地的差距在哪

做嵌入式开发这些年,我发现一个很普遍的现象:很多人手里就有《ARM微处理器系统结构与嵌入式系统设计》第3版这样的PDF,也认真翻过,可真到项目里写启动代码、调中断、配MMU的时候,依然会把概念和实际寄存器对不上。这不能全怪阅读不认真,更主要的原因是这类教材把体系结构知识和工程实践拆成了两条线,书里讲的是ARM微处理器怎么设计、指令怎么流水、异常怎么响应,而项目里要面对的是一个具体芯片的启动文件、链接脚本和调试器。读者缺的不是阅读量,而是把这两条线重新接起来的桥梁。

这本书第3版的定位,恰好就是这座桥梁的原材料。它不教你怎么用某款开发板点灯,而是把ARM微处理器作为系统结构的核心,从存储映射、异常向量、协处理器一直讲到嵌入式系统怎么把外设和总线组织起来。适合的读者不是刚碰单片机的初学者,而是已经写过一些裸机程序、想搞清楚“为什么启动文件要先建异常向量表”“为什么中断服务函数要保存这么多寄存器”“MMU到底保护了什么”的从业者。这篇笔记我就围绕这本书的阅读路径来展开:先理清它的知识框架,再把核心章节对应的工程实践逐个拆开,最后讲阅读和落地过程中我见过的高频翻车点。你可以把它当成一份带着项目视角的精读地图来用。

2. 先把书的骨架看清楚:ARM系统结构知识在嵌入式设计里的位置

2.1 ARM核、存储器与总线:阅读本书前先建立的整体框架

《ARM微处理器系统结构与嵌入式系统设计》第3版整体上走的是“自底向上再自顶向下”的路线:先讲ARM微处理器的指令集和编程模型,再讲存储系统、异常和中断,最后才落到嵌入式系统的总线组织和硬件接口设计。很多人第一次读的时候会觉得前半部分像计算机组成原理,后半部分像单片机原理,两段之间有断层。实际上,把整本书串起来的主线只有一条:数据从哪里读进来、CPU用什么样的状态机去处理、异常和中断如何打断这个状态机、结果如何写回存储器。

这条主线里,三个概念是全书的锚点。第一个是ARM微处理器的运行模式与寄存器组,用户模式和异常模式之间的寄存器切换,是理解后面所有异常处理代码的基础;第二个是存储映射,也就是芯片上电后CPU从哪个地址取第一条指令、外设寄存器被安排在哪个地址区间、片内SRAM和外部SDRAM各占多大窗口;第三个是总线结构,ARM核通过什么样的总线把CPU、存储控制器、中断控制器和DMA连在一起。第3版相较于早期版本,比较大的变化就是增强了对存储系统和总线层次的描述,不再像老版那样把ARM核当成一个孤立处理器来讲。

我建议你在读前五章的时候不要急着陷入每条指令的细节。先把ARM微处理器的三种状态(ARM、Thumb、调试)、七种运行模式、两类寄存器组(当前分组寄存器和备份寄存器)画成一张图,再对照一张典型的芯片内存映射图去看,你会发现教材里抽象的“存储映射”其实就是你项目里链接脚本中那个分散加载文件描述的地址区间。这样整本书就有了组织锚点,后面章节的内容都可以挂到这张图上。

2.2 不同读者怎么选读:做驱动、做系统移植、做硬件设计的各自路径

同一个PDF在不同人手里价值差异很大,差别就在于从哪一章开始精读。如果你日常工作偏底层驱动,每天跟GPIO、UART、DMA打交道,最该细读的是异常与中断章节、存储系统章节以及协处理器CP15相关的指令。驱动开发真正依赖的ARM微处理器知识点,不是指令集本身,而是中断控制器如何把外设中断映射到CPU的IRQ/FIQ线、Cache和写缓冲对寄存器操作顺序的影响、以及内存屏障指令在DMA和外设交互中的作用。

如果你是做系统移植的,比如在板子上跑RTOS或某种开源内核,重点就在存储管理单元(MMU)和Cache一致性问题上。教材里关于页表、域访问权限、地址翻译的章节,直接对应你配置内存映射时填写的页表项。你需要关心的不是每一级页表基地址叫什么名字,而是代码段、数据段、外设映射区这三类内存区域在页表项里的属性怎么设置,Cache策略选write-back还是write-through会带来什么行为差异。

做硬件设计或板级支持的读者,则应该优先看总线时序和存储控制器的部分。书里对AHB和APB总线层次关系的说明,能帮你理解为什么芯片上有些外设访问速度特别快、有些则必须经过桥接器。这里我建议你做一个交叉阅读动作:选某芯片原厂的一颗常见处理器芯片的用户手册,和教材里的总线框图对照,在手册里找到AHB总线、APB0、APB1各自挂了哪些外设。教材给的是通用逻辑,芯片手册给的是具体实例,两者对齐之后,你对整本书的理解会扎实很多。

表:不同读者角色的精读路径与落地对象

角色重点章节落地对象验证方式
驱动开发异常/中断、存储系统、Cache与写缓冲中断服务程序、DMA描述符、寄存器操作序列调试器断点观察中断返回地址和外设状态
系统移植MMU、页表、域访问控制内核启动阶段内存映射、设备树内存节点跑通内核后检查/proc内存分区与页表属性
硬件设计总线层次、存储接口时序、片选与地址译码FPGA原型验证、板级存储器布线、时序约束逻辑分析仪抓总线读写时序

2.3 第3版的增量内容在哪里:系统级设计视角明显加重

读第3版时你可能会注意到一个细节:书里讨论的不再只是CPU核心本身,而是一个以ARM微处理器为中心的完整系统结构。增加的不少篇幅集中在系统的启动流程、存储仲裁、功耗管理、调试体系这些系统级话题上。这意味着教材默认你已经具备基础的ARM核知识,它更想培养的是“站在整板视角看处理器”的能力。对应到真实工程项目里,这种视角体现在三处:看原理图时先找启动配置引脚(Boot Mode选择)、上电时序和复位电路;看芯片手册时先看时钟树和总线矩阵,外设的时钟源和总线挂载决定了它能不能在低功耗模式下唤醒CPU;写代码时先设计内存布局,知道哪些数据放DTCM、哪些放外部SDRAM,这直接影响Cache命中率和实时性。

所以我读这本书的建议顺序不是从头到尾,而是先读涉及的启动流程章节和存储系统章节,再回头补体系结构的基本概念。先建立整板观,再深入核内细节,比从流水线开始读更容易坚持下来。也别指望读一遍就能把整本书变成自己的知识,这本书更适合作为随时回来查阅的参考书来用,项目里遇到哪类问题,就去翻对应的章节。

3. 把ARM微处理器核心概念落到真正的工程代码:异常、启动与内存映射

3.1 异常向量表与启动代码:书里的异常模型如何对应启动文件

读过教材里异常类型的阐述后,很多人会认为异常向量表就是一段简单的跳转指令,实际去读一款芯片的启动文件时才发现里面还包含栈指针初始化、系统时钟配置、数据段拷贝和清零。还记得前文提到的运行模式与寄存器组分组吗?启动代码正是最依赖这组概念的地方。次你要在任何一个基于ARM微处理器的工程里做移植,都绕不开对启动文件的理解。

下面我用一段常见的ARM启动代码骨架来说明异常向量表与初始化流程的实际组织方式。这里以汇编代码片段示意:

; 异常向量表,位于复位起始地址 VECTORS: LDR PC, =Reset_Handler ; 复位异常 LDR PC, =Undefined_Handler ; 未定义指令异常 LDR PC, =SVC_Handler ; 系统调用异常 LDR PC, =Prefetch_Handler ; 指令预取中止 LDR PC, =Data_Handler ; 数据中止异常 LDR PC, =Reserved_Handler ; 保留 LDR PC, =IRQ_Handler ; 外部中断请求 LDR PC, =FIQ_Handler ; 快速中断请求 Reset_Handler: ; 设置为系统模式,使用用户模式的寄存器组 MRS R0, CPSR BIC R0, R0, #0x1F ; 清除模式位 ORR R0, R0, #0x1F ; 设置为系统模式 MSR CPSR_c, R0 ; 初始化各模式下的栈指针 LDR SP, =__stack_top ; 拷贝数据段、清零BSS段(略) ; 跳转到主程序 BL main B .

这段代码的逻辑很直白,但对没接触过ARM异常模型的读者来说可能有几个隐藏点。表中的每条LDR PC指令都使用了PC相关加载,这是因为向量表可能被放置在ROM里,需要将PC重定位到对应处理函数的绝对地址;进入Reset_Handler后先把处理器模式切换为系统模式,是为了让后续代码能够使用和用户模式一致的寄存器组访问;栈指针初始化必须在任何函数调用之前完成,因为BL指令会写入LR寄存器,而C函数调用会压栈,没有栈就谈不上函数调用。

我一般会建议刚接触ARM微处理器的开发者在移植启动文件时做一个实验:把异常向量表里的IRQ入口暂时指向一个死循环,然后在中断服务函数里放一个串口打印,观察程序在中断触发后的跳转路径。这个实验能直观验证向量表跳转是否正确,也能排查是否存在向量表偏移配置错误——这类问题常常表现为“中断响应了但进错了处理函数”,根因是VTOR寄存器里向量表基地址与实际存放位置不一致。

3.2 存储映射与分散加载:书里的内存布局怎样体现在链接脚本中

ARM微处理器的存储映射不是天然固定的,每个芯片设计者都在芯片手册里定义了各自的地址空间。教材中的存储系统章节讨论的“统一编址”与“独立编址”差异,放在工程里就是外设寄存器和内存之间的地址关系。嵌入式项目中常见做法是用分散加载描述文件来定义代码段、数据段、堆和栈的存放位置,含义与教材里讲的存储映射一一对应。

以一段常见的分散加载配置为例:

LOAD_ROM 0x08000000 0x100000 { ; 整个镜像文件从0x08000000开始,大小1MB EXEC_ROM 0x08000000 0x100000 { ; 向量表和代码段定位于只读区域 *(.vectors) *(.text) *(.rodata) } ; RAM区域从0x20000000开始 EXEC_DATA 0x20000000 0x20000 { ; 数据段拷贝目标地址 *(.data) ; BSS段清零区域 *(.bss) ; 堆区域,向高地址增长 . = ALIGN(4); . += 0x4000; } ; 栈放在RAM最高地址,向下增长 STACK 0x20020000 EMPTY 0x2000 { . += 0x2000; } }

这里的地址不是随意写的,0x08000000是某芯片内部Flash的起始地址,0x20000000是内部SRAM的起始地址,这些数字都来自芯片手册中存储映射章节的表格。你在写分散加载文件之前,务必翻开芯片手册,把Flash起始地址、SRAM起始地址、SRAM大小、外设寄存器区间的地址都标记出来。

配合教材来读分散加载文件时,有一个最容易踩坑的点:堆地址必须在BSS段之后,栈地址必须在RAM最高地址,两者相向生长而不是同向生长。如果堆和栈都从低地址向高地址扩展,堆的溢出会先覆盖栈,导致程序跑飞到异常向量表里,且这种错误极难排查,因为触发时间点不固定。从教材的角度看,这属于存储布局设计正确性问题,教材讲的是映射原理,而链接脚本是原理的具体实现。

3.3 中断控制器与嵌套优先级:教材没细讲但项目离不开的内容

教材在异常与中断章节里通常会详细描述ARM微处理器核的IRQ和FIQ行为,但对实际芯片里的中断控制器基本不会展开——因为那属于芯片厂商的设计范畴。可项目里真正要面对的恰恰是这部分内容:几十个外设中断源如何映射到CPU的一条IRQ线上,中断优先级怎么配置,哪些中断可以嵌套,哪些中断在响应时需要清挂起位。这是教材的天然空白,也是读者在读完异常章节之后必须补齐的工程常识。

这里我给一个项目里常用的中断初始化与中断服务函数的模式:

typedef struct { uint32_t enable; uint32_t priority; } irq_config_t; /* 初始化某个外设中断 */ void irq_init(irq_config_t *cfg) { /* 第一步:关闭总中断,避免配置过程中断响应 */ __disable_irq(); /* 第二步:配置外设中断源与优先级 */ NVIC_SetPriority(EXTI_IRQn, cfg->priority); NVIC_EnableIRQ(EXTI_IRQn); /* 第三步:使能外设中断源(略) */ __enable_irq(); } /* 中断服务函数 */ void EXTI_IRQHandler(void) { /* 注意:进入中断后硬件已保存部分寄存器 */ uint32_t status = exti_get_status(); if (status & EXTI_LINE_0) { /* 逐位清除挂起标志,不清除会反复进入中断 */ exti_clear_pending(EXTI_LINE_0); /* 处理具体业务 */ } }

在阅读这本书和编写中断代码之间,你需要建立这样一个翻译表:教材里的“IRQ异常响应”在芯片里被翻译成“中断控制器把外设中断映射到IRQ线上并置位CPU的IRQ标志”;教材里的“异常处理程序入口”被翻译成“芯片手册里标定的中断向量名称”;教材里的“保存现场与恢复现场”被翻译成“编译器在进入ISR时自动压栈R0-R3、R12、LR、PC、xPSR,退出时自动出栈并跳转”。建立这个翻译表之后,你才会明白为什么中断服务函数里不能调用某些可能有重入问题的库函数,也不能长时间关中断执行耗时操作。

4. 精读方案:把重点章节拆成可执行的三遍阅读作业

4.1 第一遍:抓ARM微处理器体系结构主线,要求能回答三个问题

第一遍阅读的目标不是记住每条指令编码,而是能在合上书之后回答三个问题:ARM微处理器的七种运行模式分别在什么情况下进入和退出;异常返回时PC和LR的值分别是什么含义;存储映射中不同地址区间的访问属性差异是什么。这三个问题分别对应编程模型、异常机制和存储系统,恰好是全书三个最核心的模块。

我建议第一遍用一周左右的时间,每天只读一到两章,读完立刻用自己的话在纸上画出概念关系图。比如异常机制,从外部中断触发到CPU进入IRQ模式,再到保存现场、跳转处理函数、最后恢复现场返回,整个过程至少包含硬件自动完成的五个步骤和软件必须完成的三步操作。如果你能不看书写出这八个步骤,才算真正建立了异常机制的完整框架。第一遍不需要写代码,也不需要看懂具体汇编,核心是把知识骨架搭起来。

4.2 第二遍:对着具体芯片手册把书里的抽象概念逐项验证

第二遍阅读时要引入具体对象。我常见做法是选一颗自己项目里正在使用的芯片,把它原厂手册里的关键信息与教材一一对照。教材里讲寄存器组分组,手册里有对应模式的SP和LR具体在哪个地址;教材里讲存储映射和地址译码,手册里有存储器地址分配表;教材里讲异常向量表的基地址可重定位,手册里有相关配置寄存器的具体位定义。这本质上是把你第三遍实战时会用到的信息预先在书中找到挂靠点。

第二遍的验证动作可以按表格推进:

教材主题芯片手册对应位置验证动作预期结果
异常向量表重定位中断向量表偏移寄存器读该寄存器的复位值复位后向量表位于Flash起始地址
存储属性与Cache策略芯片内存映射表识别哪些外设区不支持Cache外设寄存器区间不允许write-back缓存
总线层次与桥接器总线架构框图找到APB桥接器的时钟使能位APB外设使用前必须先开启对应时钟
外部中断映射中断控制器外设ID映射表确认某个外设中断号中断号与向量表名称一一对应

这个表做好之后,你的精读就变成了一个查阅动作:工程里遇到任何异常行为,都能快速定位到教材里的原理部分和手册里的配置部分。这个过程不是浪费时间,而是给后面的排障打基础。

4.3 第三遍:按裸机驱动到RTOS移植的顺序重读关键章节

第三遍重读发生在你已经有项目实践经验之后,建议选择从驱动到移植的两个典型路径各走一遍。第一路径是写一个带DMA的串口驱动,此时重读书里与存储系统和Cache相关的章节。DMA传输的数据如果经过Cache,源地址和目的地址所在区域的Cache属性必须配置一致,否则会出现数据不同步的异常。第二路径是移植一个RTOS到板子上,此时重读异常、上下文切换和MMU相关章节,因为RTOS的上下文保存和恢复正是基于ARM微处理器异常机制来设计的。

我特别建议第三遍时做一个动作:在RTOS的上下文切换函数里,对照教材画出实际保存的寄存器清单,步骤与代码对应进行标注。比如PendSV异常里保存哪些寄存器、切换到新任务是恢复哪些寄存器、硬件压栈与软件压栈的重叠区在哪里。这个动作能极大加深对“异常处理程序”与“普通函数”之间差异的理解。没有做过这个动作的开发者,遇到RTOS调度异常时往往只能靠屏蔽中断来缓解问题,而不是真正定位到上下文恢复不完整这个根源上。

5. 阅读《(基于ARM)微处理器系统结构于嵌入式系统设计(第3版)》常见问题与避坑指南

5.1 注意:把ARM核当单片机来读,是最常见的误区

现象:不少读者拿到这本书后,试图像读单片机教程那样逐页精读每个章节,结果读到指令集和流水线部分就卡住了,后面的存储系统和总线部分完全看不进去,最终半途而废。

原因:这本书不是面向初学者的硬件操作手册,而是一本以ARM微处理器结构为主线的系统教材。它默认你懂得基本数字电路和计算机组成原理,不会像开发板教程那样手把手教你怎么操作寄存器。用单片机教程的阅读预期去读系统结构教材,必然会造成理解断层。

解决:调整阅读预期和顺序。如果你还没建立任何ARM微处理器的工程概念,先挑一本以某款Cortex-M开发板为载体的实战书作为前置阅读,教材里讲到的抽象概念在大脑中有了具体形象之后,再回头读这本教材就有了很好的理解基础。书里的异常向量表、存储映射这些概念,在开发板实战书里往往是以具体寄存器配置的形式出现的,先用后者建立操作经验,再用前者补原理框架。

5.2 注意:拿到PDF就开始逐页精读,不如先做索引笔记

现象:有开发者存了第3版的PDF之后,每天花两小时从第1页开始往后面翻,翻到十几个章节之后,前面的内容已经忘得差不多了,遇到项目问题也想不到回翻对应的章节找答案。

原因:纯粹线性阅读的问题在于没有建立索引,知识是串在一起的,但实际使用场景往往需要从问题倒查知识点。项目里的异常是因为Cache配置问题,他找的是中断章节;启动失败是因为链接脚本的分散加载段布局冲突,他找的是指令集章节。找不到对应关系是因为缺少一个从工程问题到书中章节的索引表。

解决:第一次快速通读时,用便利贴或者笔记软件把所有章节标题、关键概念、页码位置记录下来,按照工程话题重新组织索引。比如把异常类型、向量表、中断服务函数、优先级分组、上下文切换整理成一类;把存储映射、Cache、MMU、页表整理成另一类。二次阅读时直接按索引走,比从第1页开始重读效率要高很多。这个习惯在查阅PDF文档时特别有用,电子文档的跳转不如实体书方便,但索引笔记能弥补这个劣势。

5.3 注意:实验板选型与书中结构不一致时的排查

现象:A同学按照教材推荐的结构选择实验板,结果发现教材里说的AHB总线高速外设在自己选的板子上访问速度并没体现出优势,部分外设甚至出现读写时序不稳定情况。

原因:教材描述的是ARM微处理器的通用结构,而不同芯片的AHB/APB层次、总线仲裁策略、外设时钟使能方式差异很大,并不完全一致,教材里的框图与实际芯片手册中的块图并不总是一一对应。

解决:以手中芯片手册为准进行适配。排查时按三步走:第一步从芯片手册的总线矩阵框图中确认外设实际挂载的总线;第二步查看该外设的时钟源配置,确认APB分频系数;第三步用示波器或逻辑分析仪测量实际读写时序,与手册中的数据手册时序图对比。每确认一处差异,就在教材对应章节旁边做标记,把通用描述替换成该芯片的实际情况。处理完这些差异之后,你对总线层次的理解反而比只读书本知识要深入得多。

5.4 注意:地址映射和总线宽度不一致是隐蔽的项目杀手

现象:某开发者在将一段裸机代码从一款16位总线宽度的芯片移植到32位总线的ARM微处理器芯片上时,出现了外设寄存器读写值不正确的现象,排查几天后才发现问题出在访问位宽上。

原因:ARM微处理器支持多种总线宽度的存储访问,但外设寄存器通常被设计为固定宽度的映射,如果你的代码用8位访问方式去读写一个32位寄存器,实际效果可能是不写入、写不完整自然就读不出预期值。教材里存储系统章节讨论的数据访问类型相关知识点,在这里正是问题的根源。

解决:修改代码,确保每次寄存器访问都使用与寄存器物理宽度一致的访问方式。详细排查步骤如下:第一,查阅芯片手册中外设寄存器的物理宽度;第二,检查代码里指针类型声明的宽度是否与目标寄存器一致;第三,对于结构体方式映射的外设寄存器组,确认编译器没有做字节对齐填充;第四,如果代码是移植来的,逐条核对原平台的访问宽度与新平台的差异。访问地址正确但数据不对的案例,十有八九出在宽度不匹配上面,可以通过寄存器窗口查看实际读回数据的位分布来确认。

5.5 注意:中断响应中修改共享变量导致的隐性问题,教材不会告诉你

现象:某项目在低优先级中断里置位一个全局标志位,高优先级中断里轮询这个标志位并执行相应操作,跑了几小时之后随机出现异常跳转,调试器定位到标志位地址。

原因:存储器中标志位所在的地址如果处于write-back策略的Cache区间,低优先级中断里写入的数据还在Cache行中,高优先级中断在另一个CPU上访问该地址时读到的可能仍是旧值或旧数据的一部分,这也就是教材里提到的Cache一致性问题在嵌入式系统设计中的典型体现。因为两个中断都运行在同一核上,很多人认为不存在一致性问题,实际上在写缓冲与指令预取机制的影响下,数据更新在时间上并不是绝对可见的。

解决:对中断间共享的变量加上原子操作保护或缓存清理动作。最低成本的解决方法是把该变量声明为volatile,确保编译器每次都从内存加载;更稳妥的做法是在写入后执行一条数据同步屏障指令。如果你在做多核系统,则必须查书里关于Cache一致性的相关章节和具体处理器的缓存维护指令。这个问题在教材里出现在存储系统章节,看上去不太起眼,却恰恰是工程中排查中断类故障时最容易漏掉的环节。

6. 读完这本书后值得做的第一件事:建立一张ARM异常响应速查卡

与其合上书就急着开新项目,我建议你先做一件小事:把ARM微处理器从异常触发到返回全过程按自己的理解画成一张速查卡。卡片上需要写清楚五件事:异常类型有哪些、每种异常的入口模式是什么、进入异常时硬件自动保存了哪些寄存器、软件还需要保存哪些寄存器、返回时用哪条指令并注意哪些细节。这张速查卡做好之后,项目里遇到任何中断异常类问题,先拿卡片对照再动手调试,能节省大量时间。

我自己的习惯是再做一张调试辅助卡,一侧写上常见异常现场的标志性表现,比如未定义指令异常通常是PC指向非法指令地址或指令编码不存在、数据中止异常通常发生在非法地址访问且伴随总线错误标志置位、IRQ频繁进入常与中断挂起位未清除相关。另一侧写上排查动作,比如先读备份寄存器里保存的异常返回地址判断异常发生位置,再查标志寄存器的执行状态,最后查看函数调用栈数据。做卡片的动作本身也对理解体系结构知识有巩固作用。

做完这两张卡片之后,你再回头看那本第3版的PDF时,它就不再是一堆概念集合,而是与你工作中的调试记录对应起来的工程资料。当你拿到一块新板子或者处理一个新系统时,第一次查资料时多花半小时把教材相关章节翻阅一下,比你在真机上反复试错要高效得多。这个阅读与工程的习惯如果长期保持,数据分析能力、问题定位能力会一起提升。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询