Ошибка Simulink S-функция Экранированный символ \ D не действителен - PullRequest
0 голосов
/ 28 августа 2018

В последнее время я получаю странную ошибку в Simulink, о которой не могу найти никакой информации.

версия Matlab: 2018a ОС: Windows 10

Error

gpio_in.c - это код для s-функции, созданный с помощью построителя s-функций. Мой собственный код находится в соответствующем файле оболочки gpio_in_wrapper.c . Конструктор s-функции настроен на сохранение только кода, а не на его сборку. Я использую этот файл для взаимодействия с оборудованием при последующем развертывании через кодировщик Simulink.

Всякий раз, когда я пытаюсь запустить симуляцию, Simulink представляет мне вышеуказанную ошибку, и я понятия не имею, в чем может быть проблема. Мне кажется, что D: это начало пути к файлу, особенно если учесть вышеупомянутое предупреждение, которое гласит \D и, вероятно, является началом каталога моделей, который D:\Dateien\Git_Repositories\BMaS_Neu\Simulink.

Содержимое gpio_in_wrapper.c в соответствии с предложением UnbearableLightness

/*
 * 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 */
}

Буду признателен за каждый ваш намек.

1 Ответ

0 голосов
/ 29 августа 2018

Я думаю, что ваш код обращается к чему-то по пути на диске D. Например, если имя пути 'D:\Somedirectory\Somefile', иногда оно обрабатывает '\ S' как escape-последовательность и выдает ошибку. Решением для этого было бы заменить '\' на '\\', т.е. 'D:\\Somedirectory\\Somefile'.

В соответствии с ошибкой, она вышла из \ D, что означает, что первая буква каталога или имени файла начинается с 'D'.

Как отметил Крис Луенго в своем комментарии, вы должны проверить m-файл, в котором вы можете найти часть кода, используя путь.
Также есть ли текст ошибки в командном окне?

...