现场总线第讲NeuronC语言与IO对象.ppt
《现场总线第讲NeuronC语言与IO对象.ppt》由会员分享,可在线阅读,更多相关《现场总线第讲NeuronC语言与IO对象.ppt(89页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、华东理工大学自动化系现场总线控制系统现场总线控制系统第第3讲讲NeuronC语言与语言与I/O对象对象信息学院自动化系信息学院自动化系 凌志浩凌志浩内容简介内容简介1 Neuron C 1 Neuron C 简介简介2 Neuron C 2 Neuron C 编程及技巧编程及技巧3 3 节点间通信节点间通信3.1 3.1 网络变量网络变量3.2 3.2 显示报文显示报文4 4 输入输出对象输入输出对象华东理工大学自动化系1 Neuron C 1 Neuron C 简介简介 Neuron Neuron芯片的应用程序是用芯片的应用程序是用Neuron CNeuron C编写的编写的。Neuron
2、C Neuron C是建立在是建立在ANSI CANSI C的基础上的,与之相比有如的基础上的,与之相比有如下下三方面三方面扩展功能:扩展功能:(1)一种新的语句类型一种新的语句类型whenwhen,引入事件并定义任务事件的,引入事件并定义任务事件的执行顺序。执行顺序。(2)新增加了新增加了3737种数据类型,种数据类型,3434种输入种输入/输出对象,输出对象,2 2个定个定时器时器/计数器对象,大大简化了设备控制器的用法计数器对象,大大简化了设备控制器的用法。(3)网络变量的内部消息传送机制和其他消息处理机制网络变量的内部消息传送机制和其他消息处理机制。它是将程序样例建立在事件上的。也即应
3、用程序是被它是将程序样例建立在事件上的。也即应用程序是被发生在网络当中或指定设备上的事件所触发的。因此网络发生在网络当中或指定设备上的事件所触发的。因此网络自己是被事件驱动的。自己是被事件驱动的。华东理工大学自动化系1.1 1.1 对对ANSI C ANSI C 的扩展包括的扩展包括(1)一个内部多任务调度程序,它允许程序员以自然的方式描述一个内部多任务调度程序,它允许程序员以自然的方式描述事件驱动的任务,同时控制这些任务的优先级的执行。事件驱动的任务,同时控制这些任务的优先级的执行。(2)将将I/O对象直接映射到处理器的对象直接映射到处理器的I/O能力能力。(3)网络变量对象定义:提供一种简
4、单的实现节点之间数据共享网络变量对象定义:提供一种简单的实现节点之间数据共享的方法。的方法。(4)when语句:引入事件并定义这些事件所对应的任务。语句:引入事件并定义这些事件所对应的任务。(5)显式消息传递显式消息传递(explicitmessage):用于直接对:用于直接对LonTalk协协议的底层进行访问。议的底层进行访问。(6)秒及毫秒级软件定时器对象。秒及毫秒级软件定时器对象。(7)函数库:当调用时,可以执行事件检查、管理输入函数库:当调用时,可以执行事件检查、管理输入/输出、输出、网上发送或接收消息以及控制网上发送或接收消息以及控制Neuron芯片的各种功能。芯片的各种功能。(8)
5、NeuronC中有中有三个三个ANSI包含文件包含文件:、。华东理工大学自动化系1.2 Neuron C 1.2 Neuron C 支持的变量的类型支持的变量的类型(1)整型(整型常数或整型变量)整型(整型常数或整型变量)int、short int、long int、unsinged int、signed(可省略可省略)int(2)字符型(字符型常数或字符型变量)字符型(字符型常数或字符型变量)unsigned char(8 unsigned char(8位位)、signed char(8 signed char(8位位)(3)typedef enum FALSE、TRUE boolean(4
6、)其他其他 华东理工大学自动化系1.3 Neuron C 1.3 Neuron C 变量定义变量定义(1)Neuron C(1)Neuron C和和ANSI CANSI C支持的变量定义如下支持的变量定义如下简单的数据类型简单的数据类型 int a,b,c;chara;数据类型数据类型 typedef unsigned long ULONG;枚举枚举 enum hueRED,GREEN,BLUE指针指针 char*p;函数函数 int f(int a,int b)数组数组 int a4结构和共用体结构和共用体 struct char name10;int age;char addr10;华东理
7、工大学自动化系(2 2)Neuron CNeuron C中附加定义的对象中附加定义的对象I/O对象:对象:IO_0 output bit alarm定时器:定时器:mtimer led_on_timer网络变量:网络变量:network input int net_is_car消息标签:消息标签:msg_tag command华东理工大学自动化系1.4 1.4 编译指令编译指令NEURONC允允许许通通过过#pragma编编译译指指令令进进行行编编译译器器扩扩充充。#pragma可可用用来来设设置置一一个个Neuron芯芯片片的的系系统统资资源源以以及及节节点点参参数数,诸诸如如缓缓存存器器数
8、数及及其其大大小小,接接收收事事务务数数等等。也也可可用用于于对对特特定定的的Neuron芯芯片片参参数进行控制,这些指令可在源文件的任何位置出现。数进行控制,这些指令可在源文件的任何位置出现。例:例:#pragmaenable_io_pull_ups可使可使IO4-IO7的上拉使能的上拉使能华东理工大学自动化系2 Neuron C 2 Neuron C 编程及技巧编程及技巧 2.1 2.1 调度程序调度程序 Neuron Neuron 芯片的任务调度是由事件驱动的:芯片的任务调度是由事件驱动的:当一个给定的条件判断为当一个给定的条件判断为“真真”时,与该事件有时,与该事件有关的代码被执行关的
9、代码被执行(称为任务被执行称为任务被执行)。调度程序允。调度程序允许定义任务,该任务作为特定事件的结果而被运许定义任务,该任务作为特定事件的结果而被运行,如:输入管脚的改变、接收一个网络变量的行,如:输入管脚的改变、接收一个网络变量的新值、或定时器溢出等。也可以指定某些任务是新值、或定时器溢出等。也可以指定某些任务是具有优先级的任务,以便能得到优先服务。具有优先级的任务,以便能得到优先服务。华东理工大学自动化系(1 1)when when语句语句 事件由事件由when语句来定义,语句来定义,when语句包含一个表达语句包含一个表达式,当表达式为真时,表达式后面的代码段被执行式,当表达式为真时,
10、表达式后面的代码段被执行。例:例:when(timer_expires(led_timer)/当定时器溢出时执行下列任务当定时器溢出时执行下列任务io_out(io_led,OFF);在在 任任 务务 执执 行行 后后,时时 间间 溢溢 出出 事事 件件 被被 清清 除除。当当led_timer再再次次溢溢出出,when子子句句判判断断为为真真,任任务务又又将将执执行;否则,任务被忽略。行;否则,任务被忽略。华东理工大学自动化系A.A.多个多个whenwhen子句可与一个任务发生关联子句可与一个任务发生关联when(reset)when(io_change(io_switch)when(!ti
11、mer_expires)when(x=3).华东理工大学自动化系B.whenB.when子句子句不能嵌套不能嵌套如下为错误:如下为错误:when(io_changes(io_switch)when(x=3).华东理工大学自动化系 ()()whenwhen子句语法子句语法priorityprompt_safewhen(event)taskpriority(优先级优先级):可选择项可选择项 prompt_safe:可选项,如使用即便应用程序处于占先模式,可选项,如使用即便应用程序处于占先模式,仍然允许调度程序执行相关的仍然允许调度程序执行相关的when任务任务。event:可是预定的事件也可是有效
12、的可是预定的事件也可是有效的 Neuron C 表达式。表达式。tasktask:是是Neuron Neuron 的复合语句,任务同的复合语句,任务同voidvoid函数体等同函数体等同,也即它不能返回一个值也即它不能返回一个值.华东理工大学自动化系()()whenwhen语句中的事件类型语句中的事件类型分为两种:预定义事件和用户定义事件分为两种:预定义事件和用户定义事件预定义事件:预定义事件:使用编译器内部固有的关键字使用编译器内部固有的关键字,包括输入引脚状包括输入引脚状态变化、网络变量修改、定时器溢出以及消息的接收等。态变化、网络变量修改、定时器溢出以及消息的接收等。用户定义事件:用户定
13、义事件:可以是任何有效的可以是任何有效的Neuron CNeuron C表达式。表达式。例:例:when(msg_arrives)/正确正确when(online)/正确正确when(msg_arrives&flag=TURE)/正确正确 华东理工大学自动化系()()whenwhen语句的调度语句的调度 调度程序对一组调度程序对一组when子句的判断过程是一个循环往复子句的判断过程是一个循环往复的过程,每一个的过程,每一个when语句都由调度程序检测,如果为真语句都由调度程序检测,如果为真,则与其相关联的任务就被执行。如果,则与其相关联的任务就被执行。如果when语句为假语句为假(FALSE)
14、,调度程序将继续检查后面的),调度程序将继续检查后面的when语句,语句,在检查完最后一个在检查完最后一个when语句后,调度程序返回顶部重复语句后,调度程序返回顶部重复执行上述过程。执行上述过程。例如:例如:(其中只有为真)(其中只有为真)when()()Awhen()()Bwhen()()Cwhen()()D华东理工大学自动化系()优先级()优先级whenwhen子句子句 如如when子句选用子句选用priority关键字,相比无优先级的关键字,相比无优先级的when子句,调度程序对具有优先级的子句,调度程序对具有优先级的when子句的判断次数要子句的判断次数要频繁的多。优先级频繁的多。优
15、先级when语句在每次调度程序运行时以指语句在每次调度程序运行时以指定的顺序被检查。如果任何优先级定的顺序被检查。如果任何优先级when语句被检测为真,语句被检测为真,则与它相对应的任务就被执行,然后调度程序又重新回到则与它相对应的任务就被执行,然后调度程序又重新回到优先级优先级when语句队列头,从头开始检测优先级语句队列头,从头开始检测优先级when语句。语句。使用优先级使用优先级when语句必须仔细考虑。因为优先级语句必须仔细考虑。因为优先级when语语句太多的话,将使无优先级的句太多的话,将使无优先级的when语句根本没机会执行。语句根本没机会执行。如果一个优先级如果一个优先级when
16、语句在大部分时间里都为真,则它语句在大部分时间里都为真,则它将独占处理器时间。将独占处理器时间。华东理工大学自动化系华东理工大学自动化系()预定义事件关键字()预定义事件关键字flush_completes、offline、online、wink、io_changes、io_in_ready、io_out_ready、reset、timer_expires、io_update_occurs、msg_arrives、msg_completes、nv_update_fails、nv_update_succeeds等等。等等。预定义事件还可以作为子表达式放置在预定义事件还可以作为子表达式放置在if、
17、while、for语句语句的控制表达式中,这种方法称为的控制表达式中,这种方法称为直接事件处理。直接事件处理。例:例:mtimert;when(event)if(timer_expires(t)io_out(io_led,OFF);华东理工大学自动化系2.2 2.2 定时器定时器Neuron 可以使用两种类型的软件定时器对象:可以使用两种类型的软件定时器对象:毫秒定时器和秒定时器。毫秒定时器和秒定时器。毫秒定时器毫秒定时器提供一个计时范围为提供一个计时范围为164000毫秒的毫秒的定时器。定时器。秒定时器秒定时器提供一个计时范围为提供一个计时范围为 165535秒的定时秒的定时器。器。它们和它
18、们和Neuron芯片上两个硬件定时器计时器芯片上两个硬件定时器计时器无关,无关,由网络处理器实现(由网络处理器实现(1515个)个)。华东理工大学自动化系()定时器的定义定时器的定义mtimerrepeatingtimer-name=initial-value 毫秒定时器毫秒定时器stimerrepeatingtimer-name=initial-value秒定时器秒定时器repeating:为为可可选选项项,如如果果定定时时器器溢溢出出,定定时时器器将将自自动动开开始始重重新新计计时时。使使用用该该选选项项,即即使使应应用用不不能能立立即即响响应应该该终终止事件,精确的时间间隔也能够被保留。
19、止事件,精确的时间间隔也能够被保留。timer-name:为定时器指定的名字为定时器指定的名字init-value:为为可可选选项项,指指定定当当加加电电或或者者复复位位时时赋赋给给定定时时器的值。如果不提供该初始值,定时器的值被置为器的值。如果不提供该初始值,定时器的值被置为0。华东理工大学自动化系例stimerled_timer;/定义秒定时器定义秒定时器led_timerwhen(reset)led_timer=5;when(t=50)led_timer=0;/关闭秒定时器关闭秒定时器华东理工大学自动化系(2 2)时间溢出事件时间溢出事件语法:语法:timer_expires(定时器名定
20、时器名)定时器名:是可选项,由它来指定所要检查的具体的定时器。定时器名:是可选项,由它来指定所要检查的具体的定时器。如没有该选项,该事件是一个未加限定的如没有该选项,该事件是一个未加限定的timer_expires事件。事件。它与其它预定义事件不同的是,其它的某个挂起事件只为真它与其它预定义事件不同的是,其它的某个挂起事件只为真一次,而对未加限定的一次,而对未加限定的timer_expires事件,只要任何一个定事件,只要任何一个定时器已经终止,未加限定的时器已经终止,未加限定的timer_expires将一直保持为真。将一直保持为真。该事件只有当检测到特定的定时器终止事件时才能被清除该事件只
21、有当检测到特定的定时器终止事件时才能被清除stimerled_timer;when(timer_expires(led_timer)io_out(io_led,OFF);华东理工大学自动化系 如如果果程程序序中中有有多多个个定定时时器器,对对每每个个具具体体的的定定时时器器都都要作检查,以便这个终止事件被清除。例如:要作检查,以便这个终止事件被清除。例如:mtimerx;mtimery;mtimerz;when(timer_expires(x)when(timer_expires(y)when(timer_expires(z)华东理工大学自动化系另外也可采用如下的方法:另外也可采用如下的方法:
22、when(timer_expires)if(timer_expires(x)elseif(timer_expires(y)elseif(timer_expires(z).华东理工大学自动化系2.3 2.3 输入输出输入输出 对未定义的对未定义的I/OI/O引脚也就是不用的引脚,默认为引脚也就是不用的引脚,默认为无效状态,即高阻状态。如果引脚不用,应设计无效状态,即高阻状态。如果引脚不用,应设计上拉电阻,对上拉电阻,对IO4IO7可使用可使用enable_io_pullups编译指令,加上软件实现的上拉电阻。为避免使编译指令,加上软件实现的上拉电阻。为避免使用上拉电阻,用上拉电阻,可将不用的管脚
23、定义为输出管脚。可将不用的管脚定义为输出管脚。为实现为实现I/O,可使用内嵌的,可使用内嵌的I/O函数:函数:io_out()、io_in()、io_select()、io_select_dirction()、io_change_init()、io_set_clock()等。等。华东理工大学自动化系(1 1)I/OI/O对象的定义对象的定义说明一个说明一个I/O对象,完成了两件事:对象,完成了两件事:1在哪个或哪几个管脚上将实现什么类型的在哪个或哪几个管脚上将实现什么类型的I/O操作。操作。2将将I/O对象的名字和硬件连在一起。对象的名字和硬件连在一起。语法:语法:pintypeoptioni
24、o-object-name;pin:IO0IO10中的一个,同一个引脚可以出现在多个中的一个,同一个引脚可以出现在多个I/O对象定义中对象定义中type:I/O对象类型对象类型option:是可选的是可选的I/O参数,不同参数,不同I/O对象有不同的选项对象有不同的选项华东理工大学自动化系(2(2)定义)定义I/OI/O对象的指导原则对象的指导原则(1)最多定义最多定义16个个I/O对象对象(2)Neurowire、I2C、磁卡、磁迹、磁卡、磁迹1以及串行以及串行I/O对象是互对象是互斥的。在一个程序中可以说明一个或多个该组中的某一斥的。在一个程序中可以说明一个或多个该组中的某一种种I/O对象
25、。对象。(3)(3)定时器定时器/计数器对象定义了的引脚不能再定义计数器对象定义了的引脚不能再定义 为移位为移位I/O对象。对象。(4)定时器定时器/计数器计数器1可以有多到可以有多到4个的输入对象供选择(多个的输入对象供选择(多路复用输入对象)。路复用输入对象)。(5)(5)并行和并行和muxbusI/O对象要求使用所有的对象要求使用所有的I/O管脚,任何管脚,任何一个这种类型的一个这种类型的I/O对象被说明后,就不能再说明其它对象被说明后,就不能再说明其它I/O对象类型。对象类型。华东理工大学自动化系(3 3)I/OI/O对象的重叠使用对象的重叠使用可能同一引脚要定义为多种可能同一引脚要定
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 现场总线 NeuronC 语言 IO 对象
限制150内