版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章单片机软件开发基础
主要内容KeilμVision软件的下载和安装软件功能介绍软件的下载软件的安装导入STC单片机元件库软件的启动KeilμVision设计流程和应用开发软件设计流程应用程序开发KeilμVision软件的下载和安装
--软件功能介绍μVision5提供了功能强大的编辑器,并且提供了管理工程的能力。μVision5集成了用于开发嵌入式应用的所有工具,包括:C/C++编译器宏汇编器链接器/定位器HEX文件生成器KeilμVision软件的下载和安装
--软件功能介绍通过该集成开发环境提供的下面功能,可以帮助程序员加速开发的过程全功能的源代码编辑器用于配置开发工具的元件库用于创建和维护工程的工程管理器提供用于对嵌入式设计文件进行处理的汇编器、编译器和链接器提供用于所有开发环境设置的对话框界面真正集成了带有高速CPU和外设仿真器的源码级和汇编器级调试器工具KeilμVision软件的下载和安装
--软件功能介绍提供用于对目标硬件进行软件调试的高级GDI接口,以及KeilULINK调试适配器提供了Flash编程工具,用于将应用程序下载到Flash存储器提供了下面的链接:手册、在线帮助、器件手册和用户指南KeilμVision软件的下载和安装
--软件功能介绍KeilμVision5集成开发环境和调试器是整个Keil开发工具链的中心,它们提供了大量的特性以帮助程序开发人员快速完成嵌入式应用的开发μVision5提供了建立模式(BuildMode),用于创建应用程序以及调试模式(DebugMode),用于调试应用程序通过μVision5集成的仿真器或者实际的硬件系统,设计者对应用程序进行调试比如:通过STC提供的下载工具STC-ISP和USB下载电缆,设计者可以在实际系统上通过Keil集成开发环境对应用程序进行在线调试。KeilμVision软件的下载和安装
--软件的下载步骤1:在Windows10操作系统桌面上,找到并双击名字为MicrosoftEdge的图标,打开浏览器页面步骤2:在MicrosoftEdge的地址栏中,输入Keil官网地址KeilμVision软件的下载和安装
--软件的下载步骤3:按图单击左侧一列中的ProductDownloads按钮KeilμVision软件的下载和安装
--软件的下载步骤4:按单击下图中的C251按钮,下载KeilμVision的C251版本软件KeilμVision软件的下载和安装
--软件的下载步骤5:填写信息(黑色标题右侧文本框为必填信息)注:邮箱地址必须为真实信息步骤6:单击Submit按钮KeilμVision软件的下载和安装
--软件的下载步骤7:在下图中单击鼠标右键,出现浮动菜单。在浮动菜单内选择”将链接另存为“KeilμVision软件的下载和安装
--软件的下载步骤8:选择路径,默认文件名,单击“保存”按钮。
(1)
(2)
(3)
第三章单片机软件开发基础
KeilμVision软件的下载和安装
--软件的安装步骤1:在下载路径中,找到并用鼠标双击名字为c251v560的文件名字KeilμVision软件的下载和安装
--软件的安装步骤2:弹出用户账户控制对话框界面,鼠标左键单击“是”按钮。KeilμVision软件的下载和安装
--软件的安装步骤3:出现新的页面,鼠标左键单击Next按钮。KeilμVision软件的下载和安装
--软件的安装步骤3:出现新的页面,勾选复选框,并单击Next按钮。
(1)
(2)KeilμVision软件的下载和安装
--软件的安装步骤4:出现新的页面,选择安装路径,并单击Next按钮。
默认路径(1)
(2)如果想更改安装路径,单击Browse…按钮,选择新的安装路径,否则跳过该步骤
(3)KeilμVision软件的下载和安装
--软件的安装步骤5:出现新的页面,填写信息,并单击Next按钮。(1)(2)(3)(4)(5)KeilμVision软件的下载和安装
--软件的安装步骤6:出现新的页面,通过进度条显示安装软件的进度。KeilμVision软件的下载和安装
--软件的安装步骤7:出现新的页面,提示安装结束,单击Finish按钮,结束安装过程
KeilμVision软件的下载和安装
--软件的安装当安装完KeilμVision5后,在默认安装路径c:\keil_v5路径下,给出了该集成开发环境的文件夹结构文件夹内容c:\Keil_v5\UV4通用的μVision文件c:\Keil_v5\C251\ASM用于宏汇编器的汇编器源文件模板和包含文件c:\Keil_v5\C251\BINC251工具链的可执行文件c:\Keil_v5\C251\Examples示例程序c:\Keil_v5\C251\HLP用于C251工具链的在线文档c:\Keil_v5\C251\INC用于C编译器的Include文件c:\Keil_v5\C251\LIB运行库和CPU启动文件c:\Keil_v5\C251\Mon251用于Monitor-251的配置文件KeilμVision软件的下载和安装
--软件的授权步骤1:鼠标右键单击桌面上的KeiluVision图标,出现浮动菜单。在浮动菜单内,选择“以管理员身份运行“
KeilμVision软件的下载和安装
--软件的授权步骤2:弹出用户账户控制界面,鼠标左键单击“是”按钮。
KeilμVision软件的下载和安装
--软件的授权步骤3:自动启动KeiluVision软件,并打开主界面KeilμVision软件的下载和安装
--软件的授权步骤4:主菜单中,选择File→LicenseManagement。
KeilμVision软件的下载和安装
--软件的授权步骤5:复制CID,使用专用软件生成LIC,将其复制粘贴到LIC右侧的文本框,单击AddLIC
(1)
(2)
(3)
授权成功后显示的信息KeilμVision软件的下载和安装
--导入STC单片机元件库步骤1:在MicrosoftEdge的地址栏中,输入下面的网址
KeilμVision软件的下载和安装
--导入STC单片机元件库步骤2:主菜单选择“软件工具”→“工具软件”
KeilμVision软件的下载和安装
--导入STC单片机元件库步骤3:单击STC-ISPV6.92完整版中的“软件下载”按钮。
KeilμVision软件的下载和安装
--导入STC单片机元件库步骤4:在文本中输入右侧给出的数字串,单击“确定”按钮(1)(2)KeilμVision软件的下载和安装
--导入STC单片机元件库步骤5:提示阻止下载软件的信息。鼠标左键单击该按钮弹出浮动菜单,在浮动菜单内选择“保留”KeilμVision软件的下载和安装
--导入STC单片机元件库步骤6:弹出对话框界面,单击“仍然保留”按钮。KeilμVision软件的下载和安装
--导入STC单片机元件库步骤7:弹出“下载”对话框“界面。单击下面按钮,进入保存下载文件的目录。KeilμVision软件的下载和安装
--导入STC单片机元件库步骤8:鼠标单击“全部解压缩”按钮。KeilμVision软件的下载和安装
--导入STC单片机元件库步骤9:使用默认路径,单击“提取”按钮。KeilμVision软件的下载和安装
--导入STC单片机元件库步骤10:双击名字为stc-isp-v6.92的文件名KeilμVision软件的下载和安装
--导入STC单片机元件库步骤11:弹出对话框界面,鼠标左键单击“更多信息”按钮,右下方出现“仍要运行”按钮,单击该按钮。KeilμVision软件的下载和安装
--导入STC单片机元件库步骤12:弹出“用户账户控制”对话框界面,单击“是”按钮。KeilμVision软件的下载和安装
--导入STC单片机元件库步骤13:STC主界面右侧窗口中,单击“Keil仿真设置”标签。KeilμVision软件的下载和安装
--导入STC单片机元件库步骤14:在Keil仿真设置中,单击下面的按钮。KeilμVision软件的下载和安装
--导入STC单片机元件库步骤15:弹出“浏览文件夹”对话框界面。在该界面中,定位到Keil的安装路径,然后单击“确定”按钮。(1)(2)KeilμVision软件的下载和安装
--导入STC单片机元件库步骤16:弹出STC-ISP对话框界面,提示“STCMCU型号添加成功!”的信息,单击“确定”按钮。
第三章单片机软件开发基础
KeilμVision设计流程和应用开发本节将介绍KeilμVision的软件设计流程以及编写和处理软件代码的具体实现过程通过KeilμVision集成开发环境开发STC32G系列单片机软件程序的流程如下图所示KeilμVision设计流程和应用开发
---KeilμVision软件设计流程KeilμVision设计流程和应用开发
---KeilμVision软件设计流程从STC32G系列单片机应用的角度而言,程序开发的任务包含两个方面:编写STC32G系列单片机内所有硬件模块的驱动代码,并提供应用程序接口函数API。基于API编写应用程序,使得单片机系统能满足应用要求。KeilμVision设计流程和应用开发
---KeilμVision软件设计流程传统上,8051单片机的程序开发都是直接面向于底层硬件,即编写硬件驱动,然后基于硬件驱动编写,也就是我们通常所说的“裸奔”这种开发程序的方法最大的局限性在于程序的可移植性较差、维护成本高由于这种开发方式没有使用操作系统进行支持,因此很难实现多任务的协同分时处理KeilμVision设计流程和应用开发
---KeilμVision软件设计流程随着单片机应用程序开发的要求不断提高,程序设计思想也发生了明显的变化,主要体现在:使用API函数封装底层具体的硬件,而应用程序开发者只需要调用这些API函数即可,这样就显著降低了应用程序对底层的依赖性,使得应用程序具有更好的可移植性在单片机程序开发中,引入操作系统的支持,这样可以支持多任务的分时协同同步处理,显著提高了复杂应用程序的可靠性KeilμVision软件设计流程
--明确软件需求对于编写软件代码的程序员而言,在开始编写软件代码前,需要明确并完成下面的要求:了解所提供硬件的性能了解软件开发环境KeilµVision5(C251版本)所能实现的功能明确软件代码所要实现的功能绘制用于表示软件代码实现过程的数据流图和程序流图进一步明确程序的概要设计和详细设计方案KeilμVision软件设计流程
--创建设计工程在使用KeilμVision5集成开发环境创建设计工程时,需要完成下面的任务:指定工程所在的路径和文件夹命名工程名字从单片机元器件库中,找到STC32G系列单片机元器件库,并添加软件开发所使用的一款STC32G单片机型号编写汇编语言/C语言软件代码
--汇编语言汇编语言操作代码(助记符)很容易让程序开发人员记住(MOV用于移动指令、ADD用于相加等)此外,还可以用符号表示指令操作数字段中引用的地址和值。因为分配了这些名字,所以可以使它们像指令的助记符一样有意义。编写汇编语言/C语言软件代码
--汇编语言汇编程序由三部分组成,包括:机器指令。编写机器可以执行的代码。汇编助记符指令的格式为:<[>label:<]>mnemonic<[>operand<]><[>,operand<]><[>/,operand<]><[>;comment<]>
注:<>标记为可选项。格式中:label:标号的名字。它是指令在存储器中所在地址的符号表示mnemonic:助记符。它是用符号表示机器语言指令的ASCII文本字符串operand:操作数。它是指定得助记符所需要的参数。comment:注释。它是对指令的可选描述或解释。注释以分号字符’;’开始,注释可以包含软件开发人员所希望的任何文本。汇编器将忽略出现在汇编指令中的注释。编写汇编语言/C语言软件代码
--汇编语言汇编器命令定义程序结构和符号,并生成不可执行的代码(数据、消息等)汇编器控制设置汇编模式和直接汇编流程。如IF、ELSE、ENDIF和ELSEIF汇编器控制描述。汇编器程序控制语句提供了一组功能强大的操作符,可用于从程序集中包含或排除程序的某些部分。编写汇编语言/C语言软件代码
--C语言C编程语言是一种通用的编程语言,它提供了代码效率、结构化编程元素和丰富的运算符集C语言不是一门大型语言,也不是为一个特定的应用领域设计的它的通用性和无限制性相结合,使得C成为一种方便高效的编程解决方案,也用于各种软件任务与其他更专业的语言相比,使用C可以更容易、更高效地解决许多应用编写汇编语言/C语言软件代码
--C语言C语言本身无法执行通常需要操作系统干预的操作(如输入和输出)相反,这些功能是作为标准库的一部分提供的。因此这些函数与语言本身是分开的,所以C特别适合生成可移植到多种平台的代码KeilμVision软件设计流程
--汇编器对汇编语言的处理汇编器是一种将符号代码(汇编语言)转换为可执行目标代码的程序该目标代码可以使用兼容MCS-251ISA的单片机运行(比如STC32G系列单片机)在一些对速度、代码长度和要求对硬件进行精确控制的应用中,必须使用汇编语言编写代码Keil开发环境中的汇编器软件工具将汇编语言助记符翻译/转换为可执行的机器码,同时支持源码级符号调试,以及对宏处理的强大能力。KeilμVision软件设计流程
--汇编器对汇编语言的处理汇编器将汇编代码源文件翻译成可重定位的目标模块,以及可以选择创建带有符号表和交叉引用细节的列表文件。并且,将完整的行号、符号和类型信息写到所生成的文件中通过这些信息,可以在调试器中准确的显示程序变量,行号则用于μVision调试器和第三方调试工具的源代码级调试KeilμVision软件设计流程
--汇编器对汇编语言的处理A251汇编器在编译期间生成许多输出文件默认情况下,每个输出文件与源文件共享相同的文件名文件扩展名描述.LST具有此扩展名的文件列出了包含格式化源文件以及汇编器检测到的任何错误的文件。列表文件可以选择包含使用的符号和交叉引用.OBJ具有此扩展名的文件是包含可重定位目标代码的目标模块。通过L251链接器,将目标模块连接到绝对目标模块KeilμVision软件设计流程
--C编译器对C语言进行处理用于MS-DOS操作系统的C251优化C编译器是美国国家标准学会(AmericanNationalStandardsInstitute,ANSI)C语言标准的完整实现C251编译器不是用于251目标的通用C编译器它是一种全新的实现,致力于为兼容MCS-251ISA的单片机(如STC32G系列)生成超快和紧凑的代码。C251编译器为软件开发人员提供了C语言编程的灵活性以及汇编语言的代码效率和速度由于C251编译器是一个交叉编译器,C编程语言和标准库的某些方便被修改或增强,以解决嵌入式目标处理器的特性KeilμVision软件设计流程
--库管理器生成库文件LIB251库管理器允许软件开发人员创建和维护库文件,这些库文件可能包含一个或多个目标文件L251链接器可以使用库文件来解析外部变量和函数引用。LIB251库管理器可以通过命令行进行交互控制,也可以由μVisionIDE使用KeilμVision软件设计流程
--库管理器生成库文件
KeilμVision软件设计流程
--链接器生成绝对目标模块文件L251链接器/定位器通过将使用KeilA251汇编器和C251编译器创建的目标模块连接在一起,创建一个绝对目标模块这些工具创建的目标模块是可重定位的,不能直接执行(即使它们只包含一个源模块),必须使用链接器将它们链接并转换为绝对模块KeilμVision软件设计流程
--链接器生成绝对目标模块文件L251链接器的目的包括:链接由汇编器和编译器生成的目标模块链接保存在用LIB251生成的库文件中的目标模块为了实现这些目标,链接器组合目标模块并解析它们之间的引用。这允许软件开发人员创建分布在许多源模块、目标模块和库上的大型程序。KeilμVision软件设计流程
--链接器生成绝对目标模块文件在运行链接器时,它执行下面的行为:将可重定位的程序模块组合成单个的绝对模块自动包含库文件中的模块执行代码打包以优化公共代码序列将可重定位的部分段(同名)合并为单个段为所有可重定位和绝对段分配和操作必要的存储器使用重叠技术分析程序结构并操作数据解析外部符号和公共符号KeilμVision软件设计流程
--链接器生成绝对目标模块文件定义绝对地址并计算可重定位段的地址生成包含整个程序的绝对目标文件生成包含下面内容的列表文件,包括有关链接和定位过程的信息程序符号、外部符号和公共符号的交叉引用检测在命令行或在链接/定位过程中发现的错误KeilμVision软件设计流程
--链接器生成绝对目标模块文件生成目标文件L251链接器生成KeilOMF251目标模块格式的可执行目标程序。OMF251格式支持最多16MB的CODE和XDATA。链接器为普通(非分组)或代码分组的应用生成绝对目标文件。无论哪种情况,目标文件都是绝对的,不包含可重定位信息或外部引用。它可以加载到调试工具(如μVisionDebugger或仿真器)中,也可以通过OH251Object-Hex转换器转换为IntelHEX文件,并用于编程PROM或下载到闪存中生成的目标模块可包含有助于符号级、源代码级调试和测试的调试信息。软件开发人员可以使用链接器命令从目标文件中去掉调试信息KeilμVision软件设计流程
--链接器生成绝对目标模块文件生成列表文件链接器生成一个列表文件,该文件提供有关链接和定位过程中每个步骤的信息。该文件包含关于有关所涉及符号和段的信息,以及下面:命令行上指定的文件名和其他参数所有已处理模块的文件名和模块名存储器分配表,其中包含段的位置、段类型、位置方法和段名字。可以通过指定NOMAP指令来压缩掉该表KeilμVision软件设计流程
--链接器生成绝对目标模块文件显示已完成程序的结构并列出本地数据和函数位段的地址信息的重叠信息。重叠映射还列出了存在OVERLAYABLE段的所有代码段。软件开发人员通过指定NOMAP命令来压缩掉重叠映射程序中所有PUBLIC符号的列表。通过在命令行上指定NOPUBLICS或PRINTCONTROL指令,可以压缩掉公共符号段和符号中所有错误的列表。错误原因列在列表文件的末尾所有未解析外部符号的列表。如果另一个输入文件中不存在对应的公共符号,则无法解析外部符号。对未解析外部符号的每个引用都列在列表文件末尾的错误消息中包含输入文件中的符号信息的符号表。该信息包含模块(Module)名字、符号(Symbol)名字、公共(Public)名字和行(Line)名字。软件开发人员可以通过链接器控制有选择地抑制掉符号信息。KeilμVision软件设计流程
--链接器生成绝对目标模块文件按字母顺序排列的所有公共和外部符号的交叉引用报告,其中显示了存储器类型和包含该符号引用的模块名字。在执行链接器/定位器期间检测到的错误显示在屏幕上以及列表文件的结尾。KeilμVision软件设计流程
--目标到HEX转换器OH251目标到HEX转换器(OH251Object-HEXConverter)用于将链接器所创建的绝对目标文件转换为IntelHEX文件保存在绝对目标文件中的程序代码转换为十六进制的值,并保存在IntelHEX文件格式的文件中。然后,通过STC的STC-ISP软件工具,软件开发人员可以将IntelHEX文件下载到STC32G系列单片机中KeilμVision软件设计流程
--目标到HEX转换器KeilμVision软件设计流程
--调试器调试目标代码在KeilμVision中的OptionforTarget的标签界面提供了两种调试模式,包括仿真器模式和目标模式当勾选图中UseSimulator前面的复选框时,选择仿真器模式;当勾选Use:STCMonitor-251Driver前面的复选框时,选择目标模式。KeilμVision软件设计流程
--调试器调试目标代码仿真器模式使用仿真器,将μVisionDebugger配置为模拟一个控制器大多数功能的纯软件产品。软件开发人员可以在硬件准备就绪之前测试和调试嵌入式应用程序μVision模拟各种外设,包括串口、外部I/O和定时器μVisionDebugger模拟外设的能力因所选设备的不同而有所不同KeilμVision软件设计流程
--调试器调试目标代码目标模式在目标模式下,调试器将与真实的STC32G系列单片机硬件系统进行连接。在对STC32G系列单片机系统进行调试时,使用调试界面下已经提供的STCMonitor-251Driver驱动程序。通过STC-USBLink工具,对实际硬件目标系统进行调试KeilμVision软件设计流程
--调试器调试目标代码在μVisionDebugger中提供了下面的调试窗口和对话框,包括:断点(Breakpoint),定义程序执行的停止条件调用栈+本地(CallStack+Local)窗口,查看当前位于调用树中的对象代码覆盖率(CodeCoverage)检查有关代码执行的统计信息,包括分支测试命令(Command)窗口,输入并查看已执行的命令反汇编窗口(DisassemblyWindows),在汇编指令级上测试程序KeilμVision软件设计流程
--调试器调试目标代码事件查看器(EventViewer),检查任务切换事件的历史记录逻辑分析仪(LogicAnalyzer),在时间图上调查外设、寄存器和变量值的变化存储器映射(MemoryMap),评估存储器区域和他们的访问权限存储器窗口(MemoryWindow),分析和修改存储器内容性能分析仪(PerformanceAnalyzer),在模块或函数级上评估时间和调用统计信息
寄存器窗口(RegisterWindow),查看和修改寄存器的内容KeilμVision软件设计流程
--调试器调试目标代码串行窗口(SerialWindow),是应用和PC之间的通信接口状态栏(StatusBar),查看调试状态信息符号窗口(SymbolsWindow),查找程序中使用的调试符号信息。系统查看器(SystemViewer),在运行时查找外设寄存器信息并修改属性值。系统和线程查看器(SystemandThreadViewer),显示实时操作系统(Real-TimeOperatingSystem,RTOS)的系统和现成信息。工具箱(Toolbox),使用并定义可配置按钮以交互方式执行调试命令。
(18)监视窗口(WatchWindow),在运行时显示和修改程序变量值。KeilμVision软件设计流程
--查看生成文件的一些方法.build_log.htm文件KeilμVision(C251版本)对代码处理完成后,生成*.build_log.htm文件,该文件为生成日志文件(BuildLogfile)包含有关目标的上一次生成过程的信息(1)鼠标右键单击Target(2)浮动菜单,选择KeilμVision软件设计流程
--查看生成文件的一些方法KeilμVision软件设计流程
--查看生成文件的一些方法*.map文件在上图中的浮动菜单内,选择OpenMapFile条项,打开该文件,如下图所示。该文件是由链接器生成的列表文件(或映射文件)。KeilμVision软件设计流程
--查看生成文件的一些方法*.lnp文件由μVision生成的要传递到命令行的链接器输入文件*.(无扩展名)这个没有扩展名的文件是绝对目标文件(由链接器生成的可执行的程序)*.lst文件该文件是由C编译器或汇编器生成的列表文件
第三章单片机软件开发基础
KeilμVision应用程序开发本节通过一个简单的C语言程序,对C语言程序框架,以及开发流程进行详细说明。内容包括:建立新的设计工程添加新的C语言文件建立设计下载程序到目标系统硬件在线调试
KeilμVision应用程序开发
--建立新的设计工程启动μVision5(C251版本)集成开发环境在KeilμVision5集成开发环境(下面简称Keil)主界面主菜单下,选择Project->NewμVisionProject...。弹出CreateNewProject对话框界面。在该界面中:将路径定位到E:\stc32_example\example_3_1在文件名(N)右侧的文本框中输入demo(该设计的工程名为demo,uvproj)单击保存按钮KeilμVision应用程序开发
--建立新的设计工程出现SelectaCPUDataBaseFile对话框界面。在该界面中的下拉框中,选择STCMCUDatabase选项。单击OK按钮。出现SelectDeviceforTarget’Target1’...对话框界面。在该界面的Device标签页面下,通过下拉框选择STCMCUDatabase在下面的左侧窗口的器件列表中,找到并展开STC前面的“+”。以列表的形式给出了可用的STC单片机型号。在展开项中,找到并选择STC3232G12K128SeriesKeilμVision应用程序开发
--建立新的设计工程KeilμVision应用程序开发
--建立新的设计工程单击OK按钮。在KeilμVision主界面左侧的Project窗口中,给出了工程信息,如下图所示。包括工程的名字、活动的目标文件,以及组和依赖文件。其中:KeilμVision应用程序开发
--建立新的设计工程工程目标(ProjectTarget)表示配置设置的集合可以创建工程目标以使用不同的工具设置来运行相同的应用程序例如,创建一个用于测试的目标和另一个用于发布应用的目标。活动的目标显示在Project窗口中工程名字的下方KeilμVision应用程序开发
--建立新的设计工程在Keil主界面工具栏中单击
按钮,弹出ManageProjectItems对话框界面在该界面左侧的ProjectTargets窗口中,通过执
行单击New按钮和输入
新的目标名字来添加新
的目标。KeilμVision应用程序开发
--建立新的设计工程添加一个新的ProjectTargets-Target2KeilμVision应用程序开发
--建立新的设计工程在Target1和Target2之间切换KeilμVision应用程序开发
--建立新的设计工程文件组(FileGroup)将文件排列成逻辑块根据文件的功能排列文件,或创建表示软件团队的组类似的,在下图中间
的Group窗口中,通
过执行单击New按钮
和输入新的文件组名
字来添加新的文件组单击New按钮输入新的Group名字KeilμVision应用程序开发
--建立新的设计工程(1)右键单击Target
1(2)出现浮动菜单(3)选择OptionsforTarget‘Target1’…KeilμVision应用程序开发
--建立新的设计工程(1)单击Target标签(2)设置CPUMode(3)设置MemoryModel(4)设置CodeRomSizeKeilμVision应用程序开发
--建立新的设计工程通过下面的设计实例,分析MemoryModel设置对编译结果的影响voidmain(){volatileinta=1000,b=5000;volatileint*d,*e;volatileint*f;d=&a;e=&b;*f=a+b;}建立新的设计工程
--MemoryModelTiny在微型存储器模型中。默认,所有变量都驻留在MCS-251ISA兼容单片机的内部数据存储器中,就好像它们是使用数据存储器类型说明符显式声明的一样在该存储器模型中,变量和指针访问非常有效。默认,指针大小仅为2个字节,表示近(near)存储器的指针。常数保存在NCONST存储器类中。使用HOLD命令,可以将指定对象大小以上的变量定向到其他存储器区域。通常,如果将链接器/定位器配置为覆盖内部数据存储器的变量,则Tiny模型是最好的模型建立新的设计工程
--MemoryModelMemoryModel设置为Tiny时的编译结果建立新的设计工程
--MemoryModelXtinyXTiny存储器模型与Tiny相同,只是默认情况下所有变量类型都使用存储器类型near,称为EDATA存储器类。对于具有中等数据需求的应用程序,XTiny存储器模型是一个不错的选择建立新的设计工程
--MemoryModelMemoryModel设置为Xtiny时的编译结果建立新的设计工程
--MemoryModelSmall在小存储器模型中。默认,所有变量都驻留在兼容MCS-251ISA单片机的内部数据存储器中,就像它们是使用数据存储器类型说明符显式声明一样在这个存储器模型中,变量访问非常有效,可以将指定对象大小以上的变量定向到其他存储器区域。数据指针是4字节指针,允许对整个16MB地址空间进行寻址建立新的设计工程
--MemoryModelMemoryModel设置为Small时的编译结果建立新的设计工程
--MemoryModelXsmallXSmall存储器模型与Small相同,只是默认情况下所有变量都使用存储器类型near,称为EDATA存储器类通常,XSmall模型是具有巨大需求的应用程序的正确选择建立新的设计工程
--MemoryModelMemoryModel设置为Xsmall时的编译结果建立新的设计工程
--MemoryModelLarge在Large模型中,默认,所有变量都驻留在外部数据存储器中(最多64KB)这与使用XDATA存储器类型说明符显式声明它们相同KeilμVision应用程序开发
--硬件在线调试数据指针(DPTR)用于寻址外部存储器需要注意的是,通过数据指针访问存储器效率低且速度慢。特别是对于长度为两个或更多字节的变量。这种类型的数据访问机制生成的代码比XTiny模型或XSmall模型要多建立新的设计工程
--MemoryModelMemoryModel设置为Large时的编译结果DR56=DPX建立新的设计工程
--MemoryModel因此,应尝试使用XTiny或XSmall存储器模型,而不是Large。使用HOLD命令,可以将指定对象大小以上的变量定向到其他存储器区域KeilμVision应用程序开发
--添加新的C语言文件(1)右键单击SourceGroup1(2)出现浮动菜单(3)选择“AddNewItemtoGroup‘SourceGroup1’…KeilμVision应用程序开发
--添加新的C语言文件(1)选择文件类型为CFile(.c)(2)输入文件名(3)单击Add按钮KeilμVision应用程序开发
--添加新的C语言文件添加设计代码,并保存文件KeilμVision应用程序开发
--编译器优化选项设置C251编译器是一个优化编译器这意味着编译器采取某些少量步骤来确保生成并输出到目标文件的代码可能是最高效(代码长度更短和/或速度更快)的代码通过OptionsforTarget‘Target1’对话框中的C251标签,程序开发人员可以设置C编译器的优化级别从下图可知,通过十进制数指定优化级别(Level)。有效值为[0..9]。字符串指定优化重点(Emphasis),无论是代码长度还是执行速度。有效值为[SIZE|SPEED]默认,优化级别设置为7,SPEED。KeilμVision应用程序开发
--编译器优化选项设置KeilμVision应用程序开发
--编译器优化选项设置级别功能0ConstantFolding:编译器执行计算,在可能的情况下将表达式减少为数值常数。这包括运行时地址的计算。SimpleAccessOptimizing:编译器优化251系统中内部数据和位地址的访问JumpOptimizing:编译器总是将跳转扩展到最终的目标。跳转到跳转将被删除1DeadCodeElimination:删除未使用的代码片段JumpNegation:对条件跳转进行仔细检查,以确定它们是否可以通过测试逻辑的反转来简化或消除2DataOverlaying:内部识别并标记适合静态覆盖的数据和位段。L251链接器/定位器具有通过全局数据流分析来选择段的能力,然后可以覆盖这些段PeepholeOptimizing:删除冗余MOV指令。这包括从存储器中不必要地加载对象以及使用常数的加载操作。当可以节省存储器空间或执行时间时,简单操作将代替复杂操作KeilμVision应用程序开发
--编译器优化选项设置级别功能3RegisterVariable:如果可能,将自动变量和函数参数放在寄存器中。删除为这些变量保留的数据存储器4ExtendedAccessOptimizing:将来自IDATA、XDATA、PDATA和CODE区域的变量直接包含在操作中。在大多数情况下,不需要使用中间寄存器LocalandGlobalCommonSubexpressionElimination:在可能的情况下,函数中相同的子表达式只计算一次。中间结果保存在存储器中,并用于替换新的计算Case/SwitchOptimizing:涉及Switch和Case语句的代码在跳转表或跳转字符串中进行优化5LifeVariableAnalysis:删除对自动变量的冗余操作和死保存操作KeilμVision应用程序开发
--编译器优化选项设置级别功能6ConstantPropagation:跟踪表达式的值,如果可能,插入常数值而不是变量访问PeepholeOptimizing:删除冗余MOV指令。这包括从存储器中不必要地加载对象以及使用常数的加载操作。当可以节省存储器空间或执行时间时,简单操作将代替复杂操作7CommonTailMergingandInstructionSimplification:编译器逐个函数分析生成的代码,并尝试找到公共的头部和尾部。如果编译器检测到公共的代码序列,那么它将用跳转指令将一个代码序列替换为另一个等效的代码序列。例如,在switch/case语句中。在分析代码的同时,编译器还尝试使用更廉价的指令替换指令序列8CommonBlockSubroutines(LinkOptimization):检测重复指令序列并将其转换为子程序。C251编译器重新排列代码已获得更大的重复序列9RearrangeCode(LinkOptimization):当检测到公共块子程序时,重新排列代码以获得更大的重复序列KeilμVision应用程序开发
--编译器优化选项设置对于表中的优化级8和优化级9,需要勾选“LinkerCodePacking”前面的复选框该选项调用命令OBJECTADVANCED每个优化级别都包含前面较低优化级别的所有特征例如,优化级别9包含从级别0到级别8的所有优化KeilμVision应用程序开发
--编译器优化选项设置开发人员可以基于函数到函数来更改优化级别,如下所示:#pragmaOT(3)voidfunct_1(void){...}#pragmaOT(9)voidfunc_2(void){...}注:目前,在SIZE和SPEED强调之间没有区别KeilμVision应用程序开发
--编译器优化选项设置在C251编译器中提供了RegisterColoring(寄存器着色)选项。全局寄存器着色适用于整个应用当使能后,其中包含每个函数使用的寄存器表编译器使用该表优化寄存器的使用。迭代地重新编译工程,直到无法进行进一步地寄存器优化当使能全局寄存器着色时,编译器知道每个函数使用的寄存器外部函数中未更改的寄存器可用于保存寄存器变量。编译器生成的代码需要更少的数据和代码空间,执行速度更快要使能全局寄存器着色,需要勾选RegisterColoring前面的复选框KeilμVision应用程序开发
--设计编译和链接采用下面给出的其中一种方法,运行Build过程(1)主菜单中选择Project(2)浮动菜单中选择BuildTarget(1)鼠标右键单击Target1(2)出现浮动菜单(3)浮动菜单中,选择BuildTargetKeilμVision应用程序开发
--设计编译和链接在Keil主界面底部的BuildOutput窗口中给出了建立过程的信息查看生成的文件
--目标文件C251编译器以OMF251对象格式生成目标(.OBJ)文件,以响应各种C语言语句和其他命令OBJECT命令指定目标文件的名字,而NOOBJECT命令禁止输出目标文件目标文件不仅仅是为C源代码生成的汇编二进制表示,它是一个特殊格式的文件包含符号信息、目标代码、调试信息、库引用等查看生成的文件
--目标文件下面给出了保存在目标文件中的一些细节为全局变量保留的存储器公共(public)符号(变量和函数)的名字外部符号(变量和函数)的引用要链接的库文件用于帮助将源代码行与目标代码同步的调试信息查看生成的文件
--目标文件保存在目标文件中的大部分目标代码都不是“绝对的”链接器可以将其定位在任何适当的地址编译器将外部变量和函数的引用设置为地址0,链接器恢复所有引用。由于这些原因,编译器生成的目标代码不能按原样执行。必须先将其链接,然后才能执行!!!查看生成的文件
--列表文件编译器列表文件包含大量的有关编译过程的信息它由多个部分组成,下面将按照文件中出现的顺序对每个部分进行描述查看生成的文件
--列表文件在OptionsforTarget‘Target1’对话框中,通过单击Listing标签,进入列表输出参数设置界面中查看生成的文件
--列表文件通过勾选Conditional前面的复选框,程序开发人员可以在源代码行中包含所有的条件代码(#if块中的代码)当不勾选该复选框时,指令可用于从列表文件中排除未编译的条件代码块查看生成的文件
--列表文件通过勾选#includeFiles前面的复选框,程序开发人员可以在源文件列表中包含#include文件的内容当默认不勾选该复选框时,包含文件内容不会输出到列表文件中查看生成的文件
--列表文件勾选Symbols前面的复选框时,符号列表将输出包含有关编译源文件中程序符号的符号信息包括符号名字(Name)、分类(Class),包括:SFR、structure、typedef、static、public、auto和extern)、存储器空间(Space)、数据类型(Type)、偏移(Offset)和字节大小(Size)当默认不勾选该复选框时,符号的内容不会输出到列表文件中查看生成的文件
--列表文件通过勾选AssemblyCode前面的复选框,在列表文件中将输出编译器为C源代码生成的汇编代码当默认不勾选该复选框时,汇编代码的内容不会输出到列表文件中查看生成的文件
--main.lst文件定位到\stc32_example\example_3_1\Listings目录下,打开main.lst文件查看生成的文件
--main.lst文件页面标题每个列表页都包含一个标题其中包含编译器版本号、源文件名、日期、时间和页码查看生成的文件
--main.lst文件命令行用于调用编译器的整个命令行包含在列表文件中。这通常有助于诊断命令行的问题查看生成的文件
--main.lst文件源代码源代码列表输出行号以及该行上的源代码查看生成的文件
--main.lst文件汇编程序列表汇编程序列表中包含编译器为C源文件生成的汇编代码查看生成的文件
--main.lst文件符号列表查看生成的文件
--main.lst文件模块信息模块信息提供了由源文件定义的初始化和未初始化存储器区域的大小查看生成的文件
--demo.map文件页面标题每个列表页面都包含一个标题,其中包含链接器版本号、日期和页码查看生成的文件
--demo.map文件命令行用于调用链接器的整个命令行包含在映射文件中。这通常有助于诊断命令行的问题查看生成的文件
--demo.map文件MCU详细信息包括所选MCU、模式和存储器模型的详细信息。这些表示链接中包含的默认存储器模型库。如果使用浮点数学,则还包含了浮点库查看生成的文件
--demo.map文件输入模块输入模块部分包括链接中包含的所有目标模块、库文件和模块的名字。这是检查链接某些目标文件是否有问题的好地方查看生成的文件
--demo.map文件存储器类活动的存储器类部分包括程序中每个存储器类使用的基地址、起始地址、结束地址和字节数查看生成的文件
--demo.map文件存储器映射存储器映射列出了程序中每个部分的起始和结束地址、类型、重定位类型、对齐方式、组、组合类型、类和名字查看生成的文件
--demo.map文件覆盖图覆盖图(overlay-map)显示程序的结构,以及每个函数的bit、data、idata、pdata和xdata段的位置。它是程序调用树的文本表示查看生成的文件
--demo.map文件bit、data、idata、pdata和xdata变量分别是BIT_GROUP、DATA_GROUP、IDATA_GROUP、PDATA_GROUP和XDATA_GROUP的一部分整个?C_C51STARTUP段是启动引导代码。它不需要bit、data或idata变量空间查看生成的文件
--demo.map文件当发现新的程序根时,它们将显示在覆盖图中在该图中,?C_C51STARTUP?3是启动引导代码,它将要调用main主程序查看生成的文件
--demo.map文件公共符号公共符号(publicsymbol)表显示了公共符号的值、名字、类和类型查看生成的文件
--demo.map文件符号表符号表包括从输入模块得到
的符号信息。包括所有符号
的值、表示、类、类型和名
字。查看生成的文件
--demo.map文件程序大小程序大小信息在列表文件的末尾附近输出。输出各种存储器区域的大小以及常数和代码空间查看生成的文件
--demo.map文件警告和错误链接程序时如果遇到问题,则会生成错误和警告,并输出到屏幕和映射文件中查看生成的文件
--HEX文件:LLAAAARRDDDD………DDDDCCLL:
Lengthfield-长度段:数据段(D)的字节数AAAA:
Addressfield-地址段:数据段第一个字节的地址RR:
Recordtype-纪录类型,00代表数据,01代表纪录结束DD..:
Datafield-数据段CC:
CheckSumfield-校验和
KeilμVision应用程序开发
--设计下载使用STC公司专用的下载工具STC-ISP工具,将demo.hex文件下载到单片机的片内程序存储器中通过USB电缆,将STC公司官方STC32G系列单片机硬件开发平台的USB接口连接到PC/笔记本电脑的USB接口KeilμVision应用程序开发
--设计下载修改并保存修改后的C语言代码,并重新执行Build过程去掉注释标志“//”,使得这两行代码有效KeilμVision应用程序开发
--设计下载打开STC-ISP软件工具。在该界面左侧窗中,找到标题“芯片型号”,并通过右侧的下拉框选择STC32G12K128(1)展开芯片型号右侧的下拉框(2)展开STC32G12K128系列,选择STC32G12K128将芯片型号设置为STC32G12K128KeilμVision应用程序开发
--设计下载找到并同时按下实验箱上标记为P3.2/INT0的按键以及标记为ON/OFF的电源开关按键,保持该状态一段时间。然后,先释放标记为主控芯片电源开关的按键,然后释放标记为P3.2/INT0的按键如果stc-isp软件成功识别到STC官方提供的STC32G系列单片机实验箱,则会在图3.21的左侧窗口的“扫面串口”标题栏右侧下拉框中显示STCUSBWriter(HID1);否则重新执行上一步。KeilμVision应用程序开发
--设计下载单击
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025中国能建新疆院校园招聘(56人)笔试历年参考题库附带答案详解
- 2025上控(青岛)水务发展有限公司招聘相关人员4人(山东)笔试历年参考题库附带答案详解
- 2026年江苏省高三考前地理模拟试卷及答案
- 4.1 我国的个人收入分配 课件统编版高中政治必修二 经济与生活
- 2026 二年级上册《学系红领巾》课件
- 2026五年级上《冀中的地道战》教学课件
- 汽车机械基础课件 齿轮传动的失效形式、设计准则及材料选用
- 快递车辆消杀制度
- 建立算法备案和审计制度
- 2026年汽车代售合同(1篇)
- 某1.8万方反硝化深床滤池设计计算书
- 2024届浙江省名校协作体高三下学期开学联考物理试题及答案
- 2024年广东佛山市南海区大沥镇镇属企业招聘笔试参考题库含答案解析
- 100部经典好看韩国电影大全
- 新版医院住院病案首页
- C919客机机组培训-指示记录
- 2023年华侨、港澳、台联考高考物理试卷(含解析)
- 2023年广东中山市文化广电旅游局所属事业单位(孙中山故居纪念馆)招考聘用笔试题库含答案解析
- 2023化工总控工(高级)技能理论考试核心题库500题(含各题型)
- 轮毂加工工艺规程及专用车夹具设计
- 售楼部装修施工方案设计
评论
0/150
提交评论