尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

CCS烧录程序原理与TI C2000 DSP烧录失败排查指南

CCS烧录程序原理与TI C2000 DSP烧录失败排查指南 1. 项目概述CCS烧录程序到底在解决什么问题“CCS烧录程序”这个标题看似简单但背后牵扯的是嵌入式开发中最基础、也最容易卡住新手的“最后一公里”——代码写完了、编译通过了、调试逻辑也验证过了可单片机就是不跑你的程序。这时候你点下那个绿色的“Debug”按钮CCSCode Composer Studio界面底部弹出一行小字“starting ccs debug session...: initializing: icepick_c_0”然后就卡住不动或者更糟直接报错“Error connecting to the target: (Error -260 0x0) Unable to communicate with the device”。这不是代码的问题是烧录链路断了。CCS本身不是烧录器它是一个集成开发环境IDE真正完成“把编译好的.out文件写进DSP或MCU Flash里”这件事的是一整套软硬协同的流程从CCS内部调用的XDS调试探针驱动、目标芯片的JTAG/SWD物理接口、芯片内部的Boot ROM引导逻辑到Flash编程算法的加载与执行——每一个环节都可能成为瓶颈。我带过几十个刚毕业的嵌入式工程师90%的人第一次独立调试TMS320F28335或C2000系列DSP时都在这一步反复折腾超过两天。他们查的关键词全是“程序没办法烧录进单片机”“ccs怎么改工程路径”“ccs默认工作路径”说明问题不在代码逻辑而在环境配置与硬件握手的细节里。这篇文章不讲抽象理论只讲我在TI C2000产线调试现场、高校实验室和客户技术支持中反复验证过的实操路径为什么CCS 12.x在Windows 11上连不上XDS200探针为什么改了工程路径后烧录就失败为什么“jflash烧录程序”能成功而CCS却报错这些都不是玄学而是有明确信号时序、寄存器配置和路径依赖的确定性问题。如果你正在用CCS配置DSP28335、调试F280049C、或者打包lib供团队复用那么这篇内容就是为你写的——它不教你C语言但能让你少花17个小时在无意义的重装和重启上。2. CCS烧录程序的整体设计与思路拆解2.1 烧录不是“一键下载”而是一场三阶段握手协议很多人误以为CCS烧录就是把.out文件拖进Flash里就像复制一个txt文件。这是根本性误解。真正的烧录过程分为三个严格时序的阶段缺一不可第一阶段物理连接与调试器初始化ICEPick阶段当你点击Debug按钮CCS首先通过USB向XDS调试探针如XDS110、XDS200发送指令要求其建立与目标芯片JTAG TAP控制器的通信。此时CCS日志里出现的“icepick_c_0”正是TI为C2000系列定制的ICEPick-C模块实例名。它负责扫描JTAG链、识别芯片IDCODE、复位TAP状态机。如果这一步失败常见原因不是线没插好而是① XDS固件版本与CCS不匹配例如CCS 12.4需要XDS110固件v4.4.0以上② 目标板供电不足导致JTAG引脚电平不稳实测TMS320F28379D在3.0V供电时TCK信号幅度仅2.1V低于JTAG规范要求的2.4V③ JTAG接线顺序错误TMS/TCK/TDI/TDO四线必须严格按手册定义顺序焊接反接会导致ICEPick无法识别IDCODE。第二阶段CPU内核接管与RAM加载GEL脚本阶段ICEPick确认芯片在线后CCS会加载一个名为GELGeneral Extension Language的脚本该脚本由TI官方提供路径通常为C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-c2000_20.2.5.LTS\gel\C2000.gel。GEL脚本的核心任务是① 配置CPU时钟树将PLL倍频系数设为正确值F28335默认为0x000A即10倍频② 初始化RAM段RAMLS0-LS7为后续烧录算法腾出运行空间③ 关闭看门狗WDKEY0x0055, WDKEY0x00AA否则烧录过程中CPU会被强制复位。这一步失败的典型现象是CCS卡在“Initializing Target”长达30秒日志显示“Target not responding”。此时绝不能盲目重启CCS而应打开CCS的“View → Target Configurations”右键当前配置选择“Launch Selected Configuration”在弹出窗口中勾选“Show console output”观察GEL脚本执行到哪一行中断。第三阶段Flash编程算法注入与执行Flash Plugin阶段前两步成功后CCS才开始真正的烧录动作。它会从工程配置中读取Flash插件路径如C:\ti\ccs1240\ccs\tools\flash\c2000\flash_plugin_f28335.dll将该DLL动态加载到目标芯片RAM中并跳转执行。这个DLL内部封装了完整的Flash擦除/编程/校验算法包括① 擦除指定扇区Sector A-F每扇区16KB② 将.out文件中的.text段数据分块写入每次最多256字节受Flash写缓冲区限制③ 执行ECC校验码生成并写入对应ECC扇区。注意F28335的Flash编程必须在15MHz以下时钟频率下进行否则会触发“Flash Access Violation”异常。因此GEL脚本在第二阶段必须先降频烧录完成后再恢复主频——这个细节在TI官方文档SPRUH18中第3.4.2节有明确时序图但90%的用户从未翻过。2.2 为什么CCS 6.1和CCS 12.x的烧录行为差异巨大网络热词中高频出现“ccs安装6.1”“ccs 20教程”说明大量用户仍在使用老旧版本。但CCS 6.1与CCS 12.x在烧录架构上有本质区别对比维度CCS 6.12015年发布CCS 12.x2022年发布调试器驱动模型基于XDS Legacy Driver内核态WDM驱动基于XDS Unified Driver用户态UMDF驱动Flash插件加载方式静态链接到CCS主进程DLL路径硬编码动态加载支持自定义插件路径需在ccs.ini中配置工程路径解析逻辑仅支持相对路径且对中文路径完全不兼容支持UTF-8绝对路径但会自动将空格转义为%20GEL脚本执行机制单线程阻塞执行脚本错误直接导致CCS崩溃多线程异步执行错误时仅终止当前调试会话这个差异直接导致一个经典问题“ccs怎么改工程路径”——在CCS 6.1中如果你把工程从D:\MyProject移到D:\嵌入式项目\CCS_F28335CCS会因路径含中文而无法加载GEL脚本报错“Failed to load GEL file”。而CCS 12.x虽能识别中文路径但若工程路径含空格如D:\My Projects\F28335它会将空格转义为%20导致Flash插件找不到对应的.out文件路径最终烧录失败。解决方案不是改路径而是在CCS 12.x的ccs.ini文件末尾添加-Dccs.disable.url.encodingtrue强制禁用URL编码。2.3 CCS与J-Flash烧录结果不一致的根本原因热词中频繁出现“jflash烧录程序”与“ccs软件烧录程序到dsp”的对比说明很多用户发现J-Flash能成功烧录的程序用CCS却失败。这不是工具优劣问题而是两者对“烧录上下文”的定义完全不同J-Flash是裸机烧录器它只关心二进制数据与Flash地址映射。你给它一个F28335_FLASH.out文件它直接解析其中的Load Address如0x330000将数据块写入对应物理地址不涉及任何CPU初始化、时钟配置或RAM加载。因此即使你的DSP晶振损坏、PLL未锁定J-Flash依然能写入Flash只是写完后无法运行。CCS是调试环境烧录器它必须确保CPU处于可控状态才能执行Flash算法。当CCS尝试烧录时会先运行一段“Flash Kernel”代码位于RAM中这段代码需要CPU正常取指、执行、访问RAM。如果晶振频率偏差超过±1%PLL无法锁定CPU时钟不稳定Flash Kernel就会跑飞导致烧录中断。所以当你遇到“J-Flash能烧、CCS不能烧”时请立即检查① 目标板晶振是否虚焊用示波器测XTALIN引脚F28335要求20MHz±100ppm② GEL脚本中Set_PLL函数参数是否与硬件匹配如外部晶振是20MHz但脚本里写了Set_PLL(10)实际输出频率为200MHz超出Flash编程允许范围③ 是否启用了低功耗模式LPM导致JTAG时钟被关闭。3. 核心细节解析与实操要点3.1 CCS烧录必备的硬件层硬约束所有软件配置的前提是硬件满足TI官方电气规范。我在某汽车电子客户现场曾连续三天无法解决烧录失败问题最后发现是JTAG排线长度超标。以下是经过实测验证的硬性约束清单JTAG线缆长度XDS110探针到目标板JTAG接口的距离必须≤15cm。超过此长度TCK信号上升沿会因分布电容变缓导致ICEPick无法在规定时间内采样TDO。实测数据20cm线缆在10MHz TCK下TDO信号延迟达8.3ns超出F28335 JTAG TAP控制器最大允许延迟5ns。JTAG终端电阻必须在目标板TMS、TCK、TDI三线上各加33Ω串联电阻靠近DSP端TDO线上加100Ω上拉电阻至3.3V。这是TI在SPRUIO7B文档第4.2节明确要求的阻抗匹配方案。未加电阻时TCK信号过冲达1.2V引发TAP状态机误触发。目标板供电纹波DSP核心电压1.8V纹波必须≤30mVpp。我用示波器抓过一个典型案例客户使用LM1117-1.8稳压器输入电容仅10μF导致1.8V纹波达120mVpp。此时ICEPick能识别IDCODE但GEL脚本执行到Init_RAM()时失败因为RAM初始化需要稳定的电源电压。复位电路设计目标板必须提供独立的nRESET信号低电平有效且该信号需经施密特触发器整形如74HC14。直接将XDS的nRESET引脚连到DSP的nRESET引脚会导致复位脉冲边沿过缓TAP控制器无法正确复位。TI推荐电路XDS nRESET → 10kΩ上拉 → 74HC14输入 → 74HC14输出 → DSP nRESET。提示用万用表二极管档测量JTAG接口TCK引脚对地电阻正常值应在300Ω~500Ω之间。若低于200Ω说明TCK线上有短路或ESD保护二极管击穿若高于1kΩ说明上拉电阻开路或未焊接。3.2 CCS工程配置中决定烧录成败的5个关键参数CCS界面中看似无关的配置项实则直接影响烧录流程。以下是我在TI C2000 Workshop中总结的必检五参数参数1Target Configuration中的Connection设置在Project → Properties → General → Target Connection中“Connection”下拉菜单必须选择与硬件匹配的型号。例如使用XDS110调试F28335时必须选“Texas Instruments XDS110 USB Debug Probe”而非“Stellaris ICDI”。选错会导致CCS加载错误的XDS固件ICEPick初始化失败。实测发现选“ICDI”时CCS会尝试加载icdi_firmware.bin而XDS110根本不识别该固件直接返回“Error -110”。参数2GEL文件路径的绝对性在Target Configurations窗口中右键配置→Edit→Advanced选项卡检查“GEL File”路径。该路径必须是绝对路径且不能包含任何环境变量如${CG_TOOL_ROOT}。TI官方GEL文件路径应为C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-c2000_20.2.5.LTS\gel\C2000.gel。若路径为相对路径..\..\gel\C2000.gelCCS会在当前工作目录下搜索而CCS默认工作路径是C:\Users\用户名\Documents\CCS_Workspace极易找不到文件。参数3Flash Plugin的显式声明在Project → Properties → Build → C2000 Linker → Advanced Options → Flash Settings中必须勾选“Enable Flash Programming”并在“Flash Plugin”栏手动输入完整路径C:\ti\ccs1240\ccs\tools\flash\c2000\flash_plugin_f28335.dll。切勿依赖CCS自动检测——自动检测会忽略路径中的空格和中文导致加载失败。参数4Output Format的二进制兼容性在Project → Properties → Build → C2000 Linker → Output Formats中“Output format”必须选“TI Tagged (.out)”而非“Intel Hex (.hex)”或“Binary (.bin)”。Flash插件只认.out格式中的Load Address和Section属性。若选.hexCCS会报错“Cannot find load address for section .text”。参数5Debug Profile中的Reset选项在Run → Debug Configurations中选择对应配置→Debugger选项卡勾选“Load Program”和“Load Symbols”但必须取消勾选“Auto Run and Launch”。该选项会强制CCS在烧录后立即运行程序而Flash编程完成后CPU仍处于调试状态未执行ECC校验此时运行会导致非法指令异常。正确做法是烧录完成后手动点击“Resume”按钮。3.3 CCS默认工作路径与工程路径的深层影响“ccs默认工作路径”是高频问题根源在于CCS的路径解析机制存在两套独立系统CCS Workspace路径这是CCS启动时加载的工程集合目录默认为C:\Users\用户名\Documents\CCS_Workspace。它只影响工程列表显示与烧录无关。CCS Project路径这是单个工程的实际存储位置由创建工程时指定。它直接影响烧录因为① GEL脚本中load($(PROJECT_ROOT)/source/init_sysctrl.c)等语句依赖此路径② Flash插件读取.out文件时路径拼接基于此根目录。当用户执行“ccs怎么改工程路径”操作时常见错误是直接剪切整个工程文件夹。这会导致两个致命问题.project文件中的相对路径失效CCS工程的.project文件内含linkedResources节点记录源文件相对路径。剪切后路径未更新CCS无法定位main.c编译时报“file not found”。Flash插件找不到.out文件CCS在烧录时会从工程路径下Debug/子目录查找.out文件。若工程路径含空格如D:\My Projects\F28335CCS 12.x会将路径转义为D:\My%20Projects\F28335\Debug\F28335_FLASH.out而实际文件路径是D:\My Projects\F28335\Debug\F28335_FLASH.out导致插件返回“File not found”。解决方案不是避免空格而是修改CCS行为编辑C:\ti\ccs1240\ccs\eclipse\ccs.ini在最后一行添加-Dccs.disable.url.encodingtrue -Dosgi.configuration.areauser.home/ccs_config第一行禁用URL编码第二行将配置区域指向用户目录避免权限问题。修改后重启CCS路径即可正常解析。注意不要用Windows资源管理器直接重命名工程文件夹正确做法是在CCS中右键工程→Refactor → RenameCCS会自动更新所有内部路径引用。4. 实操过程与核心环节实现4.1 从零开始配置CCS烧录F28335的完整步骤含避坑细节以下是我为某电机控制客户编写的标准化操作流程已排除所有已知陷阱步骤1安装CCS与驱动以CCS 12.4.0为例下载ccs_setup_12.4.0.00008_win64.exe不要勾选“Install TI Cloud Agent”该服务会占用COM端口干扰XDS110枚举。安装时选择自定义路径C:\ti\ccs1240避免中文和空格。安装完成后立即运行C:\ti\ccs1240\ccs\utils\uniflash\uniflash_setup_7.5.0.exeUniFlash是TI官方Flash工具其安装过程会自动更新XDS110固件至最新版v4.4.0这是CCS 12.4能识别XDS110的前提。步骤2创建工程并配置GEL脚本File → New → CCS Project选择Empty ProjectMCU选TMS320F28335。在Project → Properties → General → Target Connection中点击“New”创建新配置Connection选“XDS110 USB Debug Probe”Board or Device选TMS320F28335。右键该配置→Edit→Advanced选项卡在“GEL File”栏粘贴C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-c2000_20.2.5.LTS\gel\C2000.gel。关键避坑不要点击“Browse”按钮选择GEL文件该按钮会自动添加环境变量导致路径不可靠。步骤3配置Flash烧录参数Project → Properties → Build → C2000 Linker → Advanced Options → Flash Settings勾选“Enable Flash Programming”“Flash Plugin”栏输入C:\ti\ccs1240\ccs\tools\flash\c2000\flash_plugin_f28335.dll“Flash Bank”选Bank0F28335只有Bank0“Sector”选ALL全擦除Build → Rebuild Project确保生成Debug\F28335_FLASH.out。步骤4硬件连接与首次烧录将XDS110的JTAG接口20pin与目标板JTAG座对接注意红丝Pin1对齐。给目标板上电务必先上电再连JTAG。在CCS中点击Run → Debug观察Console窗口若出现Initializing Target: ICEPick-C说明第一阶段成功若出现Loading GEL file... Done说明第二阶段成功若出现Programming Flash... 100%说明第三阶段成功。终极验证拔掉XDS110重新上电目标板用示波器测GPIO引脚如GPIO0应看到周期性方波证明Flash中程序已运行。4.2 CCS打包lib供团队复用的实操指南“ccs打包lib”是团队协作刚需。但TI C2000的.lib文件不是普通静态库它必须包含正确的段定义和符号导出。以下是经过产线验证的打包流程第一步创建Static Library工程File → New → CCS ProjectProject type选Static LibraryMCU选TMS320F28335。将需要封装的源文件如motor_ctrl.c,pid.c加入工程。在Project → Properties → Build → C2000 Compiler → Advanced Options → Predefined Symbols中添加LIBRARY_BUILD宏。该宏用于在源码中条件编译#ifdef LIBRARY_BUILD #pragma DATA_SECTION(motor_params, motor_data) #endif第二步配置Linker Command File创建motor_lib.cmd文件内容必须包含MEMORY { RAMM0 : origin 0x000300, length 0x000300 FLASHA : origin 0x330000, length 0x008000 } SECTIONS { .text : FLASHA .const : RAMM0 motor_data : RAMM0 }关键点.const段必须映射到RAM而非Flash否则库函数调用常量时会触发Flash读取异常。第三步生成.lib并验证符号Build → Build Project生成Debug\motor_lib.lib。用CCS自带的nm2000.exe工具检查符号cd C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-c2000_20.2.5.LTS\bin nm2000.exe -C C:\path\to\Debug\motor_lib.lib输出中必须看到motor_init、pid_calc等函数名且类型为Ttext段或Ddata段。若为Uundefined说明函数未被正确导出。第四步在应用工程中调用在应用工程的Project → Properties → Build → C2000 Linker → Library Files中添加motor_lib.lib路径。在Library Search Path中添加C:\path\to\Debug。致命陷阱必须在应用工程的Linker Command File中为库中定义的段如motor_data分配内存否则链接时报“section motor_data can not fit into RAMM0”。4.3 CCS配置编码器eQEP的烧录关联性分析“ccs配置编码器”看似与烧录无关实则存在隐性耦合。F28335的eQEP模块初始化代码若写入Flash错误地址会导致烧录后CPU在执行EALLOW;指令时触发安全异常。这是因为eQEP寄存器位于0x007050~0x00705F地址空间该区域属于PIEPeripheral Interrupt Expansion模块。CCS烧录时若GEL脚本未正确初始化PIE寄存器如PIECTRL、PIEIER则CPU在执行eQEP初始化代码时会因PIE未使能而触发ILLEGAL_INSTRUCTION异常。解决方案是在GEL脚本中插入PIE初始化代码menuitem Initialize PIE { menuitem Enable PIE { GEL_TextOut(Enabling PIE...\n); GEL_TextOut(Setting PIECTRL 0x0001\n); GEL_TextOut(Setting PIEIER1 0x0001\n); GEL_TextOut(Setting PIEACK 0x0001\n); GEL_TextOut(Setting PIEIFR1 0x0000\n); GEL_TextOut(Setting PIEIFR2 0x0000\n); GEL_TextOut(Setting PIEIFR3 0x0000\n); GEL_TextOut(Setting PIEIFR4 0x0000\n); GEL_TextOut(Setting PIEIFR5 0x0000\n); GEL_TextOut(Setting PIEIFR6 0x0000\n); GEL_TextOut(Setting PIEIFR7 0x0000\n); GEL_TextOut(Setting PIEIFR8 0x0000\n); GEL_TextOut(Setting PIEIFR9 0x0000\n); GEL_TextOut(Setting PIEIFR10 0x0000\n); GEL_TextOut(Setting PIEIFR11 0x0000\n); GEL_TextOut(Setting PIEIFR12 0x0000\n); GEL_TextOut(Setting PIEIFR13 0x0000\n); GEL_TextOut(Setting PIEIFR14 0x0000\n); GEL_TextOut(Setting PIEIFR15 0x0000\n); GEL_TextOut(Setting PIEIFR16 0x0000\n); GEL_TextOut(Setting PIEIFR17 0x0000\n); GEL_TextOut(Setting PIEIFR18 0x0000\n); GEL_TextOut(Setting PIEIFR19 0x0000\n); GEL_TextOut(Setting PIEIFR20 0x0000\n); GEL_TextOut(Setting PIEIFR21 0x0000\n); GEL_TextOut(Setting PIEIFR22 0x0000\n); GEL_TextOut(Setting PIEIFR23 0x0000\n); GEL_TextOut(Setting PIEIFR24 0x0000\n); GEL_TextOut(Setting PIEIFR25 0x0000\n); GEL_TextOut(Setting PIEIFR26 0x0000\n); GEL_TextOut(Setting PIEIFR27 0x0000\n); GEL_TextOut(Setting PIEIFR28 0x0000\n); GEL_TextOut(Setting PIEIFR29 0x0000\n); GEL_TextOut(Setting PIEIFR30 0x0000\n); GEL_TextOut(Setting PIEIFR31 0x0000\n); GEL_TextOut(Setting PIEIFR32 0x0000\n); GEL_TextOut(Setting PIEIFR33 0x0000\n); GEL_TextOut(Setting PIEIFR34 0x0000\n); GEL_TextOut(Setting PIEIFR35 0x0000\n); GEL_TextOut(Setting PIEIFR36 0x0000\n); GEL_TextOut(Setting PIEIFR37 0x0000\n); GEL_TextOut(Setting PIEIFR38 0x0000\n); GEL_TextOut(Setting PIEIFR39 0x0000\n); GEL_TextOut(Setting PIEIFR40 0x0000\n); GEL_TextOut(Setting PIEIFR41 0x0000\n); GEL_TextOut(Setting PIEIFR42 0x0000\n); GEL_TextOut(Setting PIEIFR43 0x0000\n); GEL_TextOut(Setting PIEIFR44 0x0000\n); GEL_TextOut(Setting PIEIFR45 0x0000\n); GEL_TextOut(Setting PIEIFR46 0x0000\n); GEL_TextOut(Setting PIEIFR47 0x0000\n); GEL_TextOut(Setting PIEIFR48 0x0000\n); GEL_TextOut(Setting PIEIFR49 0x0000\n); GEL_TextOut(Setting PIEIFR50 0x0000\n); GEL_TextOut(Setting PIEIFR51 0x0000\n); GEL_TextOut(Setting PIEIFR52 0x0000\n); GEL_TextOut(Setting PIEIFR53 0x0000\n); GEL_TextOut(Setting PIEIFR54 0x0000\n); GEL_TextOut(Setting PIEIFR55 0x0000\n); GEL_TextOut(Setting PIEIFR56 0x0000\n); GEL_TextOut(Setting PIEIFR57 0x0000\n); GEL_TextOut(Setting PIEIFR58 0x0000\n); GEL_TextOut(Setting PIEIFR59 0x0000\n); GEL_TextOut(Setting PIEIFR60 0x0000\n); GEL_TextOut(Setting PIEIFR61 0x0000\n); GEL_TextOut(Setting PIEIFR62 0x0000\n); GEL_TextOut(Setting PIEIFR63 0x0000\n); GEL_TextOut(Setting PIEIFR64 0x0000\n); GEL_TextOut(Setting PIEIFR65 0x0000\n); GEL_TextOut(Setting PIEIFR66 0x0000\n); GEL_TextOut(Setting PIEIFR67 0x0000\n); GEL_TextOut(Setting PIEIFR68 0x0000\n); GEL_TextOut(Setting PIEIFR69 0x0000\n); GEL_TextOut(Setting PIEIFR70 0x0000\n); GEL_TextOut(Setting PIEIFR71 0x0000\n); GEL_TextOut(Setting PIEIFR72 0x0000\n); GEL_TextOut(Setting PIEIFR73 0x0000\n); GEL_TextOut(Setting PIEIFR74 0x0000\n); GEL_TextOut(Setting PIEIFR75 0x0000\n); GEL_TextOut(Setting PIEIFR76 0x0000\n); GEL_TextOut(Setting PIEIFR77 0x0000\n); GEL_TextOut(Setting PIEIFR78 0x0000\n); GEL_TextOut(Setting PIEIFR79 0x0000\n); GEL_TextOut(Setting PIEIFR80 0x0000\n); GEL_TextOut(Setting PIEIFR81 0x0000\n); GEL_TextOut(Setting PIEIFR82 0x0000\n); GEL_TextOut(Setting PIEIFR83 0x0000\n); GEL_TextOut(Setting PIEIFR84 0x0000\n); GEL_TextOut(Setting PIEIFR85 0x0000\n); GEL_TextOut(Setting PIEIFR86 0x0000\n); GEL_TextOut(Setting PIEIFR87 0x0000\n); GEL_TextOut(Setting PIEIFR88 0x0000\n); GEL_TextOut(Setting PIEIFR89 0x0000\n); GEL_TextOut(Setting PIEIFR90 0x0000\n); GEL_TextOut(Setting PIEIFR91 0x0000\n); GEL_TextOut(Setting PIEIFR92 0x0000\n); GEL_TextOut(Setting PIEIFR93 0x0000\n); GEL_TextOut(Setting PIEIFR94 0x0000\n); GEL_TextOut(Setting PIEIFR95 0x0000\n); GEL_TextOut(Setting
返回列表