Simulink错误S函数转义字符\ D无效

问题描述 投票:2回答:1

我最近在Simulink中遇到这个奇怪的错误,我找不到任何信息。

Matlab版本:2018a操作系统:Windows 10

Error

gpio_in.c是使用s-function构建器生成的s函数的代码。我自己的代码位于相关的包装文件gpio_in_wrapper.c中。 s-function构建器设置为仅保存代码而不是构建它。我通过Simulink编码器在以后的部署中使用此文件进行硬件交互。

每当我尝试开始模拟时,Simulink向我提出上述错误,我不知道问题可能是什么。它看起来像D:是文件路径的开头,特别是如果你考虑上面的警告\D并且可能是模型目录的开头是D:\Dateien\Git_Repositories\BMaS_Neu\Simulink

UnbearableLightness建议的gpio_in_wrapper.c的内容

/*
 * Include Files
 *
 */
#if defined(MATLAB_MEX_FILE)
#include "tmwtypes.h"
#include "simstruc_types.h"
#else
#include "rtwtypes.h"
#endif

/* %%%-SFUNWIZ_wrapper_includes_Changes_BEGIN --- EDIT HERE TO _END */
#include <gpio.h>
/* %%%-SFUNWIZ_wrapper_includes_Changes_END --- EDIT HERE TO _BEGIN */
#define u_width 1
#define y_width 1

/*
 * Create external references here.  
 *
 */
/* %%%-SFUNWIZ_wrapper_externs_Changes_BEGIN --- EDIT HERE TO _END */

/* %%%-SFUNWIZ_wrapper_externs_Changes_END --- EDIT HERE TO _BEGIN */

/*
 * Output function
 *
 */
void gpio_in_Outputs_wrapper(const int32_T *port_popupvalue,
                             const int32_T *pin_number,
                             boolean_T     *gpio_in)
{
    /* %%%-SFUNWIZ_wrapper_Outputs_Changes_BEGIN --- EDIT HERE TO _END */
    if (*port_popupvalue == 1) {
        *gpio_in = HAL_GPIO_ReadPin(GPIOA, (1 << *pin_number));
    } else if (*port_popupvalue == 2) {
        *gpio_in = HAL_GPIO_ReadPin(GPIOB, (1 << *pin_number));
    } else if (*port_popupvalue == 3) {
        *gpio_in = HAL_GPIO_ReadPin(GPIOC, (1 << *pin_number));
    } else if (*port_popupvalue == 4) {
        *gpio_in = HAL_GPIO_ReadPin(GPIOD, (1 << *pin_number));
    } else if (*port_popupvalue == 5) {
        *gpio_in = HAL_GPIO_ReadPin(GPIOE, (1 << *pin_number));
    } else if (*port_popupvalue == 6) {
        *gpio_in = HAL_GPIO_ReadPin(GPIOF, (1 << *pin_number));
    } else if (*port_popupvalue == 7) {
       *gpio_in = HAL_GPIO_ReadPin(GPIOG, (1 << *pin_number));
    } else if (*port_popupvalue == 8) {
       *gpio_in = HAL_GPIO_ReadPin(GPIOH, (1 << *pin_number));
    } else if (*port_popupvalue == 9) {
       *gpio_in = HAL_GPIO_ReadPin(GPIOI, (1 << *pin_number));
    }
    /* %%%-SFUNWIZ_wrapper_Outputs_Changes_END --- EDIT HERE TO _BEGIN */
}

我很欣赏你的每一个暗示。

matlab simulink
1个回答
1
投票

我认为正在发生的事情是您的代码正在从D驱动器上的路径访问某些内容。例如,如果路径名是'D:\Somedirectory\Somefile',有时它会将'\ S'视为转义序列并抛出错误。对此的解决方案是将'\'替换为'\\',即'D:\\Somedirectory\\Somefile'

根据错误,它已经转义'\ D',这意味着目录或文件名的第一个字母以'D'开头。

正如Cris Luengo在评论中提到的,你应该检查m文件,你可能会找到使用路径的代码部分。 命令窗口上还有错误文本吗?

© www.soinside.com 2019 - 2024. All rights reserved.