目录
2.00 目录与文件
可以在以下目录中找到uC/Modbus的代码。
2.01 目录与文件,独立于目标的源文件
\Micrium\Software\uC-Modbus\Source
该目录包含UART,OS以及与CPU无关的源代码。目录中包含如下文件:
mb.c 与Master/Slave 无关的代码
mb.h
mb_def.h Modbus 定义
mb_util.c ASCII 转换程序
mbs_core.c Slave 专用代码
mbm_core.c Master 专用代码
2.02 目录与文件,RTOS接口
\Micrium\Software\uC-Modbus\OS\uCOS-II
\Micrium\Software\uC-Modbus\OS\uCOS-III
这些目录包含uC/OS-II和uC/OS-III RTOS的接口代码,包含如下文件:
mb_os.c (详见 7.00)
如果需要将uC/Modbus接入不同的RTOS,您需要将mb_os.c文件放入到单独的目录。也就是所有的RTOS接口文件都应该命名为mb_os.c,但是您使用的实际RTOS的细节将被放在不同的目录中。当创建产品时,您只需要选择一个RTOS接口——一个特定于您的RTOS。
\Micrium\Software\uC-Modbus\OS\None
该目录包含uC/Modbus-S的代码,工作在单线程,不使用RTOS。
mb_os.c (详见 8.00)
mb_os.h (详见 8.00)
2.03 目录与文件,产品专用文件
???\Product
该目录包含您的应用代码。需要提供以下文件:
mb_cfg.h (详见 4.00)
mb_data.c (详见 5.00)
mb_bsp.c (详见 6.00)
2.04 目录和文件,CPU与编译特定的文件
\Micrium\Software\uC-CPU\<CPU-type>\<compiler>
该目录包含CPU与所用编译器的信息。需要指定的三个文件:
cpu.h
cpu_a.asm
最好是“修改”现有文件,而不是从头开始创建新文件,保证不会遗漏任何内容。uC/Modbus提供了这些文件的示例。
cpu.h
该文件定义了CPU/编译器特定的数据类型。如下示例代码的数据类型被uC/Modbus使用,使用ARM CPU,编译器为IAR Embedded Workbench。
typedef void CPU_VOID;
typedef unsigned char CPU_CHAR;
typedef unsigned char CPU_BOOLEAN;
typedef unsigned char CPU_INT08U;
typedef signed char CPU_INT08S;
typedef unsigned short CPU_INT16U;
typedef signed short CPU_INT16S;
typedef unsigned int CPU_INT32U;
typedef signed int CPU_INT32S;
typedef float CPU_FP32;
typedef double CPU_FP64;
typedef void (*CPU_FNCT_PTR)(void *);
您还需要指定要使用的“对齐”类型以及处理器的“字节顺序”:
#define CPU_CFG_ALIGN_TYPE CPU_ALIGN_TYPE_32
#define CPU_CFG_ENDIAN_TYPE CPU_ENDIAN_TYPE_LITTLE
还需要定义代码来禁止或使能中断。事实上,禁用中断的代码应该先“保存”中断启用设置的状态,然后再禁用中断。这是由一个名为CPU_SR_Save()的汇编语言函数来完成的。代码要重新使能中断,只需要恢复CPU_SR_Save()保存的状态即可。由一个名为CPU_SR_Restore()的函数实现。中断启用设置的状态存储在CPU_SR类型的局部变量中,如下所示。
typedef CPU_INT32U CPU_SR;
#define CPU_CRITICAL_ENTER() {cpu_sr = CPU_SR_Save();}
#define CPU_CRITICAL_EXIT() {CPU_SR_Restore(cpu_sr);}
您需要注意,uC/Modbus实际上使用CPU_CRITICAL_ENTER()和CPU_CRITICAL_EXITCPU_CRITICAL_ENTER()分别禁用和重新启用中断。
cpu_a.asm
该文件包含CPU_SR_Save()与CPU_SR_Restore()的代码。这个代码通常是用汇编语言编写的,因为它通常访问那些不能从C语言中访问的CPU寄存器。当然,如果您的编译器允许通过C语言操作CPU寄存器,您可以直接用C语实现CPU_SR_Save()和CPU_SR_Restore(),并将这个文件命名为cpu.c,而不是cpu_a.asm。