从 MATLAB 代码生成代码的存储类
如果您有 Embedded Coder® 许可证,您可以使用存储类来控制生成的 C/C++ 代码中全局变量的声明和定义。
在代码生成的上下文中,存储类是一种规范,它决定了生成的代码中变量的声明和定义。对于代码生成,术语存储类与 C 语言术语存储类说明符不同。
存储类帮助您将生成的代码与外部代码集成。您可以使生成的变量对外部代码可见。您还可以使外部代码中声明的变量对生成的代码可见。对于从 MATLAB® 代码生成代码,您只能使用带有全局变量的存储类。存储类别决定:
全局变量声明和定义的文件放置。
全局变量是从外部代码导入还是导出供外部代码使用。
要将存储类分配给全局变量,请在 MATLAB 代码中使用 coder.storageClass
函数。仅当您使用 Embedded Coder 工程或配置对象生成 C/C++ 库或可执行文件时,代码生成器才会识别 coder.storageClass
调用。
coder.storageClass
的语法是:
coder.storageClass(global_name, storage_class)
global_name
是全局变量的名称,指定为字符向量。global_name
必须是编译时常量。
storage_class
可以是下列值之一。
存储类 | 描述 |
---|---|
'ExportedGlobal' |
|
'ExportedDefine' | 使用头文件 |
'ImportedExtern' | 将变量声明为头文件 |
'ImportedExternPointer' | 将变量声明为头文件 |
存储类别具有以下要求和限制:
在声明全局变量的函数中将存储类分配给全局变量。您不必在多个函数中分配存储类。
为全局变量分配存储类别后,就不能为该全局变量分配不同的存储类别。
您不能为常量全局变量分配存储类。
具有
ExportedDefine
存储类的全局变量必须是标量,但不能是复数或多字标量。全局变量在代码中只能读取而不能写入。
如果没有为全局变量分配存储类,则除了声明位置之外,该变量的行为就像它具有 'ExportedGlobal'
存储类一样。对于 'ExportedGlobal'
存储类,全局变量在文件
中声明。当全局变量没有存储类别时,该变量在文件 entry_point_name
.h
中声明。entry_point_name
_data.h