tag 标签: 程序设计

相关博文
  • 热度 3
    2023-5-18 22:40
    2542 次阅读|
    0 个评论
    上位机用来干什么 对于硬件工程师来说,上位机的主要作用就是提供一个良好的用户界面,方便用户使用硬件功能。另一个重要的优势是上位机的开发方式和开发环境相对下位机来说更加人性化。完善的IDE,丰富的硬件资源,大量的第三方库,使得做一个软件往往比做一个完善的硬件更容易。我们可以在计算机使用按钮,鼠标,键盘,下拉列表等作为输入信息的途径。用户的学习成本极低。同时也可以用文字输出框,波形显示控件,表格,声音作为信息的输出途径。信息获取直观,方便。本文将以我制作的模拟信号发生器上位机作为蓝本,介绍它的开发流程,难点,以及未来展望。 2. 介绍常用开发工具、语言。为什么用它 自身经历出发 我知道的常用上位机开发语言有Java、C++、C#、labview、python、html+js(electron)。很多的嵌入式开发工具就是Java开发的,比如stm32cubemx、RT-stdio、瑞萨电子的e2sIDE。Java常用来开发手机端的app。 C++常常配合QT来开发图形化界面,QT是一个跨平台的GUI框架,框架本身也是由C++编写的。纯的QT开发完全是用C++编写的,但是C++的学习难度大,对开发者要求较高。 C#也是上位机开发的常用语言,它以Vsstido作为开发IDE,所以比较适合Window下的软件开发,开发框架是WPF或者是Winform。说实话我最开始也考虑这个,问题在于我的电脑配置低,带不动IDE。 Labview是图形化编程的IDE,比较贴合硬件工程师的思维,所有的语法,功能,接口都以图形空间的方式展示,所见即所得。还是因为软件的体积过大,我不想用。 最后我选择的是Python+QT的方式进行上位机的开发,它可以说是解决我的需求的最优解。不需要庞大的IDE编写,类c的语法,强大的包管理器,丰富的代码案例。这里的QT的接口用python进行了封装,所以还是采用python的语法编写执行逻辑。 Electron实际上是把网页开发html+js+css的流程,封装一下用来开发客户端软件。由于和网页开发比较像,所以每个electron软件都内置一个chrome内核,故采用electron开发的软件都比较的大。Electron也有包管理npm为其提供第三方库拓展应用程序的功能。 Electron界面也比较美观,可移植性比较强。最重要的是我没学过网页开发。 总结一下,python作为一个胶水语言把GUI框架,信号处理,串口通信这些功能给融合到一起。虽然python应用程序打包后也很大,内置了python解释器,但是它第三方库多。 开发起来简单,快速。 3. 开发环境配置 下载python解释器 https://www.python.org/ftp/python/3.10.9/python-3.10.9-amd64.exe 或者,从清华大学开源软件镜像网站下载 安装好后如图 在cmd输入python 说明环境变量没有问题。 终端中输入exit()退出python程序。 Python的包管理器叫做pip,我们需要更新pip的版本以便支持最新的第三方库。 更新的命令python -m pip install --upgrade pip 接着换源,把网络上存放的包的网址替换成国内镜像。 阿里,腾讯,网易,清华….都可以。 地址 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple 换源的方式由临时换源和永久换源 临时换源的意思就是在下载第三方库时,手动指定下载的网站。 永久换源的意思是 建立一个配置文件存放下载第三方包的镜像地址 临时换源 pip install PyQt5 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com -i后面的参数是豆瓣源地址 永久换源 以Window为例 (1)windows环境下: 比如windows用户名是 admin 那么建立 admin主目录下的 pip子目录,在此pip子目录下建立pip的配置文件:pip.ini 在这c:\users\admin\pip\pip.ini # coding: GBK index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = https://pypi.tuna.tsinghua.edu.cn #清华大学:https://pypi.tuna.tsinghua.edu.cn/simple #阿里云:http://mirrors.aliyun.com/pypi/simple/ 换源后。 下载开发所需的工具。 编辑器geany,pycharm,vscode…都行 第三方包: PyQT5:python下的QT库,可以使用Qdesigner工具拖拽设计界面。 使用信号与槽功能设计交互事件。 Serial:串口通信库 Matplotlib:绘制图表 Pyqtgraph:绘制波形 PIL:图像处理 这个放在信号发生器的文章里写 Scipy:信号处理的库这个放在示波器的文章里写 pyuic5 -o ui_a.py serial.ui 把UI设计文件转换成py文件 4. 功能实现 事件响应 QT的事件响应通过信号与槽完成。按钮,菜单选项,滑块,文本框,下拉列表等在出现特定操作时,会发出信号,这个信号会触发其绑定的槽函数。槽函数会处理该信号要对应的操作。 类似于中断和中断服务函数。 不过在实现具体的事件响应前,应该指定相关控件的信号。比如按钮有单击信号,按下信号等。如图 例如 self.send=self.pushButton_2#获取按钮控件对象 def send_handl(self):#自定义槽函数send_handl 处理具体的按下操作,比如发送数据 self.send.clicked.connect(self.send_handl)#把按钮控件按下信号绑定到槽函数send_handl() #按下按钮执行send_handl函数 通信 我使用的是串口通信,python中通过serial库实现串口通信。 self.uart =serial.Serial(port, 9600)#串口对象构造参数 端口号(字符串),波特率(整型) self.uart.readline()#串口读取函数 self.uart.write(data.encode())#串口写入函数 data.encode()#表示对发送的信息进行编码,编码为utf-8 data.decode()#表示对接收的信息解码 为了保证能够及时发送和接收,这里有两种解决方案。1.使用定时器周期性的判断读取缓存区是否有数据,并把数据显示出来。2.使用多线程,把读取数据的任务单独放一个线程中,提高响应速度。 显示 波形 显示波形用的是Pyqtgraph,下位机发送的数据是一连串的数字。Value1:value2:…..等为了保证及时接收串口数据,使用PYQT里的Qtimer类创建了一个定时器,每隔20ms读取一次串口缓冲区的内容。并把内容记录在字符串data中,把data按照分隔符”:”的拆分,拆分成字符串数组x ,判断x的长度。如果x的长度不等于1,则说明缓冲区里面有内容。把字符串数组里每个元素转换成数值并保存在队列里。创建另一个定时器,用于界面绘制,定时器每个100ms读取一次队列,每次读取256个元素,把元素内容存入数组中,使用PyQtgraph库读取数组绘制图形 self.timer.timeout.connect(self.update)定时更新数据 self.timer.start(50) def init(self): win = pg.GraphicsLayoutWidget() win.setBackground("w") self.plot = self.widget.addPlot() self.plot.setMouseEnabled(x=False, y=False)#禁止鼠标拖动 self.plot.showAxes(True, showValues=(True, True, True, True), size=20)#显示坐标轴 vb = self.plot.getViewBox() vb.setBackgroundColor('w')#设置画布背景 self.curve = self.plot.plot(pen='black') win.show() def update(self):#更新数据 # a=range(0,1000,1) if(q.full()): #print("ok") for i in range(0, 256, 1): x=str(q.get()) try: a =int(re.sub("\D","",x)) except ValueError: print(a ) self.curve.setData(a)#把数据填入图表中 self.curve.setPos(self.ptr, 0) self.ptr += 1 5 . 项目案例 做一个简易的串口助手 点击这里创建一个主界面。 界面分成三部分第一部分控件区,提供按钮、列表、文本框控件,布局。 第二部分界面设计区,可以把控件拖拽到此区域。 第三部分,对象查看器,通过树状图展示了从视图到空间的关系。下方的数学编辑器可以编辑设计区的任何对象的属性。例如,位置,是否可见… 这里用到了button,list,label,textview控件。 在Qdesiger内可以设置控件发出的信号类型,但是一般不在这里设置。不过我们可以通过在这的信号与槽工具看看,相关的控件有哪些信号。 左击选中一个控件,拖拽出一条线再松手。 设计好后保存成xxx.ui文件 使用pyuic5 -o ui_a.py xxx.ui把ui文件转换成py文件。 也可使用vscode插件,自行百度。 接下来需要在主文件导入界面文件。 在此之前需要导入pyqt5的一些库。 之后附上代码这里就不加了。 from ui_a import Ui_MainWindow#导入ui转py文件 class MyWindow(QtWidgets.QMainWindow,Ui_MainWindow):#继承父类QWidget 这个MyWindow就是我们设计功能的主类,所以需要继承PyQT和MainWindow类。以便操作他们派生的对象。 在MyWindow构造函数中,初始化父类对象和界面组件对象。 在def ini_ui(self):初始化控件 self.com=self.comboBox获取控件对象 把控件的信号绑定到槽函数comfun上, self.com.activated.connect(self.comfun) 编写槽函数 def comfun(self): global ser, serialPort serialPort=self.com.currentText()#获取当前的串口号 print(serialPort) ser.port=serialPort#设置串口对象的串口号 其他控件都差不多 发送槽函数 def sendhand(self): global serialPort, ser if self.pushButton.text() == '断开'and serialPort != None: send_str=self.textEdit.toPlainText() ser.write(send_str.encode('utf-8')) 定时器定时监控接收缓冲区 def time_out(self): global ser, timer_value data = ser.read_all() txt=str(data.decode()) if (len(txt)!=0): self.textBrowser.append(txt) self.timer.start(timer_value) 要在打开串口后,开启定时器,并且在回调函数执行末尾开启定时器。 重复执行回调函数 app=QApplication(sys.argv) timer_value=100#间隔100ms读一次串口 baudRate = 115200 ser=serial.Serial(timeout=0.5) ############ com_list=get_com_list() if com_list!= #默认为第一个端口 else: serialPort = None w.show_dialog(str='请先打开串口') ############ #开启图形化界面 w=MyWindow() w.show()#w-ui-show ui里有布局 #w.show_dialog("123456") #程序进行循环等待状态 app.exec() 6 . 其他资料 Python学习: https://www.educoder.net/paths/85 交互式python学习,适合有编程基础的。 PyQT学习: https://www.bilibili.com/video/BV15R4y1s7JD/?vd_source=9030595337abea343e2125e65d245d46 Pyqtgraph绘制波形教程:https://gitee.com/zsbyg/pyqtgraph_my_cookbook/tree/master 我会把我的学习时的代码打包,供其下载。
  • 热度 4
    2019-12-21 20:32
    3563 次阅读|
    0 个评论
    编程语言的设计与实现 + 初次学习Ruby小可爱
    首先感谢面包板社区人员的热心服务,很高兴自己再一次被面包板社区抽中了,能够有幸读松本行弘《编程语言设计与实现》,聆听 Ruby 之父畅谈设计新语言的动机,过程中的纠结与取舍以及 Ruby 开发中不为人知的故事,学习大师级程序员的思维方式。在此向为开发新语言的工作者表示衷心的感谢,感谢你们为编程语言的发展贡献自己的力量。 一. 创造一门什么样的语言 首先打开书,我们便能看到 Ruby 写的编程语言第一章创造一门什么样的语言,从编程语言的创造史开始讲起,世界上的所有编程语言都是由某个地方的某个人创造的,它们不是自然产生的,而是根据明确的意图和目的被设计并实现的。 Ruby 根据自己的经历和参考其他语言作者的意见,我认为有以下几点理由 提高编程能力,提高设计能力,打造个人品牌,活得自由。在这个开源的时代,技术人员要想生存下去,在技术社区的存在感是非常重要的。 成就一番伟大的事业首先需要的就是热情,不能保持热情是不行的。一旦有了创造编程语言的热情,就应该尽快开始,以后再根据需要慢慢地掌握所需要的基本知识以及工具的使用方法。 如上图所示,我们可以看到书的封皮和 Ruby 之父松本行弘,发现书包装的不错,而且里面的字迹也特别清晰,一打开就能够闻到书的味道。在扉页我们能够看到有这样一句话:站在巨人的肩膀上,我想学习 Ruby 语言的,都是站在松本行弘老师的肩膀上的。在此非常感谢老师。 第一章主要从语言的最基本讲起,首先是创造编程语言的意义和语言处理器的结构,虚拟机,编程语言设计的前篇和后篇这几部分组成。从本书中,我们可以看到一门编程语言的设计和实现的方法,以及 Ruby 语言在底层架构中如何的使用和应用。 二. 新语言 Streem 的设计与实现 首先,打开第二章,看到第二章的标题新语言 Streem 的设计与实现,介绍到多核时代,研究新时代的并行编程,设计支持并行编程的新语言,讲解了并行和并发编程。 Ruby 是开源的,在 Web 上免费提供,但需要一个许可证, Ruby 是一种类似于 Python 和 Perl 的服务器端脚本语言。 Ruby 语法简单,这使得新的开发人员能够快速轻松地学习 Ruby 。 Ruby 可扩展性强,用 Ruby 编写的大程序易于维护。 Ruby 有丰富的内置函数,可以直接在 Ruby 脚本中使用。 Ruby 是 " 程序员的最佳朋友 " 。 Ruby 可运行于多种平台,如 Windows 、 MAC OS 和 UNIX 的各种版本。 Ruby 是纯面向对象的语言, Ruby 中的一切都是以对象的形式出现。 在支持并发编程的结构中,最具代表性的是进程的线程。下面我们将介绍一下 Ruby 多线程的设计。每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是程序中一个单一的顺序控制流程,在单个程序中同时运行多个线程完成不同的工作 , 称为多线程。 Ruby 中我们可以通过 Thread 类来创建多线程, Ruby 的线程是一个轻量级的,可以以高效的方式来实现并行的代码。 2.1 创建 Ruby 线程 要启动一个新的线程,只需要调用 Thread.new 即可 : # 线程 #1 代码部分 Thread.new { # 线程 #2 执行代码 } # 线程 #1 执行代码 以下实例展示了如何在 Ruby 程序中使用多线程: #!/usr/bin/ruby def func1 i=0 while i<=2 puts "func1 at: #{Time.now}" sleep(2) i=i+1 end end def func2 j=0 while j<=2 puts "func2 at: #{Time.now}" sleep(1) j=j+1 end end puts "Started At #{Time.now}" t1=Thread.new{func1()} t2=Thread.new{func2()} t1.join t2.join puts "End at #{Time.now}" 以上代码执行结果为: Started At Wed May 14 08:21:54 -0700 20 19 func1 at: Wed May 14 08:21:54 -0700 20 19 func2 at: Wed May 14 08:21:54 -0700 20 19 func2 at: Wed May 14 08:21:55 -0700 20 19 func1 at: Wed May 14 08:21:56 -0700 2019 func2 at: Wed May 14 08:21:56 -0700 2019 func1 at: Wed May 14 08:21:58 -0700 2019 End at Wed May 14 08:22:00 -0700 2019 2.2 线程生命周期 1 、线程的创建可以使用 Thread.new, 同样可以以同样的语法使用 Thread.start 或者 Thread.fork 这三个方法来创建线程。 2 、创建线程后无需启动,线程会自动执行。 3 、 Thread 类定义了一些方法来操控线程。线程执行 Thread.new 中的代码块。 4 、线程代码块中最后一个语句是线程的值,可以通过线程的方法来调用,如果线程执行完毕,则返回线程值,否则不返回值直到线程执行完毕。 5 、 Thread.current 方法返回表示当前线程的对象。 Thread.main 方法返回主线程。 6 、通过 Thread.Join 方法来执行线程,这个方法会挂起主线程,直到当前线程执行完毕。 三. Ruby 类和对象 Ruby 是一种完美的面向对象编程语言。面向对象编程语言的特性包括: 数据封装、数据抽象、多态性、继承。这些特性将在面向对象的 Ruby 中进行讨论。一个面向对象的程序,涉及到的类和对象。类是个别对象创建的蓝图。在面向对象的术语中,您的自行车是自行车类的一个实例。 以车辆为例,它包括车轮( wheels )、马力( horsepower )、燃油或燃气罐容量( fuel or gas tank capacity )。这些属性形成了车辆( Vehicle )类的数据成员。借助这些属性您能把一个车辆从其他车辆中区分出来。 车辆也能包含特定的函数,比如暂停( halting )、驾驶( driving )、超速( speeding )。这些函数形成了车辆( Vehicle )类的数据成员。因此,您可以定义类为属性和函数的组合。 类 Vehicle 的定义如下: Class Vehicle { Number no_of_wheels Number horsepower Characters type_of_tank Number Capacity Function speeding { } Function driving { } Function halting { } } 通过给这些数据成员分配不同的值,您可以创建类 Vehicle 的不同实例。例如,一架飞机有三个轮子,马力 1,000 ,燃油罐容量为 100 升。以同样的方式,一辆汽车有四个轮子,马力 200 ,煤气罐容量为 25 升。 一. Ruby 文件的输入与输出 Ruby 提供了一整套 I/O 相关的方法,在内核( Kernel )模块中实现。所有的 I/O 方法派生自 IO 类。类 IO 提供了所有基础的方法,比如 read 、 write 、 gets 、 puts 、 readline 、 getc 和 printf 。 4.1 puts 语句 在前面的章节中,您赋值给变量,然后使用 puts 语句打印输出。 puts 语句指示程序显示存储在变量中的值。这将在每行末尾添加一个新行。 4.2 gets 语句 gets 语句可用于获取来自名为 STDIN 的标准屏幕的用户输入。 4.3 putc 语句 与 puts 语句不同, puts 语句输出整个字符串到屏幕上,而 putc 语句可用于依次输出一个字符。 4.4 print 语句 print 语句与 puts 语句类似。唯一的不同在于 puts 语句在输出内容后会跳到下一行,而使用 print 语句时,光标定位在同一行。 4.5 打开和关闭文件 截至现在,您已经读取并写入标准输入和输出。现在,我们将看看如何操作实际的数据文件。 File.new 方法 您可以使用 File.new 方法创建一个 File 对象用于读取、写入或者读写,读写权限取决于 mode 参数。最后,您可以使用 File.close 方法来关闭该文件。 语法 aFile = File.new("filename", "mode") # ... 处理文件 aFile.close File.open 方法 您可以使用 File.open 方法创建一个新的 file 对象,并把该 file 对象赋值给文件。但是, File.open 和 File.new 方法之间有一点不同。不同点是 File.open 方法可与块关联,而 File.new 方法不能。 File.open("filename", "mode") do |aFile| # ... process the file End 下表列出了打开文件的不同模式: 模式 描述 r 只读模式。文件指针被放置在文件的开头。这是默认模式。 r+ 读写模式。文件指针被放置在文件的开头。 w 只写模式。如果文件存在,则重写文件。如果文件不存在,则创建一个新文件用于写入。 w+ 读写模式。如果文件存在,则重写已存在的文件。如果文件不存在,则创建一个新文件用于读写。 a 只写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于写入。 a+ 读写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于读写。 五 . 总结 通过上面的介绍,相信每个人都对 Ruby 语言有了更深的了解。学习了松本行弘编书的设计新语言的设计流程和思路。感谢面包板社区,是我更近一步了解到 Ruby 语言的的思想和流程。
  • 热度 20
    2013-3-24 15:57
    2026 次阅读|
    4 个评论
      一个单片机的程序,设置了一些初始化硬件后不会再遇到的参数,然后将这些程序注释掉了,这样对于调试来说固然很好。但是,对于以后的程序与维护,都是一个潜在的隐患。   首先,对于以后再次使用的新设备,会出现意想不到的问题。因为偶然拿来一个新的设备,没有经过初始化,这个时候程序的参数都是要配置之后的,对于调试者是个灾难。要分析造成问题的原因,往往也不好分析,因为程序是好用的,硬件是新的。按常理是不应该不能运行的。但是它们不运行了。即使是对于程序的设计者,如果不是要注意一番,估计也不好发现这个问题。而会在分析了很长时间之后,发现是没有初始化的问题。浪费了很多时间。   其次,对于后来的程序阅读者而言(除非程序足够小亦或项目足够小,程序不会被第二个人阅读到),也是要费一番脑筋才能弄明白原作者的那段程序要怎么做。(这有违软件工程——程序是要让其他人都看得懂的原则)这样也会给新加入项目者,造成一些不必要的时间消耗,延缓项目时间。   怎么样处理好这样的问题是一个要思考的。一次初始化之后,以后程序运行就不会再执行的代码,如何处理才合适。在这里,认为没有最好的方法。对于不同的要求和实际情况选择最合适的方法,是比较可行的。 其一、将初始化程序也放在执行代码内,不给注释掉,每次开机检测是否已经初始化,如果已经初始化过,则正常执行,如果没有则执行初始化步骤。 其二、将初始化程序放在注释中,但是要有详细的注释说明,说明此段代码的用处,即用于何处,何时使用,以及声明此段代码不可删除。这相当于给单片机烧程序的下载器,虽然只用一次,但是不可或缺,而且要知道用途。
  • 热度 20
    2012-6-13 13:39
    1124 次阅读|
    0 个评论
    1. 简介 WizISP FlashProgrammer应用程序可用于将二进制/十六进制代码烧录到W7100A的内存中。程序可以在Windows 9x / Me, Windows NT / 2000 / XP / 2003 和 Windows Vista / 7操作系统下运行。根据目标设备支持的传播媒介,WizISP可以通过RS232连接器或USB转串口 (RS232)连接器与目标设备进行通信。 如果用户使用 USB 转 串口连接器,程序的运行速度可能会有所下降,因此,它需要其他的配置。关于这部分的配置,请参考附录部分。 这个软件叫做WizISP,是WIZnet系统程序的简称,主要特征如下: l 支援二进制文件格式数据文件的加载和保存 l 支援内置的MCS-86十六进制目标文件转换器 l 目标设备控制: - 擦除、空白检查、编程、读、修改、特殊字节处理 l 缓存控制: - 数据字节修改、进入指定地址和将特殊缓存数据保存到文件中 l 快速重复编程的可定制流程 l 方便快捷的工具栏、Windows快捷键和进度栏     2. 软件安装与配置 下列步骤演示了如何在电脑上安装WizISP(以下解释程序是在Windows XP操作系统下运行的)。   l 将WizISP_版本.rar文件复制到空的临时目录下 l 解压rar文件,系统建立了WizISP_版本的目录 l 打开WizISP_版本的目录,运行 Setup.exe 文件 l 遵循安装程序指示完成WizISP的安装   为了使USB转串口能正常工作,首先你需要安装合适的驱动程序。     3.入门指南 本章描述了如何通过GUI(图形用户界面,如图1所示)使用WizISP flash programmer应用程序,如下所示。   l 如何下载二进制文件到代码存储器 (请参见3.1节) l 如何下载二进制文件到数据存储器(请参见3.2节) l 如何修改芯片数据存储器 (请参见3.3节) l 其他特殊功能介绍 (请参见3.4节)                                                                           图 3.1 WizISP用户界面   3.1 烧录代码闪存 在W7100A 中有两种类型的存储器:代码存储器和数据存储器。W7100A的代码存储器可存储64字节的用户程序代码。数据存储器则包括64K字节的数据存储器和255字节的用户数据存储器。WizISP可以编译64K字节的代码存储器和255字节的数据存储器。   这一节我们将讲述如何使用WizISP GUI下载用户代码到代码存储器。   使用GUI.下载xxx.bin/xxx.hex文件到开发板或模块的过程如下所示 : 步骤 1 使用串口电缆或USB转串口l电缆连接计算机和目标板。 确保开发板已经调成‘ISP Mode’(必须打开iMCU7100EVB的BOOTSEL开关);否则,你必须打开BOOTSEL开关并将开发板重新复位。 步骤 2 通过Windows开始菜单路径运行WizISP。在界面中的 COM端口配置 区域,为开发板连接选择PC串口通信端口和baud-rate(波特率),推荐使用最快的波特率来实现快速编程。 步骤 3 单击‘Open’按钮连接这个COM端口,然后检查 ‘Flash Operation Mode’为Code模式,如图3.1的标记区域1所示。 步骤 4 如果你想使用代码/数据锁的功能,检查lock字段,并单击‘Lock’按钮,如图3.1的标记区域1所示。 步骤 5 单击‘Load’按钮加载二进制/十六进制文件,选择需要加载的文件。如果你想加载以前加载过的文件,你可以使用‘Load’按钮旁边的下拉列表。 步骤 6 在工具栏中单击‘Erase’按钮擦除代码存储器区域,然后单击‘Blank’按钮检查文件是否空白。在检查完后,单击‘Program’按钮开始烧录。为确保烧录良好,我们可以使用‘Verify’按钮进行核查。 但要注意,如果代码存储器被锁,将不能进行核查,因为如果代码存储器被锁, WizISP 就不能读取代码存储器。 步骤 7 经核查,单击‘Run’按钮开始用户代码,或者关掉BOOTSEL开关,并将iMCU7100EVB复位来开始用户代码。 如果你想要WizISP自动的完成步骤 6 ~ 7的操作,在‘AutoTask Selection’字段上检查作业,并单击工具栏的‘Go’按钮或‘Auto’按钮。你可以使用如图3.1标记区域2的进度条参考操作进程。   3.2 烧录用户数据存储器 W7100用一个255字节的用户数据存储器来保存用户数据,即使关掉电源,用户数据存储器也可以保存数据。并且,用户数据存储器也可以使用这个软件(请参见3.3节)直接进行修改。因此,它对于保存用户数据是非常有用的,例如MAC、IP、子网掩码、默认网关或其他信息。本节将描述如何将一个二进制文件(.bin)烧录到W7100A的用户数据存储器中,操作流程如下: 步骤 1 按照3.1节的步骤1 ~ 3连接WizISP 和iMCU7100EVB。 步骤 2 在图 3.1所示的标记区域1中,选择‘FlashOperation Mode’为Data,并单击‘Set’按钮改变操作模式。 步骤 3 在图 3.1所示的标记区域3中单击‘Load DataFile’,选择*.bin或*.hex文件(最大255字节)进行加载。 步骤 4 烧录的方法与3.1节的步骤 6一样。如果用户数据存储器被锁,将不能进行核查,并且所有‘Hex Editor’的读数据都是0xFF。   3.3 修改用户数据存储器 用户数据存储器可以通过WizISPGUI直接修改。假设WizISP正在运行,目标设备在数据闪存操作模式下与WizISP相连,后续修改数据存储器的步骤如下所示。 步骤 1 在工具栏中单击‘ Read’ 按钮,读结束后,数据存储器会被显示到‘ Hex Editor’中,如 图 3.1的标注区域5所示。 步骤 2 单击‘ Edit’ 按钮,将十六进制编辑器从视图模式修改成编辑模式。此时,‘ Edit’ 按钮会突出显示。 步骤 3 在十六进制编辑器中,选定数据区域的类型为标记区域,并通过键盘直接为这个字节输入一个新的值(必须是十六进制形式)。 步骤 4 修改后,单击‘ Save’ 按钮将修改后的数据烧录到数据存储器中。一旦点击了‘ Save’ 按钮,就会出现一个对话框,如果你单击‘ Yes(Y)’ 按钮,WizISP就开始烧录修改后的数据。     3.4 其他功能 WizISP同样提供了其他方便实用的功能,例如HexToBin(十六进制文件到二进制文件转换器)和将当前缓冲器数据保存到文件中等等。本节我们主要介绍这两个主要的特殊功能。 HexToBin WizISP支持在工具栏中使用‘ Load’ 按钮直接加载*.bin 和 *.hex文件,如下图3.3出现的弹出对话框所示,系统会询问你是否需要将十六进制文件转换成二进制文件形式。如果你单击‘ Yes(Y)’ 按钮,就弹出HexToBin转换器界面,如图3.4所示。你可以单击 C onvert 按钮直接将十六进制文件转换成二进制文件形式,完成转换后,单击 L oad File 按钮将转换的二进制文件烧录到缓存中。                                 图 3.3 HexToBin 询问对话框                                                  图 3.4 HexToBin 转换器界面   保存缓存 在如图3.1的标注区域6所示的‘ Save buffer to file’ 按钮,单击可以直接将十六进制编辑器当前视图的缓存保存到二进制文件中。当前缓存的起始地址和结束地址可以在 From Address 和 To Address 的输入文本框中指定。   重要提示     WIZnet 公司任何时候都有权对产品和服务进行更正、修改、提高、改善和做其他改变,任何产品停产或服务停止时, WIZnet 公司有权不予通知。客户在下订单之前需获取最新相关信息,并确保这些信息是最新的、完整的。所有产品的出手都遵从 WIZnet 的销售合同条款,并实时提供订单确认。设备应用程序的相关信息等等都只作为参考,并可能随着更新被取代。客户有责任确保他们的应用程序符合他们自己的规范。 WIZnet 公司有权不作产品陈述、不提供保修相关的建议以及支持客户产品设计。      WIZnet 公司声明没有责任和义务对任何产品的使用、无许可转让以及任何专利、版权以及屏蔽作品进行授权,并且不对这些无专利、版权以及屏蔽作品的侵权承担声明和担保。    WIZnet 公司的产品不能用在生命保障系统 / 器械,或者任何可能引起人身伤亡、财产损失和环境破坏的系统机制上。当客户使用或者出售 WIZnet 的产品应用于上面所提到的情况,将自行承担风险, WIZnet 公司对损失不予赔偿。   所有的商标权归属于其所有者。   如果您有什么疑问请直接留言也可以登录我们的官网:http://www.wiznettechnology.cn   或者来信:Tel: 86-10-84539974(转166),QQ:2464237212,邮箱:wiznetbj@wiznettechnology.com,联系人:Lily Zhang,谢谢!
  • 热度 24
    2012-6-8 09:35
    1454 次阅读|
    0 个评论
    大家好,接下来的两天我们会为大家分享WIZnet公司的iMCU7100EVB用户指南。今天为大家分享第一部分~   1. 概述 iMCU7100EVB是测试W7100A的功能和性能的评估板,在本文档中,将会描述基本的ping测试和TCP服务器测试。 1.1 简介 iMCU7100EVB是用来测试嵌入式以太网单片机-W7100A的所有功能的评估板。iMCU7100EVB使用RS-232接口和LAN接口就可以很轻松的建立串口转以太网的通信环境。W7100A也可以使用所支持的字符LCD和其他增加的接口来控制和测试W7100A。   以下列出了所有可以在WIZNET网站下載的W7100A应用程序笔记   TCP服务器,客户端   UDP   DHCP   DNS客户端   DDNS   HTTP 服务器,客户端   Telnet   串行到以太网服务器,客户端, UDP   IPRAW   MACRAW   UART   Timer   LCD   I 2 C   1.2 规格 表 1.1iMCU7100EVB所含的项目清单 项目 详细说明 备注 MCU 嵌入式以太网单片机-W7100A 与8051兼容 存储器 64KBytes 数据存储器 (RAM) 64KBytes 代码存储器 (ROM) 255Bytes 数据闪存 嵌入W7100A 串口 开发板上的一个RS-232C(DB9接口)   以太网 开发板上的MAC-Jack( 变压器 + RJ-45 接口)   LCD 16字符 * 2行字符 LCD   LED 3个通用 LED 8个网络状态 LED   按钮 1个复位开关   调试器 开发板上的调试器SOCKET   扩展接口 MCU扩展接口 -       32引脚 (8引脚 * 4) 间距 2.54mm针脚孔 -       14引脚 (7引脚 * 2) 间距2.54mm 针脚孔 -       32引脚 (8引脚 * 4) 间距 2.00mm针脚孔 -       14引脚 (7引脚 * 2) 间距 2.00mm针脚孔 虚拟孔 -       间距167引脚 间距2.54mm 虚拟孔 -       间距236引脚 间距 2.00mm虚拟孔   电源 DC 5V / 2A  电源适配器 内置的 PCB 尺寸:120mm * 80mm   2. 启动 2.1 上电 将字符LCD、网线(UTP电缆)、 RS-232和电源线连接到iMCU7100EVB上。 图. 2.1 iMCU7100EVB 给iMCU7100EVB开发板上电,并做下列的检查。 1.     检查电源灯(D13)是否亮。 2.     检查字符LCD是否显示“iMCU7100 EVB”和“192.168.001.002”。 如果以上两项均正常,那么表示iMCU7100EVB开发板正常工作。   2.2 ping测试 在测试电脑上运行命令提示符,执行ping命令来测试连接电脑的IP。发送ICMP ping请求并检查电脑的ICMP ping响应。注意:测试电脑和iMCU7100EVB 开发板 需要设置在同一个网段下。   1.      确认测试电脑的网络信息如下 IP地址 : 192.168.1.xxx 默认网关 : 192.168.1.1 子网掩码 : 255.255.255.0   2.      执行ping命令如下 “C:\ping 192.168.1.2” 图 2.2ping测试 2.3 程序设计 iMCU7100EVB使用WizISP程序或W7100A编译器编译二进制映像(固件)。想了解更多,请参考WizISP程序用户指南和W7100A编译器用户指南。 2.4 TCP服务器演示 TCP服务器应用说明文档和示例代码包含在光盘中,应用说明也可以从WIZnet的主页(http://www.wiznettechnology.cn/)下载。用户可以使用示例代码简单地测试一下TCP 串行回路测试(loopback) 服务器实例,测试过程如下所示。   1.      确认测试环境。  使用 网线 将iMCUW7100EVB直接连接到电脑上   使用串行电缆将iMCUW7100EVB直接连接到电脑上   将5V电源适配器连接到电脑上   2.      确认测试电脑的网络信息如下。     IP地址 : 192.168.0.2     默认网关 : 192.168.0.1     子网掩码 : 255.255.255.0   3.      执行串口终端机程序后 (例如: 超级终端机( HyperTerminal) ), 属性设置如下。 表 2.1终端 机 程序设置 属性 设定值 Bits Per second ( 波特率 ) 115200 bps Data Bits(数据位) 8 Bits Stop Bits(停止位) 1 Bits Parity (奇偶校验位) No Flow Control(流控制) None 串口终端程序会使用串行信息列出所有的TCP服务器的 运 作 信息。为了检查串行信息,必须根据图2.3超级终端 机 (HyperTerminal)的连接信息来设定。因为根据使用者的不同设定,请检查COM端口是否相同。 图 2.3超级终端机(HyperTerminal)程序设置 4.      给 iMCU7100EVB通电并检查电源LED。 5.      运行AX1,并按如下进行操作,如 图 2.4所示 。(更多详细信息,请参见AX1用户手册) 图 2.4执行 AX1 当iMCU7100A-EVB正在运行TCP服务器模式时, 从AX1程序中选择 “TCP连接(TCP connect)” 来连接开发板。输入iMCU7100A-EVB 的IP地址和端口号;之后‘connected’信息就会出现,这代表已连接到TCP服务器. 如果点击了发送键‘send’, 就开始 loopback测试。用户可自行设定数据大小基值来进行loopback测试。 6.      loopback 服务器演示结果 a)      loopback服务器演示結果 图 2.5 loopback 服务器演示结果 图 2.6 loopback 服务器演示结果(AX1) 如果loopback测试成功,从AX1发送到iMCU7100A-EVB 的信息会发送回AX1.用户可以自行使用连续的loopback测试。
相关资源