应用笔记描述了如何创建、构建和调试用C语言编写的、针对MAXQ®平台的应用。演示了MAXQ2000的一些特性。
介绍
MAXQ平台由一套世界级的工具支持,即IAR的MAXQ嵌入式工作台。本应用笔记描述了如何创建、构建和调试用C语言编写的面向MAXQ平台的应用。本文还将演示MAXQ2000的一些特性,MAXQ<>是MAXQ系列的首款微控制器。
本应用笔记使用MAXQ平台IAR编译器1.12B版编写。这些说明也适用于产品的更高版本。这些指令用于MAXQ2000评估板。
设置MAXQ2000评估板
在开始编写代码之前,我们先连接MAXQ2000评估板。该套件应随附 3 块板,一块带有小型 LCD 屏幕。最大的电路板(如图1所示,连接LCD子板)是实际的MAXQ2000评估板。我们将在本文档后面讨论该板的功能。拿起LCD板,连接到标有J2000的MAXQ3评估板上的接头。
图1.MAXQ2000评估板,附有LCD板。
评估套件中的剩余电路板是JTAG板。MAXQ2000加载器和调试引擎使用JTAG协议进行通信。由于几乎没有用于个人计算机的通用商用JTAG适配器,达拉斯半导体公司提供了串行到JTAG转换器板。评估套件还应包含一个小型连接器。使用该连接器连接MAXQ2000评估板和JTAG板,如图2所示。电缆将MAXQ4评估板上标有J2000的针座连接到JTAG板上标有P2的针座。请注意,连接器的红色一侧位于两块板上标记为引脚“1”和“2”的一侧。
图2.MAXQ2000评估板连接到JTAG板。
MAXQ3评估板上应放置2000个跳线。接头 JU1、JU2 和 JU1 上的引脚 2 和 3 应一起跳线。此外,请确保晶体放置在Y1处(靠近板上的微处理器)。本应用笔记中的演示程序假设晶体为13.5Mhz。JTAG板还应放置3个跳线。跳线应放置在接头 JH1、JH2 和 JH3 上。
此设置中使用的电源输出 5V ±5% DC 和 300mA,中心正极。将电源插入JTAG板上的电源插孔J2。
最后,我们需要将PC串行端口连接到JTAG板。使用普通的9针直通串行电缆将计算机上的一个串行端口连接到JTAG板上的串行端口(注意:不要连接到MAXQ2000评估板上的串行端口...有关正确连接的详细信息,请参阅图 3)。
图3.串行电缆的正确位置,连接到JTAG板。
我们现在已准备好开始使用 IAR 工具。
IAR 编译器入门:Hello World
IAR为MAXQ平台提供了一个代码大小有限的编译器的评估副本。MAXQ2000评估板随附的CD提供。此外,还可以从 http://www.iar.com 下载评估副本。按照说明进行安装,选择安装位置和选项的默认值。请注意,IAR 嵌入式工作台产品仅适用于 Windows® 平台。
通过“开始”菜单中的链接启动IAR嵌入式工作台:IAR系统IAR嵌入式工作台,用于MAXQ IAR嵌入式工作台。现在我们将为MAXQ2000评估板创建一个简单的应用。
创建新工作区。在“文件”下,选择“新建”。将出现一个对话框,为您提供“源/文本”和“工作区”之间的选择。选择工作区,然后单击确定。将出现一个文件对话框,要求您输入新工作区的名称。浏览到要保存新工作区的位置,然后输入工作区名称。对于这个项目,我们将工作空间称为“helloworld”。输入工作区名称后,单击保存。
打开工作区后,我们需要创建一个项目。在“项目”菜单下,选择“创建新项目”。将弹出另一个文件对话框。确保在下拉框“工具链”下选择了MAXQ。输入项目的名称,然后单击“创建”按钮。我们将我们的项目称为“helloproject”。
现在我们已经创建了一个项目,我们需要将其配置为与MAXQ2000评估板一起使用。在项目管理器窗口中,右键单击显示“helloproject - 调试”的行,然后单击“选项”项(图 4)。大多数默认选项都可以,但我们需要更改一些设置。
图4.右键单击项目。
在项目选项中,选择“类别”下的“云易”,然后选择“包括”选项卡。在对话框底部,选中标有“覆盖默认值”的框,然后单击下面编辑行右侧的小按钮(标记为“...”)。应出现文件选择对话框。选择文件“lnkmaxq200x.xcl”¹,然后单击打开。项目选项对话框应如图 5 所示。
图5.为MAXQ2000设置正确的链接器选项。
现在选择 C-SPY 调试器 在类别下。在标有“驱动程序”的下拉框下,选择JTAG。这告诉IAR嵌入式工作台在实际硬件上调试应用程序,而不是在软件模拟器上。还要确保选择的“设备描述文件”是“$TOOLKIT_DIR$Configmaxq200x.ddf”。图 6 显示了此对话框窗口的正确配置。
图6.用于MAXQ2000的调试器选项
最后一个需要的项目选项在项目JTAG中,这是C-SPY调试器在类别列表下的子项目。在标有“COM端口:”的编辑框中,输入PC上用于与MAXQ2000评估板通信的COM端口。通常,这将是COM1或COM2,尽管许多具有USB串行端口适配器的用户将使用COM4或更高版本。
现在我们已经正确配置了IAR工具,以便与MAXQ2000评估板配合使用。单击项目选项窗口中的确定按钮。接下来,我们需要为我们的项目创建一些源代码。首先,我们将从一个简单的HelloWorld风格的应用程序开始,它只是切换一个LED。
单击工具栏上的“新建文件”按钮(工具栏最左侧的空白页)或从“文件”菜单中选择“新建”。选择源/文本,然后单击确定按钮。将出现一个标有“无标题1”的新窗口。在新窗口中键入以下代码:
#include void main() { unsigned int counter1; unsigned int counter2; PD0 = 0xff; while (1) { for (counter1 = 0; counter1 < 0xffff; counter1++) { for (counter2 = 0; counter2 < 0x10; counter2++) { } } PO0 = PO0 ^ 0xff; } } 通过单击“保存”按钮(工具栏上的磁盘图标)或从菜单中选择“文件保存”来保存此文件。在出现的文件对话框中,键入“demo.c”作为文件名,然后单击保存。请注意,文件“demo.c”不会出现在项目窗口中。在构建项目之前,我们需要将此源文件添加到项目中。右键单击项目窗口中的“helloproject - 调试”行,然后选择“添加文件...”从菜单中。出现文件对话框时,选择文件“demo.c”,然后单击“打开”。现在源代码已添加,我们已准备好构建。
在“项目”菜单下,选择“全部重建”选项。屏幕底部的消息窗口应输出大量数据,结尾为:
Total number of errors: 0 Total number of warnings: 0 如果出现任何错误或警告,请确保正确输入代码并按照项目设置的所有说明进行操作。此时可能出现的一个常见警告是“文件的最后一行结束,没有换行符”。如果收到此错误,请转到源代码的最后一行,然后按几次 Enter 键,在最后一个右括号 ('}') 之后创建一些新行。
成功构建项目后,即可运行它。确保JTAG板和MAXQ2000板已连接并供电,如本文档第一部分所述。此外,对于第一个演示,我们需要打开一个开关,使 LED 段点亮。找到标有 SW6 的开关,然后将 8 号开关转到打开(上部)位置。若要运行项目,请选择“项目”菜单,然后选择“调试”选项。应出现一个窗口,告诉您正在下载应用程序。
项目将从在可执行代码的第一行“PD0 = 0xff;”处命中其第一个断点开始。稍后我们将探讨 IAR 嵌入式工作台中可用的调试选项。现在,只需点击工具栏中的GO按钮(三个蓝色箭头)或在“调试”菜单下选择GO。您应该看到大多数 LED 段大约每秒闪烁一次。
我们刚刚使用IAR嵌入式工作台编译、加载并运行了MAXQ2000评估板的第一个应用。接下来,我们将使我们的示例应用程序稍微复杂一些。之后,我们将讨论MAXQ2000评估板的一些特性,然后介绍IAR嵌入式工作台中的一些调试特性。
一个简单的应用:在LCD上显示计数器
现在我们已经成功切换了 LED,让我们继续讨论更复杂的事情 - 使用 LCD。MAXQ2000微控制器集成了132段LCD控制器和片内电阻分压器,用于对比度控制。它还能够直接向LCD屏幕供电。MAXQ2000评估板带有一个简单的静态LCD屏幕,该屏幕有四位数字以及一些简单的标点符号(几个冒号和句点,见图7)。首先,我们将编写一个仅在LCD上实现计数器的应用程序。稍后,我们将详细讨论控制LCD的代码,并显示一个更复杂的示例。
使用前面描述的步骤创建新的工作区和项目(请记住,您需要为此新项目重新输入所有 XLINK、C-SPY 和 JTAG 选项)。我们将此工作区称为 LCDDemo,并将项目称为 SimpleLCD。下载此示例的源代码。将文件 lcdcounter.c 放入您刚刚创建 LCDDemo 项目的同一目录中。在IAR项目窗口中,右键单击显示“SimpleLCD - 调试”的行,然后选择“添加文件...”。选择我们刚刚添加的文件 lcdcounter.c,然后单击打开。
在运行项目之前,让我们看一下代码的几个重要部分。首先,一直向下滚动到文件底部,到读取 void main() 的行。这是应用程序的主要入口点。您可以看到我们初始化 LCD(函数 initLCD),然后在 (1) 时进入无限循环。主循环调用一个函数 show,该函数在 LCD 屏幕上显示一个数字。每次通过循环时,我们将值计数递增 1,如果超过 19999,则滚动,即我们的 LCD 屏幕可以显示的最大值。
让我们继续运行应用程序。单击“调试”按钮(工具栏最右侧)或从菜单中选择“项目调试”。请注意,IAR 嵌入式工作台会在将应用加载到评估套件之前自动构建应用。我们再次看到 IAR 显示更改为调试模式,并且在 void main() 中的第一行代码处停止执行。按下GO按钮(三个蓝色箭头)并查看显示屏。它应该迅速向上计数。如果你观察的时间足够长,当它接近20000时,它会环绕。
现在是时候展示MAXQ2000评估板中更有用的功能之一——RESET按钮。评估板左下方是一个标有SW2和RESET的开关。按下按钮并观看液晶屏。它应该立即再次从 0 重新开始。此按钮连接到微控制器的复位引脚 - 如果您需要重新启动应用程序,只需按此按钮即可。
MAXQ2000评估板的特点
现在我们已经使用MAXQ2000评估板的LCD子板构建了一个应用,让我们仔细看看评估板附带的所有玩具。这里不介绍评估板的所有元件,但您可以在MAXQ2000评估板原理图和“MAXQ2000评估板入门指南”中找到更多信息,两者都在评估板随附的CD上提供。
液晶子板
我们已经看到了LCD板的运行情况。段和公共信号的产生由MAXQ微控制器上的几个寄存器控制。LCD子板已接线,因此可以轻松地将数字写入LCD屏幕上四个位置中的任何一个。由于每个 7 段 LCD 数字的映射相同,因此我们在代码中包含下表,以帮助我们编写正确的 LCD 寄存器值:
#define LCD_PATTERN_0 0x03F #define LCD_PATTERN_1 0x006 #define LCD_PATTERN_2 0x05B #define LCD_PATTERN_3 0x04F #define LCD_PATTERN_4 0x066 #define LCD_PATTERN_5 0x06D #define LCD_PATTERN_6 0x07D #define LCD_PATTERN_7 0x007 #define LCD_PATTERN_8 0x07F #define LCD_PATTERN_9 0x067 int PATTERNS[] = { LCD_PATTERN_0, LCD_PATTERN_1, LCD_PATTERN_2, LCD_PATTERN_3, LCD_PATTERN_4, LCD_PATTERN_5, LCD_PATTERN_6, LCD_PATTERN_7, LCD_PATTERN_8, LCD_PATTERN_9 }; int getLCDDigit(int digit) { return PATTERNS[digit]; } 使用 getLCDDigit 函数,我们可以使用以下代码将值写入控制器屏幕: 该 LCD 板还可以显示周期和冒号,使其成为时钟、温度读数和任何其他简单数字显示的理想选择。图7显示了LCD子板上段的完整图,以及用于启用每个段的LCD寄存器位。/* write the value 612 to the LCD screen */ LCD2 = getLCDDigit(6); LCD1 = getLCDDigit(1); LCD0 = getLCDDigit(2);
图7.将LCD段映射到MAXQ2000寄存器位。
按钮
MAXQ2000评估板上有三个按钮,两个可以连接到外部中断,一个可以连接到微控制器上的复位信号。重置按钮可用于重新启动应用程序的执行,如前面使用 LCD 计数器演示的那样。
如果由开关启用,其他两个按钮可以连接到外部中断。每个按钮都有一对可以连接的外部中断。按钮 1(在评估板上标有 SW4)可连接到端口 5 引脚 2(外部中断 #10)或端口 5 引脚 3(外部中断 #11)。按钮 2(在评估板上标有 SW5)可连接到端口 7 引脚 0(外部中断 #14)或端口 7 引脚 1(外部中断 #15)。下表描述了可用于将按钮连接到外部中断引脚的开关。
开关(设置为开) | 连接按钮 | 到端口引脚... | 外部中断# |
SW6,开关 2 | 按钮 1 (SW4) | 端口 5 引脚 2 | 10 |
SW6,开关 3 | 按钮 1 (SW4) | 端口 5 引脚 3 | 11 |
SW6,开关 4 | 按钮 2 (SW5) | 端口 7 引脚 0 | 14 |
SW6,开关 5 | 按钮 2 (SW5) | 端口 7 引脚 1 | 15 |
请注意,这些引脚具有替代功能,这就是为什么我们可以选择可以连接到按钮的外部中断的原因。例如,端口 7 引脚 0 和 1 用于 UART 0 的串行端口发送和接收线路。如果将按钮绑定到其中一个按钮上,您将很难使用 UART 0 功能。请记住,MAXQ2000上有两个UART,因此在决定如何配置MAXQ2000评估板时,有一些选择。
串行连接器
MAXQ2000评估板包含一个9引脚串行连接器和一个RS-232电平转换器。这意味着您可以使用普通的直通串行电缆,将其从评估套件连接到PC。这与用于连接到较小的串行转JTAG板的串行电缆相同。
为了通过此串行端口读取传入数据,SW3上的1号交换机必须处于ON位置。请注意,如果使用引脚 P7.1 生成外部中断(如果 SW6.5 为 ON),这可能会产生冲突。要通过此串行端口写入数据,SW7 上的第 1 号交换机必须处于 ON 位置。同样,如果使用 P7.0 生成外部中断(如果 SW6.4 为 ON),这可能会产生冲突。
发光二极管面板
我们已经在简单的HelloWorld风格的应用程序中使用了我们的LED面板。让我们仔细看看我们在该面板上看到的确切内容。图 8 显示了 LED 面板及其输出引脚关联的各个灯。
图8.将LED映射到MAXQ2000寄存器位。
为了将值写入 I/O 端口,我们首先需要设置要输出的端口 0 引脚的方向。每个引脚都有一个独立的输入/输出方向控制。在我们的第一个应用程序中,我们使用以下代码行来设置要输出的所有端口 0 引脚:
PD0 = 0xff; 当相应的I/O端口设置为输出时,当PO0寄存器中的相应位设置为1时,该引脚的LED将亮起。请注意,开关组 SW8 上的第 6 号开关必须处于 ON 位置才能为 LED 阵列供电。
MAX1407
MAXQ2000评估板带有MAX1407,具有4通道16位模数转换器和两个10位数模转换器。MAXQ2000通过片内SPI™主机与其通信。这使得MAX1407成为MAXQ2000与实际信号接口的完美伴侣器件。在线应用²示例使用热敏电阻和MAXQ2000评估板显示当前温度。查看此示例应用程序中的源代码,了解有关运行该应用程序所需执行的硬件连接和配置的信息。
使用 IAR 编译器调试应用程序
现在让我们进入一个新的应用程序,它将向我们介绍IAR调试工具。像我们之前所做的那样创建一个新的工作区和项目。我们将我们的工作空间称为“lcdtime”,将我们的项目称为“rtc_demo”。现在,从本应用笔记³的源下载中添加源文件lcd_rtc.c。构建此应用,点击DEBUG按钮将其加载到MAXQ2000评估板上。
此应用程序实际上是我们之前编写的LCD计数器应用程序的扩展。当您开始运行它时,它看起来是一样的 - 在LCD屏幕上显示快速递增的计数。但是,按下SW4按钮,应用程序将显示实时时钟的当前值。乍一看,这似乎不太有用,因为时间几乎肯定是不正确的。按几次SW5按钮,您将看到分钟增量。如果您还需要增加小时数,您可能很快就会厌倦按下此按钮。在这种情况下,您可以按住 SW5 按钮并按 SW4 按钮以增加小时数。如果再次自行按下 SW4 按钮,您将切换回计数器显示。
继续并通过点击GO按钮(三个蓝色箭头)运行此应用程序。稍微尝试一下,以了解应用程序的功能。一旦您掌握了该应用程序,我们将使用它来介绍IAR的一些调试工具。
使用 IAR 进行调试:暂停应用程序
在应用程序运行时,用工具栏左侧的红手按下按钮。您也可以转到“调试”菜单并选择“中断”。这将导致处理器停止,IAR 将在应用程序中显示您的当前位置。
应用程序暂停后,您有多种选择。如果将鼠标悬停在调试工具栏上的其他一些按钮(带有蓝色箭头的其他按钮)上,您将看到弹出一个提示窗口,并告诉您按钮的功能。一些更有用的按钮是:
单步跳过:单步执行下一条指令。如果下一条指令是函数调用,则按此按钮不会将您带入函数进行调试。
步入:步入下一条指令。如果下一条指令是函数调用,则按此按钮将带您进入被调用的函数。
运行到光标:运行应用程序,直到执行到达光标在代码中的当前位置。这可能比使用断点功能运行到代码中的特定点更方便一些。
Go:允许应用程序正常执行。可以通过按暂停按钮或到达断点来停止应用程序。
使用 IAR 进行调试:断点
断点允许我们在应用程序到达特定位置时停止应用程序。让我们用一个例子来说明这一点。如果应用程序仍在运行,请将其停止。在代码中找到函数 pushButtonInterrupt,并找到以下行:
IF (EIF1 & 0x04) 右键单击此行,然后从弹出菜单中选择选项切换断点(而不是选项“切换书签”!红色的“X”应出现在此行左侧的边距中。现在再次点击调试按钮并通过按 GO 按钮运行应用程序。您应该看到液晶屏计数器正在执行。
按 SW5 按钮。您会注意到计数器应用程序似乎冻结了。如果您回顾一下 IAR 嵌入式工作台,您会发现应用程序已停止,并且我们向其添加断点的行已突出显示,如图 9 所示。
图9.在 IAR 嵌入式工作台中遇到断点。
断点是调试应用程序时非常有用的工具。开发人员通常想知道代码路径是否已被遵循或丢失。例如,如果我们的按钮中断例程不起作用,我们可能不得不考虑两种选择:1)按钮中断例程代码编码不正确,因此我们看不到预期的内容,以及2)按钮中断代码根本没有执行。使用断点,我们可以确定数字 2 是否是这种情况,这将有助于我们确定将调试工作集中在何处。
使用 IAR 进行调试:局部变量
在应用程序仍处于断点处的情况下,打开 LOCALS 窗口(如果尚未打开)。您可以通过选择“查看”菜单下的“局部变量”选项来打开此窗口。如果您仍然暂停在我们之前设置断点的行上,则局部变量窗口应如下所示:
图 10.IAR 嵌入式工作台中的局部变量窗口。
请注意两个条目 temp 和 time。temp 变量用于显示 PI7 寄存器的值。请注意,另一个入场时间显示<不可用>。这意味着该变量当前不在作用域中 - 它要么没有值,要么函数不会再次使用其值。
“LOCALS”窗口显示在应用程序已暂停的函数中声明和使用的变量。这是一个强大的工具,用于告诉我们应用程序的当前状态 - 我们可以检查变量中的意外值,或者根据变量的值确定应用程序下一步将转到何处。
但这并不是 LOCALS 窗口所能做的全部 - 您可以在程序执行期间更改变量的值。单击 temp 的值(可能是 1),然后输入一个新的整数值。您刚刚更改了正在执行的应用程序的状态。这允许开发人员查看他们的应用程序如何对不同的输入做出反应,而无需重新构建和重新加载应用程序。
使用 IAR 进行调试:监视窗口
在应用程序仍处于暂停状态的情况下,打开“监视”窗口(“查看监视”)。在表达式下,输入 pbcount。值 1 应出现在 WATCH 窗口中(除非您按下了更多按钮并让应用程序再次运行)。监视窗口允许我们输入所需的任何表达式,并向我们显示该表达式的计算值。在本例中,我们输入了一个全局变量的名称,该变量告诉我们输入了多少次按钮中断代码。监视窗口比这更强大一些,但是在监视窗口中再次单击pbcount,然后键入pbcount ^0x05。IAR 嵌入式工作台将评估此表达式(以 5 表示 pbcount 值的独占 OR),并显示结果 (4)。
图 11.IAR 嵌入式工作台中表达式的监视窗口。
使用 IAR 进行调试:调用堆栈
打开调用堆栈(查看调用堆栈)。调用堆栈显示已调用的函数,以到达代码当前正在执行的位置。现在,由于我们正在处理中断,因此仅显示 pushButtonInterrupt() (以及一些调试信息)。让我们稍微逐步浏览一下应用程序,看看这个窗口的运行情况。我们将向下转到标记为中断 15 的代码段下的 showTime() 行。您可以多次按单步跳过,也可以右键单击该行并选择运行到光标。您现在应该突出显示 showTime() 行。按下 STEP INTO 按钮,我们应该看到 showTime() 函数中的第一行代码突出显示。再次查看调用堆栈 - 现在 showTime() 函数是列出的第一行,后跟 pushButtonInterrupt()。由于它是一个堆栈,因此首先列出我们当前所在的函数,然后是调用我们的函数,然后是调用该函数的函数,依此类推。
图 12.IAR 嵌入式工作台中的调用堆栈。
使用 IAR 进行调试:内存窗口
IAR 嵌入式工作台还允许我们查看运行应用程序的设备的内存。选择查看内存以查看内存窗口。第一次打开此窗口时,它可能显示代码段的内存内容。单击下拉框,您可以看到我们可以查看的内存类型的选项。选择“数据”选项,查看MAXQ2000片内RAM的内容。
图 13.内存内容显示在 IAR 嵌入式工作台中。
就像 LOCALS 窗口一样,我们可以直接在此处更改 RAM 的值。突出显示其中一个条目,然后键入要查看的新十六进制值。与 LOCALS 窗口一样,对于开发人员来说,这是一个有用的工具,无需重新生成和重新加载应用程序即可更改其应用程序的状态。
使用 IAR 进行调试:寄存器窗口
与内存窗口类似的是寄存器窗口(查看寄存器)。该窗口显示MAXQ2000的寄存器映射。首先出现的寄存器是MAXQ平台的核心寄存器,如累加器、数据指针和环路计数器。单击下拉框,您可以看到其他几个选项。例如,选择端口 I/O 寄存器。现在可以查看和编辑与MAXQ2000上输入/输出端口相关的所有寄存器。
图 14.寄存器内容显示在 IAR 嵌入式工作台中。
故障 排除
与开始使用任何新设备一样,人们在第一次尝试通信时通常会遇到一些问题。通过验证是否遵循了本文档第一部分中的所有说明(例如电路板连接和项目配置),可以解决许多问题。以下是一些更常见的问题和解决方案:
问题 | 可能的解决方案 |
当我点击调试时,IAR根本没有抱怨,但我的MAXQ2000硬件什么也没做。 | 确保在C-SPY调试器项目选项下选择了JTAG驱动程序。 |
我收到一个错误,抱怨一个损坏的 *.d66 文件。 |
确保在 XLINK 包含选项下,您已选择使用 lnkmaxq200x.xcl 文件覆盖默认的 XCL 文件。 |
我已经正确配置了所有内容,但是当我按下调试按钮时无法加载应用程序。 | 确保没有其他软件正在使用您选择的COM端口。通常,PDA软件将从您启动计算机时开始拥有串行端口。您可以选择其他COM端口,也可以关闭PDA软件。 |
IAR 尝试开始加载应用程序,但它永远不会通过。我所有的电缆和配置都是正确的。 | 尝试重新启动 IAR 嵌入式工作台。 |
对于将应用程序加载到MAXQ2000上的这些和其它问题,打开屏幕底部消息窗口中的“工具输出”选项卡可能很有用。此处列出的消息可能会为您提供有关加载失败原因的线索。
结论
MAXQ2000是达拉斯半导体公司首款从MAXQ平台推出的器件,是一款功能强大的低成本、低功耗微控制器,为消费类应用提供了大量的外设支持。在IAR嵌入式工作台的支持下,复杂的应用程序可以用C语言编写,并在强大的工具的帮助下进行调试,从而产生快速的上市时间和高质量的产品。
审核编辑:郭婷
-
微控制器
+关注
关注
48文章
7417浏览量
150753 -
半导体
+关注
关注
334文章
26766浏览量
213602 -
嵌入式
+关注
关注
5056文章
18950浏览量
301493
发布评论请先 登录
相关推荐
评论