首页 / 资讯中心 / 文章详情

IAR嵌入式开发入门:从零搭建LPC2148工程

IAR嵌入式开发入门:从零搭建LPC2148工程 ★ FEATURED ARTICLE
简介本资源是一份面向嵌入式开发初学者与高校电子类竞赛参赛者的IAR Embedded Workbench for ARM快速入门指南聚焦ARM Cortex-M系列如LPC2148的工程搭建、代码管理、编译配置、Flash烧写及JTAG调试全流程。内容基于2007年NXP中国ARM MCU大学设计竞赛官方参考文档涵盖5大核心环节创建空工程并指定ARM工具链、添加C/汇编源码与头文件、精细化配置编译器优化级、头路径、Linker脚本.xcl、调试代理H-JTAG及下载模式、编译链接生成可执行文件、最终下载至目标板完成在线调试。资源为单个PPT文件806KB结构清晰、图文结合含详细操作截图与目录导航覆盖从软件启动到退出调试的完整工作流。目前已有512人学习下载特别适合零基础接触IAR环境、需快速掌握ARM嵌入式开发标准流程的实践者。1. IAR 是什么一个嵌入式开发的“厨房工作台”不是黑匣子你刚拿到一块 LPC2148 开发板上面密密麻麻全是焊点和芯片心里想“这玩意儿怎么让它亮个灯写个 C 语言就能跑”——别急它不是单片机是“裸机”没有操作系统帮你打理内存、调度任务、收发串口。它像一台没装操作系统的老式收音机电路是对的但你得亲手调频、接天线、拧音量旋钮少一步都出不来声。IAR Embedded Workbench 就是你在这台收音机前摆开的那张“厨房工作台”左边放着菜刀C 编译器中间是砧板链接器右边架着灶台调试器抽屉里还分门别类存着锅碗瓢盆启动文件、寄存器定义、内存布局脚本。它不替你炒菜但把所有厨具擦得锃亮、排得整齐、连火候档位都标好了——你只要专注写“菜谱”你的 C 代码它就负责把菜谱翻译成灶台能懂的指令、装进锅里、点火、测温度、甚至帮你尝一口咸淡断点调试。这份《IAR 使用手册》就是这张工作台的“新手组装说明书”专为 2007 年那批刚摸到 ARM 芯片的大学生写的。它不讲编译原理不聊指令集架构只告诉你第一步拧哪颗螺丝创建工程、第二步往哪个抽屉拿锅添加 .xcl 文件、第三步灶台开关在哪配置 RDI 驱动。它面向的是完全没碰过嵌入式开发、连 JTAG 接口长什么样都不知道的新手——你不需要懂“交叉编译”只需要知道“点一下 Rebuild all它就会给你一个能烧进芯片的文件”。今天我们不翻旧账、不比新旧就把它当一张泛黄但依然清晰的蓝图带你从零搭起第一个能跑起来的 ARM 工程。2. 先搞懂一个概念IAR 不是 IDE而是“工具链集成器”很多新手第一次打开 IAR看到满屏菜单和窗口下意识觉得“哦又一个 VS Code 或者 PyCharm 那样的编辑器。” 这是个关键误会。IAR 的核心价值从来不在“写代码多顺滑”而在于它把一整套原本要手动拼接、到处找路径、改配置文件的底层工具严丝合缝地“焊”在了一起。理解这一点才能避开后面 80% 的翻车现场。2.1 它到底集成了哪些“零件”你可以把 IAR 想象成一辆出厂即配齐的越野车而不是一堆散件编译器C/C Compiler把你的main.c翻译成 ARM 指令。它不是 GCC是 IAR 自研的对嵌入式场景做了大量优化比如更小的代码体积、更确定的执行时间但代价是——它不免费且语法细节和 GCC 有微妙差别比如某些内联汇编写法。汇编器Assembler处理.s79这类汇编文件。ARM 启动时第一行代码必须是汇编设置堆栈、跳转到 C 入口这部分不能交给 C 编译器。链接器Linker最关键的“空间规划师”。它读取你指定的.xcl文件比如LPC2148_flash.xcl严格按你写的规则把编译好的代码段.text、初始化数据.data、未初始化数据.bss塞进 LPC2148 芯片里指定的 RAM 或 Flash 地址。漏配一个地址程序就可能跑飞——这不是玄学是物理地址没对上。调试器C-SPY你的“数字显微镜”。它通过 JTAG 接口用 H-JTAG 软件做桥梁和开发板通信让你能暂停程序、看寄存器值、单步执行。它不生成代码只观察和控制运行中的代码。工程管理器Project Manager那个左侧 Workspace 窗口。它不编译也不调试但它记住了哪些文件属于这个工程、用哪个.xcl链接、优化级别设几级、头文件在哪找……所有这些配置最终都固化在.ewp工程文件和.eww工作区文件里。删掉它们整个工程就“失忆”了。提示IAR 的“智能”体现在配置联动。比如你选了LPC2148_flash.xcl它会自动把输出格式设为simple-code你选了RAM模式它就悄悄关掉 Flash 烧写选项。这种联动不是魔法是设计者把常见硬件约束LPC2148 的 Flash 起始地址是0x00000000RAM 是0x40000000提前写进了模板。你照着做就大概率不会错。2.2 为什么非得用它不用 Keil 或 GCC 行不行当然行。但这份手册的语境很具体它是为 2007 年 NXP 大学竞赛准备的目标芯片是 LPC2148配套工具是 H-JTAG SuperJTAG 硬件。当时 Keil MDK 对 NXP 芯片支持尚不完善GCC 工具链需要手动配置arm-elf-gcc、arm-elf-ld、arm-elf-objcopy还要自己写ldscript对新手极其不友好。而 IAR v4.41A 已经内置了 LPC2148 的设备支持包Device Support Pack包含预定义的寄存器头文件LPC2148.h标准外设驱动库UART、GPIO 初始化函数适配该芯片的启动代码cstartup.s79以及最关键的——LPC2148_flash.xcl和LPC2148_RAM.xcl这两个内存布局脚本。这意味着你不用去查芯片手册第 32 页的 Flash 地址范围不用手动计算堆栈大小IAR 已经帮你填好了。这是“开箱即用”的真实含义省下的不是时间是避免因地址配错导致的“程序下载成功但死机”这类血泪经验。2.3 新手最容易忽略的“隐形依赖”IAR 本身是个 Windows 桌面程序但它背后依赖三个外部组件缺一不可H-JTAG 软件它不是 IAR 的一部分是独立安装的“翻译官”。IAR 的 C-SPY 调试器只认识一种语言叫 “RDI”Remote Debug Interface而你的 SuperJTAG 硬件只说“JTAG 时序”。H-JTAG 就是那个把 RDI 指令翻译成 JTAG 电平信号的中间人。没有它IAR 点“Download”按钮开发板纹丝不动。SuperJTAG 硬件或兼容 Wiggler 设备这是物理桥梁。它一头插电脑并口注意是并口不是 USB2007 年的设备另一头用 JTAG 线缆接开发板的 JTAG 接口通常是 20 针插座。如果现在你用的是 USB-JTAG 适配器这份手册里的 H-JTAG 配置就完全不适用——这是时代差异不是你错了。芯片手册与开发板资料IAR 不会告诉你PINSEL0寄存器第 12 位控制 P0.2 的功能。它只提供LPC2148.h头文件里面定义了PINSEL0 0x00000000;这样的宏。但你怎么知道该写0x00000001还是0x00000002答案永远在LPC214x User’s Manual里。IAR 是工具芯片手册才是“说明书”。所以当你卡在“下载失败”时先别怀疑 IAR 设置问问自己H-JTAG 装了吗并口线插紧了吗开发板供电正常吗这三个问题解决掉80% 的“无法连接目标”问题就消失了。3. 第一步创建你的第一个工程从点击“Empty project”开始别被“Embedded Workbench”这么高大上的名字吓住。创建工程这件事本质上就是告诉 IAR“我要做一个项目名字叫LPC2148_Demo它用 ARM 指令代码放在D:\MyProject\这个文件夹里。” 其余的都是围绕这个核心信息展开的确认动作。我们一步步来每一步都解释清楚“为什么是这个选项”。3.1 启动软件并新建工程首先确保你已经成功安装了 IAR Embedded Workbench for ARM v4.41A注意版本号v4.41A 是手册指定的新版可能界面不同。安装完成后在 Windows 开始菜单中找到Start → Programs → IAR Systems → IAR Embedded Workbench for ARM → IAR Embedded Workbench点击打开。你会看到一个干净的主界面左侧是空的 Workspace 窗口右侧是编辑区。此时不要急着写代码新手常犯的第一个错误就是直接在编辑区敲#include stdio.h然后发现编译报错——因为工程还没建IAR 根本不知道你要编译什么、用什么规则。接下来创建工程点击顶部菜单栏的Project→Create New Project…弹出对话框后第一件事是选择保存位置点击Browse导航到你打算存放项目的文件夹比如D:\MyIARProjects\然后在File name输入框里输入LPC2148_Demo.ewp.ewp是 IAR 工程文件的标准后缀。注意这里输入的是文件名不是文件夹名。IAR 会自动在你选的文件夹里创建这个.ewp文件并同时生成一个同名的子文件夹如LPC2148_Demo来存放源码。这是它的默认习惯接受它。3.2 选择工具链和模板为什么必须选 ARM Empty project点击OK后会弹出一个关键选择窗口Tool chain工具链下拉菜单里选ARM。这是硬性要求因为 LPC2148 是 ARM7TDMI 内核。如果你误选了AVR或MSP430后面所有配置都会错位——就像给宝马车装拖拉机轮胎。Project templates工程模板这里有两个常见选项Empty project和Hello World。务必选Empty project。原因很简单Hello World模板会自动生成一个带printf的示例但 LPC2148 没有标准输出设备没有屏幕、没有串口重定向printf会直接导致链接失败或运行崩溃。Empty project则给你一张白纸只包含最基础的框架让你从最干净的状态开始添加自己的代码这是学习原理的最佳起点。选好后点击OK。此时Workspace 窗口左侧会出现一个名为LPC2148_Demo的工程节点前面有个小齿轮图标表示它已创建成功但内部还是空的。3.3 保存工作区.eww文件的作用是什么工程创建后IAR 还没“记住”这个工程。你需要手动保存工作区Workspace点击顶部菜单File→Save Workspace在弹出的对话框中将文件名设为LPC2148_Demo.eww.eww是工作区文件后缀保存到和.ewp相同的文件夹如D:\MyIARProjects\。为什么需要.eww.ewp文件只记录单个工程的配置比如用了哪个.xcl文件而.eww文件记录的是“当前打开了哪些工程、它们的排列顺序、哪个是激活状态”。想象你同时开发 LED 控制和 UART 通信两个模块.eww就是你的“项目总览图”。关闭 IAR 再打开双击.eww文件就能瞬间恢复上次的工作状态。这是新手建立秩序感的第一步.ewp是工程的“身份证”.eww是你的“工作台布局图”。3.4 验证检查工程是否真的“活”了完成以上三步后你的文件系统里应该有D:\MyIARProjects\ ├── LPC2148_Demo.ewp ← 工程文件核心配置 ├── LPC2148_Demo.eww ← 工作区文件工程列表 └── LPC2148_Demo\ ← IAR 自动创建的子文件夹未来放源码在 IAR 界面中Workspace 窗口应显示Workspace └── LPC2148_Demo (Active)并且LPC2148_Demo节点是加粗的表示它是当前激活工程。此时右键点击LPC2148_Demo能看到Options…、Add Files…等菜单项。如果这些菜单是灰色的说明工程未激活需要左键单击它一次。注意此时不要尝试Rebuild all因为工程里还没有任何源文件编译必然失败。我们的目标不是立刻跑起来而是确保“骨架”搭建正确。这就像盖房子先打地基、立梁柱再砌墙。下一步我们才往这个骨架里“添砖加瓦”。4. 添加代码不是复制粘贴而是“认领你的代码地盘”很多新手以为“添加代码”就是把.c文件拖进 IAR 窗口。其实不然。IAR 的“添加”动作本质是告诉链接器“这些文件是我这个工程的正式成员请把它们编译后按.xcl规则放进芯片内存。” 如果你只是把文件复制到文件夹却不让 IAR “认领”它就视而不见。这一步我们重点解决“文件从哪来”和“怎么认领”两个问题。4.1 准备源文件从 IAR 自带例程里“借”关键脚本手册明确指出“从 IAR 自带的 LPC2148 例程中复制下列文件”。这不是可选项是必选项。因为这些文件包含了芯片运行的“宪法”——内存布局规则。我们以LPC2148_flash.xcl为例说明它为什么不可替代。打开你的 IAR 安装目录假设安装在C:\Program Files\IAR Systems\Embedded Workbench 4.0\导航到\arm\examples\NXP\LPC214x\IAR-LPC-214X\Uart\Configuration\你会看到两个关键文件LPC2148_flash.xcl定义了当程序烧写到 Flash 时代码、只读数据、可读写数据分别放在 Flash 的哪个地址段RAM 的哪个地址段用于堆栈和全局变量。LPC2148_RAM.xcl定义了当程序只在 RAM 中调试时不烧写 Flash所有内容都映射到 RAM 地址空间的规则。为什么不能自己写可以但风险极高。比如 LPC2148 的 Flash 起始地址是0x00000000大小 512KB内部 RAM 起始地址是0x40000000大小 32KB。.xcl文件里有一行define symbol __ICFEDIT_region_ROM_start__ 0x00000000; define symbol __ICFEDIT_region_ROM_size__ 0x00080000;这就是在告诉链接器“ROM 区域从 0x00000000 开始占 0x00080000 字节512KB”。如果你写成0x00000001整个程序就偏移了一个字节后果是启动失败。IAR 自带的.xcl文件是经过芯片厂商验证的抄它是最稳妥的入门方式。将这两个文件复制到你刚才创建的D:\MyIARProjects\LPC2148_Demo\文件夹中。现在你的工程文件夹里有了“宪法”。4.2 添加你的第一个 C 文件从“点亮 LED”开始现在我们写一个最简单的main.c目标让 LPC2148 的 P0.2 引脚输出高电平假设它接了一个 LED。在D:\MyIARProjects\LPC2148_Demo\文件夹里用记事本新建一个文件命名为main.c内容如下#include LPC2148.h // 包含 IAR 自带的寄存器定义头文件 int main(void) { // 1. 配置 P0.2 为 GPIO 输出模式 PINSEL0 ~(0x03 4); // 清除 P0.2 的功能选择位bit4-bit5 PINSEL0 | (0x01 4); // 设置 P0.2 为 GPIO 模式01 // 2. 配置 P0.2 为输出方向 FIO0DIR | (1 2); // 设置 FIO0DIR 的 bit2 为 1即 P0.2 输出 // 3. 输出高电平点亮 LED FIO0SET (1 2); // 设置 FIO0SET 的 bit2P0.2 输出 1 while(1) { // 无限循环保持状态 // do nothing } }这段代码的每一行都在操作 LPC2148 的特定寄存器。LPC2148.h文件里PINSEL0、FIO0DIR、FIO0SET都被定义为指向内存地址的指针如#define PINSEL0 (*((volatile unsigned long *) 0xE002C000))。所以PINSEL0 ~...实际上是在向地址0xE002C000写数据。这就是裸机编程的核心用 C 语言直接读写硬件寄存器。保存main.c后回到 IAR 界面在 Workspace 窗口中右键点击LPC2148_Demo工程节点选择Add Files…在弹出的文件选择对话框中定位到D:\MyIARProjects\LPC2148_Demo\main.c选中它点击Open此时main.c会出现在 Workspace 窗口的工程节点下前面有一个 C 语言图标。这表示 IAR 已经“认领”了它后续编译时会处理这个文件。4.3 添加启动代码cstartup.s79是程序的“第一行”main.c是你的逻辑但芯片上电后第一行执行的代码不是main()而是一段汇编代码负责初始化堆栈指针SP初始化 C 运行环境清零.bss段复制.data段从 Flash 到 RAM最后跳转到main()这段代码就是cstartup.s79。IAR 安装目录里有现成的C:\Program Files\IAR Systems\Embedded Workbench 4.0\arm\src\lib\rt\iar\cstartup.s79将它复制到D:\MyIARProjects\LPC2148_Demo\文件夹然后在 IAR 中右键工程 →Add Files…添加这个.s79文件。为什么必须加如果不加链接器会报错Error[Li005]: no definition for main或Error[Li005]: no definition for __vector_table。因为cstartup.s79里定义了中断向量表__vector_table和_iar_program_start入口这是 ARM 芯片启动的强制要求。它就像大楼的电梯井和消防通道没有它main()这个住户根本无法入住。至此你的工程里有了三样东西main.c你的业务逻辑cstartup.s79芯片启动的“管家”LPC2148_flash.xcl内存布局的“建筑图纸”骨架和血肉都有了下一步就是告诉 IAR 这三者如何协同工作。5. 配置工程选项避坑指南与关键参数详解配置选项是 IAR 工程中最容易“点错一个就全盘皆输”的环节。它不像写代码那样有即时反馈而像在黑暗中拧螺丝——拧对了机器轰鸣拧错了一片死寂。这份手册的配置流程3.1 到 3.11看似琐碎实则环环相扣。我们不罗列所有选项只聚焦五个决定成败的关键点并附上新手必踩的“避坑清单”。5.1 进入配置界面右键工程 → Options 是唯一入口在 Workspace 窗口中务必右键点击工程名LPC2148_Demo不是工作区不是文件是工程节点然后选择Options…。这是进入配置的唯一正道。如果误点了其他地方配置将不生效。弹出的Options对话框左侧是树状菜单分为General Options、C/C Compiler、Linker、Debugger等大类。我们按手册顺序只调整以下五处5.2 关键配置一通用选项General Options里的“器件型号”左侧树状菜单点击General Options右侧找到Device下拉框必须选择LPC2148而不是LPC21xx或Generic ARM为什么重要IAR 会根据这个选择自动加载对应的LPC2148.h头文件、预定义宏如__LPC2148__并启用针对该芯片的优化。选错型号#include LPC2148.h可能找不到或者寄存器定义错位。5.3 关键配置二编译器优化级别C/C Compiler → Optimization左侧点击C/C Compiler→Optimization右侧Level下拉菜单推荐新手选Low低为什么不是High高优化会让编译器重排代码、内联函数、删除“无用”变量。这会导致调试时“单步执行”跳来跳去变量值在 Watch 窗口里显示为not accessible。Low级别生成的代码最忠实于你的源码方便你逐行验证逻辑是学习阶段的“后悔药”。5.4 关键配置三头文件路径C/C Compiler → Preprocessor左侧点击C/C Compiler→Preprocessor右侧Additional include directories输入框添加你的工程文件夹路径D:\MyIARProjects\LPC2148_Demo为什么main.c里写了#include LPC2148.h但LPC2148.h不在main.c同一目录而在 IAR 安装目录的\arm\inc\下。IAR 默认会搜索安装目录但为了保险也为了以后添加自己的头文件如led.h把工程根目录加进去是最简单直接的做法。5.5 关键配置四链接器脚本Linker → Configuration左侧点击Linker→Configuration右侧Override default program勾选框务必勾选在下方Configuration file输入框点击Browse找到并选择你之前复制的D:\MyIARProjects\LPC2148_Demo\LPC2148_flash.xcl这是整个配置中最核心的一环。它告诉链接器“请严格按照这个.xcl文件里的地址规则来安排我的代码和数据。” 漏掉这一步链接器会用默认的通用脚本程序大概率无法启动。5.6 关键配置五调试器驱动Debugger → Driver左侧点击Debugger→Driver右侧Driver下拉菜单选择RDI Driver然后点击下方Configure按钮弹出RDI Driver Configuration窗口在RDI DLL输入框点击Browse找到 H-JTAG 的安装目录如C:\H-JTAG\选择H-JTAG.dll在Target interface下拉菜单选择Wiggler因为 SuperJTAG 是 Wiggler 协议兼容设备点击OK返回这一步是连接物理世界的“握手协议”。RDI Driver是 IAR 认识的“语言”H-JTAG.dll是翻译官Wiggler是翻译官要对接的“方言”。三者缺一不可。5.7 常见问题排查新手必踩的 5 个坑提示以下现象均基于手册所用的 H-JTAG SuperJTAG 组合。如果你用的是其他调试器请参考对应文档。现象 1点击Download and Debug后提示 “No debug hardware found”原因H-JTAG 软件未运行或并口线未插紧或开发板未上电。解决先手动运行H-JTAG.exe桌面快捷方式确保其状态栏显示Connected检查并口线两端是否插牢用万用表测开发板 VCC 是否为 3.3V。现象 2编译通过但链接时报错Error[Li005]: no definition for __vector_table原因cstartup.s79文件未添加到工程或添加后未被识别文件扩展名不是.s79。解决在 Workspace 中确认cstartup.s79存在右键它 →Options→ 确认File type是Assembly file若仍是文本文件重命名后缀为.s79并重新添加。现象 3下载成功但 LED 不亮用示波器测 P0.2 无电平变化原因main.c中PINSEL0配置错误。LPC2148 的 PINSEL 寄存器是 32 位P0.2 对应 bit4-bit5但新手常误写为PINSEL0 | (0x01 2)错把位号当引脚号。解决对照LPC214x User’s Manual第 178 页 PINSEL0 表格确认 P0.2 的功能选择位是 bit4-bit5代码应为 4。现象 4调试时单步执行程序直接跳到0x00000000或0xFFFFFFFE原因.xcl文件中 ROM 起始地址或中断向量表地址配置错误导致复位向量指向了非法地址。解决打开LPC2148_flash.xcl查找define symbol __ICFEDIT_region_ROM_start__确认其值为0x00000000查找define symbol __ICFEDIT_intvec_start__确认其值也为0x00000000。现象 5修改main.c后点击Rebuild allIAR 仍编译旧代码原因IAR 的增量编译机制有时会“缓存”旧文件尤其当文件在外部编辑器如记事本中修改后未触发 IAR 重载。解决在 IAR 中点击Project→Clean清空所有中间文件再Rebuild all。养成习惯代码修改后先Clean再Rebuild。6. 编译、下载与调试跑通第一个例子然后知道下一步学什么现在所有配置已完成代码已添加链接脚本已就位。是时候见证奇迹了。这个过程只有三步编译链接、下载到板、调试验证。我们会把每一步的界面反馈、预期结果、失败时的自查点全部拆解清楚。跑通之后我会告诉你从这个“点亮 LED”的起点如何一步步走向 UART 通信、定时器中断、RTOS而不至于迷失在庞杂的文档海洋里。6.1 编译和链接看懂 IAR 的输出窗口在 IAR 主界面点击顶部菜单Project→Rebuild all或按快捷键CtrlShiftB。预期现象底部Build窗口会滚动输出大量文字最后以一行绿色文字结束Information: Project successfully built.关键检查点查看Build窗口最末尾几行确认没有Error红色或Warning黄色。Warning如Warning[Pe188]: enumerated type mixed with another type可暂时忽略但Error必须解决。在Build窗口上方切换到Messages标签页这里会列出所有警告和错误的详细位置文件名、行号。成功后在D:\MyIARProjects\LPC2148_Demo\Debug\Exe\文件夹下会生成一个LPC2148_Demo.bin或.hex文件这就是能烧进芯片的“成品”。如果失败不要慌。IAR 的错误信息非常精准。例如Error[Li005]: no definition for main说明main()函数没被找到立刻检查main.c是否添加、是否拼写为Main()首字母大写Error[Pa045]: undefined symbol PINSEL0说明LPC2148.h没被正确包含检查头文件路径和#include语句。6.2 下载程序到目标板从 IAR 到物理世界确保H-JTAG 软件已运行状态栏显示ConnectedSuperJTAG 硬件已通过并口连接电脑JTAG 线缆已接好开发板开发板已上电IAR 中Debugger → Driver配置已正确指向H-JTAG.dll点击顶部菜单Project→Download and Debug或按CtrlD。预期现象Build窗口会再次滚动显示Downloading...然后出现Download successful。IAR 界面会自动切换到调试视图顶部工具栏出现Go、Step Into、Break等按钮左侧Register窗口显示当前 CPU 寄存器值如PC0x00000000,SP0x40008000。验证成功观察开发板P0.2 对应的 LED 应该常亮。如果没亮用万用表测 P0.2 对地电压应为 3.3V。如果提示Failed to connect to target立即检查 H-JTAG 状态、并口线、开发板供电。这是物理层问题和代码无关。6.3 代码调试用“单步”看清每一行发生了什么现在程序已在芯片上运行但while(1)让它停在了原地。我们用调试器“撬开”它看看内部发生了什么。在main.c文件中将光标放在FIO0SET (1 2);这一行按F9设置断点行号左侧会出现红点。点击顶部工具栏的Go按钮绿色三角形程序会运行到断点处暂停。此时Register窗口中的FIO0SET寄存器值应为0x00000004即 bit2 为 1。点击Step IntoF7进入下一行while(1)再点一次程序会停在while(1)的大括号{上。在Watch窗口View→Watch右键 →Add watch输入FIO0SET即可实时监控该寄存本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站