В настоящее время я работаю над pid-регулятором для школьного проекта. Поскольку коронавирус закрыл школу, мы не можем получить оборудование для тестирования. Итак, я хочу смоделировать ПИД-регулятор на микропроцессоре (PSoC5LP). Итак, я реализую функцию, которая возвращает ступенчатую реакцию выбранного двигателя постоянного тока.
Когда я нахожу вывод передаточной функции «(-3,47 * exp (-6,36 * с) + 3,47))», я получаю правильный результат, если я определяю значение «s» вручную в коде. Но когда я устанавливаю s для увеличения в коде «неопределенная ссылка на «exp».
Кажется, проблема в том, что я не могу запустить exp в цикле, увеличивая его. попробовал это в другом проекте, где единственное, что происходит, это то, что цикл выполняется 10 раз и выводит exp() с количеством раз, когда цикл выполнялся (не работает)
float step_respons(){
double s = 0.1;
snprintf(outpurBuffer, sizeof(outpurBuffer), "%f \r\n", (-3.47*exp(-6.36*s)+3.47));
pc_uart_PutString(outpurBuffer);
snprintf(outpurBuffer, sizeof(outpurBuffer), "%f \r\n", (-3.47*exp(-6.36*1)+3.47));
pc_uart_PutString(outpurBuffer);
//These works just fine
pc_uart_PutString("Loop:\r\n");
for(s = 0.1; s < 2; s++){
snprintf(outpurBuffer, sizeof(outpurBuffer), "%f %f \r\n", s,(-3.47*exp(-6.36*s)+3.47));
pc_uart_PutString(outpurBuffer);
//this does not work (if "s" is changed with a number it works fine.)
};
return 0;
};
Так что это работает, если я выбираю S вручную в цикле, но если он увеличивается, он останавливается. Я пытался использовать другую переменную и увеличивать ее, и она все еще не работает.
for(s = 0.1; s < 2; s++){
snprintf(outpurBuffer, sizeof(outpurBuffer), "%f %f \r\n", s,(-3.47*exp(-6.36*s)+3.47));
pc_uart_PutString(outpurBuffer);
};
не работает
for(s = 0.1; s < 2; s++){
snprintf(outpurBuffer, sizeof(outpurBuffer), "%f %f \r\n", s,(-3.47*exp(-6.36*1)+3.47));
pc_uart_PutString(outpurBuffer);
};
работает, но приращение результата не выполняется. Как вы можете видеть, единственные изменения, сделанные в цикле, - это «s», которые были определены как значение
double temp = 0.5;
for(s = 0.1; s < 2; s++){
snprintf(outpurBuffer, sizeof(outpurBuffer), "%f %f \r\n", s,(-3.47*exp(-6.36*temp)+3.47));
pc_uart_PutString(outpurBuffer);
};
это работает
double temp = 0.5;
for(s = 0.1; s < 2; s++){
snprintf(outpurBuffer, sizeof(outpurBuffer), "%f %f \r\n", s,(-3.47*exp(-6.36*temp)+3.47));
pc_uart_PutString(outpurBuffer);
temp += 0.5;
};
не Это ошибка: Build error: undefined reference to 'exp'
Журнал из вывода компилятора
Вероятно, вы не подключаете библиотеку, включающую функцию exp().