Freescale+HC08+MCU集成开发环境的设计
时间:03-28
来源:互联网
点击:
4 技术设计要点
在系统的开发设计过程中,遇到许多的问题。下面把主要问题的一些处理方法作简要分析说明,供大家借鉴。限于篇幅.HC08系列MCU的调试器通用性设计具体见文献。
4.1中文和语法高亮的实现
语法高亮在集成开发系统的代码编写过程中是主要的问题之一。已有的一些控件虽然语法高亮功能比较全,但是对中文支持不是很好.最突出的就是半个汉字问题(在选择和删除字符的时候汉字当两个字符处理,一次只能删除半个,会出现乱码)。使用MFC的RichEdit控件虽可以解决中文问题,但又没有语法高亮的功能,为此,就以RichEdit为基类编写了语法高亮类,才解决语法高亮和中文的显示问题。其主要编程的思路是:通过捕获用户键盘输入的事件.判断用户输入的单词是否为c语言中的关键字.如果是,则改变其颜色。
4.2 GNU编译器的整合
本系统使用的是由GNU移植的HC08编译器,该软件不仅是开源、免费的。而且执行效率高,功能强,对c代码具有优化的功能。但是唯一的问题是。该编译器是Win32控制台程序,输出的编译信息都是在不同控制台下的.不易整合在一个IDE中。更甚的是编译器的输出信息都是非标准的输出流,无法使用ShellExecute函数捕获,也无法输出到管道文件中。为了解决该问题参考了一些国内外的资料,受此启发。采用CreateThread的方法,也就是创建子线程的办法,通过线程的管道,将编译输出信息捕获.并显示在窗口中。同时在此基础上也实现了从编译错误信息跳转到源代码的功能。
4.3 PC机与写入器的USB通信设计
写入器和PC机建立USB通信除了MCU与PC的通信程序设计外.PC方必须要有相应的驱动程序。本设计使用的USB开发包USBIO_EL是由德国Thesycon Systemsoftware&Consulting GmbH公司提供的免费软件,该开发包提供的功能是限制版本的USB驱动程序usbio_el.sys和USB动态链接库usbiocom.dll文件。usbio_el.sys 的限制部分为:厂商ID只能为0x0C70.仅支持一个中断IN端点和中断OUT端点,支持的端点缓冲区大小最大为8字节。而本设计写入器中使用的MC68HC908JB8芯片的USB模块恰好满足限制版本的条件,故可使用该驱动程序;usbiocom.dll可以直接加载至程序中,使用其中的类;表1为本设计中所用到的该库中的类及函数的说明。可以调用这些类及其函数实现建立连接、发送数据和接收数据的程序功能,从而实现指令的通信以及程序代码的传输。
表1本设计中使用到的USB库的类及函数说明
4.4 C语言程序调试功能的设计
调试功能实现对汇编和c语言的源码级在线调试。两者实现过程大体相似,但C语言调试的实现相对复杂。在此只针对C程序进行说明。
汇编程序和C程序在编译后都会产生调试信息文件(后缀名为.dbg)。dbg文件包含有相应的信息以供调试时使用。该文件详细记录了调试所需要的行号与存储地址等信息.包括文件首地址、函数的首末地址、每行源代码的行号和首地址、局部变量以及全局变量的名称地址类型等,如图2所示。对C语言程序的调试主要是基于对该调试信息文件的调用和判断。调试动作的设计首先是“设置断点”,接着点击“开始调试”,进入调试模式.然后选择“单步步入(Step Into)”、“单步步过(Step Over)”或“执行”至下一断点处等调试操作根据程序运行或变量的值判断调试。
下面分别阐述设计思路。
(1)设置断点
如在文件main.c中选择所需中断的一代码行.假设选择第33行,点击菜单“调试”一>“设置断点”,则在调试文件.dbg文件中找到“FILE main.c"行下的“LINE 33 8096”(如图2的双下划线), 该LINE后的33(十进制)等于当前设置断点的行号33,然后提取该“LINE”行中的8096(十六进制.本语句的首地址),作为当前的断点地址。则在界面上显示当前所选择断点的代码行呈红色高亮显示。否则所选择的不是代码行。
图2 dbg文件结构
(2)开始调试
设置断点后。点击菜单“调试" -> “开始调试”,程序运行至断点地址处.产生断点中断.则返回目标MCU运行的有关信息至PC机,在IDE界面中当前断点行呈蓝色高亮显示,在寄存器跟踪窗口和变量跟踪窗口中显示目标MCU中相应的值。接着选择不同的调试操作继续进行.如“单步步入”("单步步过"或“执行”至下一断点的设计思路与之类似)。
(3)单步步入
“单步步入”即从当前断点处按程序执行的流程一条一条语句的运行调试。设计调试的方法是.从程序“开始调试”运行至断点起,点击“单步步入”,程序先计算下一个断点地址。从断点开始.MCU的断点模块自动将当前断点地址加1.作为下一个断点地址.但C语言一条语句编译后往往不止一条汇编语句,可能几十条.甚至几百条.如此计算.则加1还不是下一条C语句的首地址。这时须将返回的PC寄存器值继续加1。直至下一条C语句首地址.即PC寄存器里的值等于下一条C语句对应的首地址,这样一次“单步步人”完成。若需继续执行,则再点击“单步步入”命令。
在系统的开发设计过程中,遇到许多的问题。下面把主要问题的一些处理方法作简要分析说明,供大家借鉴。限于篇幅.HC08系列MCU的调试器通用性设计具体见文献。
4.1中文和语法高亮的实现
语法高亮在集成开发系统的代码编写过程中是主要的问题之一。已有的一些控件虽然语法高亮功能比较全,但是对中文支持不是很好.最突出的就是半个汉字问题(在选择和删除字符的时候汉字当两个字符处理,一次只能删除半个,会出现乱码)。使用MFC的RichEdit控件虽可以解决中文问题,但又没有语法高亮的功能,为此,就以RichEdit为基类编写了语法高亮类,才解决语法高亮和中文的显示问题。其主要编程的思路是:通过捕获用户键盘输入的事件.判断用户输入的单词是否为c语言中的关键字.如果是,则改变其颜色。
4.2 GNU编译器的整合
本系统使用的是由GNU移植的HC08编译器,该软件不仅是开源、免费的。而且执行效率高,功能强,对c代码具有优化的功能。但是唯一的问题是。该编译器是Win32控制台程序,输出的编译信息都是在不同控制台下的.不易整合在一个IDE中。更甚的是编译器的输出信息都是非标准的输出流,无法使用ShellExecute函数捕获,也无法输出到管道文件中。为了解决该问题参考了一些国内外的资料,受此启发。采用CreateThread的方法,也就是创建子线程的办法,通过线程的管道,将编译输出信息捕获.并显示在窗口中。同时在此基础上也实现了从编译错误信息跳转到源代码的功能。
4.3 PC机与写入器的USB通信设计
写入器和PC机建立USB通信除了MCU与PC的通信程序设计外.PC方必须要有相应的驱动程序。本设计使用的USB开发包USBIO_EL是由德国Thesycon Systemsoftware&Consulting GmbH公司提供的免费软件,该开发包提供的功能是限制版本的USB驱动程序usbio_el.sys和USB动态链接库usbiocom.dll文件。usbio_el.sys 的限制部分为:厂商ID只能为0x0C70.仅支持一个中断IN端点和中断OUT端点,支持的端点缓冲区大小最大为8字节。而本设计写入器中使用的MC68HC908JB8芯片的USB模块恰好满足限制版本的条件,故可使用该驱动程序;usbiocom.dll可以直接加载至程序中,使用其中的类;表1为本设计中所用到的该库中的类及函数的说明。可以调用这些类及其函数实现建立连接、发送数据和接收数据的程序功能,从而实现指令的通信以及程序代码的传输。
表1本设计中使用到的USB库的类及函数说明
4.4 C语言程序调试功能的设计
调试功能实现对汇编和c语言的源码级在线调试。两者实现过程大体相似,但C语言调试的实现相对复杂。在此只针对C程序进行说明。
汇编程序和C程序在编译后都会产生调试信息文件(后缀名为.dbg)。dbg文件包含有相应的信息以供调试时使用。该文件详细记录了调试所需要的行号与存储地址等信息.包括文件首地址、函数的首末地址、每行源代码的行号和首地址、局部变量以及全局变量的名称地址类型等,如图2所示。对C语言程序的调试主要是基于对该调试信息文件的调用和判断。调试动作的设计首先是“设置断点”,接着点击“开始调试”,进入调试模式.然后选择“单步步入(Step Into)”、“单步步过(Step Over)”或“执行”至下一断点处等调试操作根据程序运行或变量的值判断调试。
下面分别阐述设计思路。
(1)设置断点
如在文件main.c中选择所需中断的一代码行.假设选择第33行,点击菜单“调试”一>“设置断点”,则在调试文件.dbg文件中找到“FILE main.c"行下的“LINE 33 8096”(如图2的双下划线), 该LINE后的33(十进制)等于当前设置断点的行号33,然后提取该“LINE”行中的8096(十六进制.本语句的首地址),作为当前的断点地址。则在界面上显示当前所选择断点的代码行呈红色高亮显示。否则所选择的不是代码行。
图2 dbg文件结构
(2)开始调试
设置断点后。点击菜单“调试" -> “开始调试”,程序运行至断点地址处.产生断点中断.则返回目标MCU运行的有关信息至PC机,在IDE界面中当前断点行呈蓝色高亮显示,在寄存器跟踪窗口和变量跟踪窗口中显示目标MCU中相应的值。接着选择不同的调试操作继续进行.如“单步步入”("单步步过"或“执行”至下一断点的设计思路与之类似)。
(3)单步步入
“单步步入”即从当前断点处按程序执行的流程一条一条语句的运行调试。设计调试的方法是.从程序“开始调试”运行至断点起,点击“单步步入”,程序先计算下一个断点地址。从断点开始.MCU的断点模块自动将当前断点地址加1.作为下一个断点地址.但C语言一条语句编译后往往不止一条汇编语句,可能几十条.甚至几百条.如此计算.则加1还不是下一条C语句的首地址。这时须将返回的PC寄存器值继续加1。直至下一条C语句首地址.即PC寄存器里的值等于下一条C语句对应的首地址,这样一次“单步步人”完成。若需继续执行,则再点击“单步步入”命令。
Freescale 半导体 MCU 嵌入式 USB 电路 单片机 仿真 C语言 电容 集成电路 LCD 继电器 相关文章:
- TI在微控制器市场中奋战(05-29)
- 嵌入式系统降低功耗的方法研究(01-22)
- Linux下ColdFire 片内SRAM的应用程序优化设计(01-27)
- 由外部总线访问MPC5554的内部存储器(04-02)
- 嵌入式处理器MPC8272与外设的总线适配(04-12)
- 增强型 eDMA的结构与典型应用(04-24)