У меня есть вопрос новичка. Я новичок в программировании и успешно сгенерировал свой первый C-код из Simulink. Но я не понимаю, как вход и выход проходят функцию. Как работает эта функция? Он не имеет аргументов и возвращаемых значений, но обеспечивает расчет. Как основная программа взаимодействует с этой функцией?
firstTest.c генерирует функции инициализации, шага и завершения. Шаг - это расчет.
// firstTest.c
void firstTest_step(void)
{
Test_Y.Out = 2.0 + Test_U.In;
}
firstTest.h генерирует соответствующие файлы заголовков для firstTest.c
// firstTest.h
extern void firstTest_step(void);
Мой план - как-то использовать эту функциональность в моем собственном приложении на c #. Решение, вероятно, будет содержать pinvoke для обработки неуправляемого кода. Поскольку я не понимаю эту функцию, я попытался немного поиграть и обнаружил, что можно настроить функцию шага, чтобы генератор кода создавал функцию шага из той же модели так, чтобы я видел аргументы с которым я могу работать! (Я даже не знаю, если это необходимо?). Итак, второй тест выглядит так:
// secondTest.c
void secondTest_step(real_T In, real_T *Out)
{
*Out = 2.0 + In;
}
Сгенерированный заголовочный файл для этого:
// secondTest.h
extern void secondTest_step(real_T In, real_T *Out);
Теперь Simulink предоставляет возможность генерировать C DLL. Так что это то, что я попытался успешно, мне нужно было только изменить заголовок с помощью __declspec в соответствии с документацией mathworks / simulink. Прямо сейчас мой код выглядит так:
// The DLL in which __declspec(dllexport) is a custom modification
__declspec(dllexport) void secondTest(real_T In, real_T *Out)
Является ли secondTest правильным подходом для обмена данными с внешним приложением, которое хочет использовать функциональность простого шага (out = in + 2)? Моя самая большая путаница все еще связана с функцией void-void. Я могу понять, что вы можете передавать аргументы через функцию с помощью указателей, а не «нормальных» аргументов. Но я не вижу, как работает сгенерированная функция firstTest.c? У него нет указателей и значений в качестве аргументов, только вычисления без возвращаемого значения.