Neuron C语言是专门为神经元芯片设计的编程语言,它以ANSI C为基础,并同时加入通信、事件调度、分布数据对象和I/O功能,是开发LonWorks应用的有力工具。
1.时间驱动
神经元芯片的任务调度采用事件调度方式,当一个给定的条件变为真时,与该条件相关联的一段代码称为任务(task)被执行。调度程序允许自定义任务,该任务作为特定事件的结果而被运行,如输入引脚状态的改变,接收一个网络变量的新值或定时器的终止,也可以指定某些任务作为具有优先级的任务,以便它们能得到优先服务。
事件通过when语句来定义。一个when语句包含一个表达式,当表达式为真时,则表达式后面的任务(task)被执行。
定义在when语句中的事件一般分为两种类型:预定义事件和用户定义事件。预定义事件,使用编译程序内部固有的关键字,预定义事件包括输入引脚状态的改变、网络变量的改变、定时器终止和报文的接收等。用户定义事件,可以使用任何有效的Neuron C表达式,用户定义事件可以包含赋值和函数调用。调用复杂函数时,一定要谨慎,因为它们影响程序中所有其他事件的响应时间,在用户定义的事件内,只能对全局变量赋值。
2.定时器对象
Neuron C语言提供两种定时器对象:毫秒定时器和秒定时器。毫秒定时器的定时范围为1~64000ms,秒定时器的定时范围为1~65535s。定时器对象与神经元芯片中的两个硬件定时器/计数器不同,它是由软件实现的。在一个Neuron C应用程序中,最多可以定义15个定时器。
3.网络变量
网络变量是一个节点中的一个对象,可以与一个或多个其他节点的网络变量相连接。一个节点的网络变量,从网络的观点定义了它的输入和输出,同时允许在分布式应用中共享数据。无论何时,如果一个程序更新了它的输出网络变量的值,则该值通过网络传给所有的与该输出变量相连接的其他节点的输入网络变量。
使用网络变量具有以下优点:网络变量的传送是通过LonTalk协议来完成的,对用户来说是透明的,应用程序开发者不必关心网络变量传送的目标地址、打包拆包、报文缓存区、请求、响应、重发等低级网络操作,因此网络变量大大简化了开发和安装分布系统的过程。(www.xing528.com)
在神经元芯片上运行的Neuron C应用程序,最多可声明62个网络变量。对于将神经元芯片作为通信协处理器的、基于主机(Host-base)的节点,网络变量转移到主处理器中,也可以转移到神经元芯片的E2PROM中,网络变量个数可达4096个。
网络变量还有另一个限制是,其长度不能超过31字节,对于超过31字节的数据可以使用显式报文。
4.显式报文
每一种类型的网络变量的数据长度都是固定的,任何一种类型的网络变量的长度不能超过31B;而显式报文恰恰相反,它的数据长度是可变的。相同的报文码在一个应用中可能只包含1B的数据,而在另一个应用中包含25B的数据。在显式报文中,数据的最大长度为228B。因此,在数据量较大的应用中,使用显式报文比使用网络变量更有效。
Neuron C预定义了两个对象msg_out()和msg_in()来表示发送和接收的显式报文。
5.I/O对象的编程
神经元芯片有各种各样用于实现输入和输出函数的内部固有的接口选项。在实现I/O功能之前,用户必须首先说明用以监测和控制神经元芯片的11个I/O引脚的I/O对象。在默认状态下,任何没有说明的引脚是不被使用的,因此也是非活动的。在非活动状态,引脚处于高阻抗状态,可通过编程将应用I/O设定为34种不同的对象,允许用户根据需要灵活加以配置,从而方便了实际应用。按I/O对象的I/O方向来分,有输入、输出和双向三大类;按I/O对象的类型来分,有直接I/O对象、定时器/计数器I/O对象、串行I/O对象、并行I/O对象等。
为实现I/O功能,必须使用内部I/O函数,io_in()、io_out()、io_select()、io_change_init()、io_set_direction()、io_set_clock()和io_out_request()函数用于实现并行I/O对象的I/O。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。