微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > Freescale+HC08+MCU集成开发环境的设计

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语句对应的首地址,这样一次“单步步人”完成。若需继续执行,则再点击“单步步入”命令。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top