主要内容

可重入代码

可重入代码是多个程序可以同时使用的可重用编程例程。使用多线程处理并发事件的操作系统和其他系统软件使用可重入代码。在并发环境中,多个线程或进程可以尝试同时读写静态数据。因此,共享使用持久或静态数据的代码是很困难的。可重入代码不包含静态数据。调用程序维护它们的状态变量并将它们传递给函数。因此,任何数量的线程或进程都可以共享一个可重入例程的副本。

生成可重入代码:

  • 在多线程环境中部署代码。

  • 使用属于不同进程或线程的持久数据的算法。

  • 编译使用过大而无法放入堆栈的函数变量的代码。

如果不指定可重入代码,MATLAB®编码器™生成代码,使用静态分配的内存:

  • 函数变量太大,无法放入堆栈中

  • 全局变量

  • 持续的变量

如果生成的代码对这些变量使用静态内存分配,则无法在需要可重入代码的环境中部署生成的代码。如果不能调整静态内存分配大小,生成的代码可能会导致静态内存大小溢出。

当您生成可重入代码时,MATLAB编码器创建输入数据结构:

  • 函数变量太大,无法放入堆栈中

  • 持续的变量

  • 全局变量

然后可以动态地为这些输入结构分配内存。使用动态内存分配意味着您可以在可重入环境中部署代码。

要部署生成的代码,必须创建主要功能:

  • 包含头文件primary_function_name. h。

  • 为全局内存分配结构分配内存primary_function_nameStackData

  • 如果算法使用持久或全局数据,则为全局结构分配内存primary_function_namePersistentData

  • 调用这些函数:

    • primary_function_name_initialize

    • primary_function_name

    • primary_function_name_terminate

当您将MATLAB函数转换为C/ c++库函数或C/ c++可执行文件时,MATLAB编码器生成两个内务功能。在调用生成的C/ c++函数的代码中调用这些内务处理函数。有关更多信息,请参见生成部署代码

相关的话题