我最近在Simulink中遇到这个奇怪的错误,我找不到任何信息。
Matlab版本:2018a操作系统:Windows 10
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 */
}
我很欣赏你的每一个暗示。
我认为正在发生的事情是您的代码正在从D驱动器上的路径访问某些内容。例如,如果路径名是'D:\Somedirectory\Somefile'
,有时它会将'\ S'视为转义序列并抛出错误。对此的解决方案是将'\'替换为'\\',即'D:\\Somedirectory\\Somefile'
。
根据错误,它已经转义'\ D',这意味着目录或文件名的第一个字母以'D'开头。
正如Cris Luengo在评论中提到的,你应该检查m文件,你可能会找到使用路径的代码部分。 命令窗口上还有错误文本吗?