函数编辑器
BUSMASTER 可以作为 CAN 总线上的可编程节点工作。用户可以使用函数编辑器对不同的事件处理程序进行编程。编程语言为 C。
支持五种类型的事件处理程序。消息处理程序 定时器处理程序 按键处理程序 错误处理程序 DLL 处理程序
这些函数处理程序在构建并加载后,将在以下情况执行:接收到消息时。时间间隔到达时。按下按键时。检测到错误或错误状态改变时。加载/卸载 DLL 时。
用户在编写事件处理程序时,还可以包含头文件名、添加全局变量和实用程序函数。所有这些函数都可以编辑并保存在扩展名为 “.c” 的文件中。源文件可以构建为 DLL。此 DLL 可以被动态加载。
函数编辑器中有三个窗格,如下所示 左窗格:将被称为窗格 1。右上窗格:将被称为窗格 2。右下窗格:将被称为窗格 3。
窗格 1 显示函数列表、包含的头文件和定义的全局变量。窗格 2 显示源文件的内容。通过窗格 3,用户可以编辑所选函数的函数体。

函数编辑器的常规访问
Section titled “函数编辑器的常规访问”转到 CAN –> 节点仿真 –> 配置 以打开 配置仿真系统 窗口。在左窗格中右键单击 CAN Bus 并选择 新建仿真系统 或 添加仿真系统 。然后选择 “sim” 文件。
右键单击新的仿真系统并选择 添加节点 。该名称也将用作生成的 DLL 的基本名称。节点详细信息 将显示在右窗格中。### 创建新函数
按照上一章“函数编辑器的常规访问”中的说明进行操作。
在右窗格中的 文件详细信息 下选择 添加新文件… 以向节点添加新函数。函数编辑器将自动打开。### 编辑现有函数
按照上一章“函数编辑器的常规访问”中的说明进行操作。
在右窗格中的 文件详细信息 下选择 编辑文件… 以编辑节点的现有函数。### 包含头文件
用户在编写事件处理程序时可以包含头文件名。为此,请遵循以下步骤:在窗格 1 中选择 Include Headers 类别并右键单击。弹出一个弹出菜单。选择 Add。出现一个对话框。单击 Browse 按钮选择所需的头文件名,然后单击 OK 按钮。所选的头文件名将添加到窗格 2 的源文件中,同时也添加到窗格 1 的 Include Headers 类别下。### 编辑包含的头文件名
用户可以编辑头文件的名称,为此请遵循以下步骤 在窗格 1 中选择 Include Header 类别下要编辑的 Include Header 文件名并右键单击。将显示一个弹出菜单。选择 Edit。将显示一个对话框。单击 Browse 按钮选择所需的头文件,然后单击 OK 按钮。
所选的头文件将替换窗格 2 源文件中以及窗格 1 的 Include Headers 类别下的先前的头文件。### 删除处理程序
用户可以在打开以进行编辑的源文件中删除头文件、消息处理程序。定时器处理程序、按键处理程序、错误处理程序、DLL 处理程序和实用程序函数,为此请遵循以下步骤:在窗格 1 中选择要删除的项目并右键单击。将显示一个弹出菜单。选择 Delete。显示确认消息。选择 Yes。
所选项目的定义将从窗格 2 的源文件以及窗格 1 中删除。### 添加消息处理程序
- 在窗格 1 中选择 Message Handlers 类别并右键单击。
- 将显示一个弹出菜单。
- 在选择 Add 菜单时。会弹出如下所示的对话框。

- 从此对话框中可以选择不同类型的消息处理程序。支持的不同类型的消息处理程序有 基于消息名称的消息处理程序。基于消息 ID 的消息处理程序。基于消息 ID 范围的消息处理程序。用于所有接收到的消息的消息处理程序。
可以使用单选按钮选择消息处理程序的类型。要添加基于消息名称的处理程序,相应的消息必须在导入的数据库中可用。可以通过在选择消息处理程序后单击 Apply 按钮从此对话框添加多个消息。
函数定义将添加到窗格 2 的源文件中,并且原型将添加到窗格 1 的 Message Handlers 类别下。### 添加定时器处理程序
- 在窗格 1 中选择 Timer Handlers 类别并右键单击。
- 将显示一个弹出菜单。
- 选择 Add。出现一个对话框。
- 输入定时器处理程序名称,例如 “Time_One”,以及以毫秒为单位的定时器值。
- 选择 OK 按钮。
- 函数定义将自动添加到窗格 2 的源文件中,并且原型将添加到窗格 1 的 Timer Handlers 类别下。
Note: 在定时器处理程序内部添加 Sleep 函数可能会对应用程序产生不利影响。在循环模式下最多可以同时运行 16 个定时器。超过 16 个的任何定时器都将无法启动。### 添加按键处理程序
- 在窗格 1 中选择 Key Handlers 类别并右键单击。
- 将显示一个弹出菜单。
- 选择 Add。出现一个对话框,要求用户按下一个键。
- 按下用户想要为其编写处理程序的键。相同的键将显示在对话框中。
- 选择 OK 按钮或 Apply 按钮(如果要从同一对话框添加更多按键处理程序)。
函数定义将自动添加到窗格 2 的源文件中,并且原型将添加到窗格 1 的 Key Handlers 类别下。### 添加错误处理程序
- 在窗格 1 中选择 Error Handlers 类别并右键单击。
- 将显示一个弹出菜单。
- 选择 Add。弹出如下所示的对话框,从此对话框中选择要由程序处理的错误处理程序类型,然后单击 OK 按钮。

函数定义将自动添加到窗格 2 的源文件中,并且原型将添加到窗格 1 的 Error Handlers 类别下。### 添加 DLL 处理程序
DLL 处理程序在加载 DLL 或卸载 DLL 时被调用。添加 DLL 处理程序的过程与添加错误处理程序的过程类似。### 添加实用程序函数
- 在窗格 1 中选择 Utility Functions 类别并右键单击。
- 弹出一个弹出菜单。
- 选择 Add。出现一个对话框。
- 可以从组合框中选择实用程序函数的返回类型,或者直接输入。组合框将包含基本数据类型和数据库消息结构名称。
- 在编辑控件中输入函数原型,例如 “Func_One( int a, int b )”。
- 选择 OK 按钮。
函数定义将自动添加到窗格 2 的源文件中,并且原型将添加到窗格 1 的 Utility Functions 类别下。### 全局变量
要添加/删除/修改全局变量,请遵循以下步骤。
- 在窗格 1 中选择 Global Variables 类别并双击。
- 窗格 3 将变为可编辑状态并显示全局变量块。
- 更改此块以添加/删除/修改全局变量。
变量声明将自动添加到窗格 2 的源文件中。
Note: 使用全局变量块来使用宏、结构或联合定义。此块中给出的变量和定义的作用域遍及整个程序。### 编辑函数体
用户可以通过双击窗格 1 中显示的函数原型来编辑任何函数体。双击函数原型时,函数体将显示在窗格 3 中并准备进行编辑。### 消息类型的变量
BUSMASTER 为数据库中定义的消息定义了结构。用户可以在编程时使用这些结构。请按照以下步骤添加消息类型的变量 编辑要添加数据库消息名称的函数。(参考:编辑函数体一节)在窗格 3 中右键单击。显示一个弹出菜单。选择 Insert Message。显示一个对话框,消息列表下包含所有数据库消息。从列表中选择一个消息。选中对话框中的复选框选项。单击 Select 按钮。
所选的消息变量将显示在窗格 3 中,并且窗格 2 中的内容也会同步更新。### 插入消息名称
用户可以添加消息结构的标记,这可以用于定义变量。请按照以下步骤将消息结构标记插入到函数中。编辑要添加数据库消息名称的函数。(参考:编辑函数体一节)在窗格 3 中右键单击。显示一个弹出菜单。选择 Insert Message。显示一个对话框,消息列表下包含所有数据库消息。从列表中选择一个消息并单击 Select 按钮。所选的消息将显示在窗格 3 中,并且窗格 2 中的内容也会同步更新。### 插入信号名称
用户可以在编程时使用信号名称。信号名称必须与相应的消息变量结合使用。它是消息结构的成员。请按照以下步骤将信号名称插入到函数中。编辑要添加信号名称的函数。(参考:编辑函数体一节edit_function_body)在窗格 3 中右键单击。显示一个弹出菜单。选择 Insert Signal。显示一个对话框,消息列表下包含所有数据库消息。从列表中选择一个消息。信号列表下将显示一个信号列表。选择一个信号并单击 Select 按钮。所选的信号将显示在窗格 3 中,并且窗格 2 中的内容也会同步更新。### 插入函数
BUSMASTER 提供 API 函数,可以在编程时使用。这些函数可用于与 BUSMASTER 应用程序进行交互。请按照以下步骤插入函数 编辑要添加原型的函数。(参考:编辑函数体)在窗格 3 中右键单击。显示一个弹出菜单。选择 Insert Function。显示一个对话框,其中包含一组函数原型。(API 列表)从列表中选择所需的函数原型并单击 OK 按钮。所选的函数原型将显示在窗格 3 中,并且窗格 2 中的内容也会同步更新。
权威来源: BUSMASTER DITA help source function_editor.dita, compiled into BUSMASTER.CHM with the application.