В настоящее время я работаю над регулятором pid для школьного проекта. Так как корона закрыла школу, мы не можем получить какое-либо оборудование для тестирования. Поэтому я хочу смоделировать ПИД-регулятор на микропроцессоре (PSoC5LP). Поэтому я реализую функцию, которая возвращает пошаговую характеристику выбранного двигателя d c.
Когда я нахожу выход функции передачи "(-3.47 * exp (-6.36 * s) + 3.47)) «Я получаю правильный результат, если я определю значение« s »вручную в коде. Но когда я устанавливаю s для увеличения в коде "undefined reference to" exp ".
Проблема, похоже, заключается в том, что я не могу запустить exp в al oop при его увеличении. Пробовал в другом проект, в котором происходит только то, что al oop проходит 10 раз и печатает exp () с nr раз, когда l oop запустил (не работает)
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 вручную в l oop, но если его увеличивают, он останавливается. Я пытался использовать другую переменную и увеличивать его, но он все еще не работает
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);
};
работает, но увеличение результата не выполняется. Как вы можете видеть, единственные изменения, сделанные в l oop, это то, что "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'
Журнал с выходных данных компилятора
------ --------- Сборка начата: 28.04.2020 01:34:42 Проект: Plotterkode, Конфигурация: ARM G CC 5.4-2016-q2-update Отладка - ------------- Шаг генерации кода обновлен. Этап компиляции обновлен, никакой работы не требуется. arm-none-eabi-ar.exe -rs. \ CortexM3 \ ARM_GCC_541 \ Debug \ Plotterkode.a. \ CortexM3 \ ARM_GCC_541 \ Debug \ cy_em_eeprom.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ CyDma c .o. \ ARM_GCC_541 \ Debug \ CyFla sh .o. \ CortexM3 \ ARM_GCC_541 \ Debug \ CyLib.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ cyPm.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ CySp * 1036. \ ARM_GCC_541 \ Debug \ cyutils.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ pc_uart.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ pc_uart_PM.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ pc_u_t_MB .o. \ CortexM3 \ ARM_GCC_541 \ Debug \ pc_uart_IntClock.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ isr_pc_uart.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ Pin_adc_input.o. \ CortexMO \ M \ M \ M \ M \ M \ M \ M \ M \ M \ M \ MX \ M \ M \ M \ M \ MC \ M \ M \ M \ MC3 ARM_GCC_541 \ Debug \ MOSI.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ SCLK.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ pot_adc_sar.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ pot_adc. o. \ CortexM3 \ ARM_GCC_541 \ Debug \ ui_spi.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ ui_spi_PM.o. \ CortexM3 \ ARM_GCC_54 1 \ Debug \ ui_spi_INT.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ pot_adc_sar_IRQ.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ pot_adc_sar_theACLK.o. \ CortexM3 \ ARM_GCC_541 \ \ \ \ \ \ \ \ \ \ _ \\\; О. \ Debug \ pin_enable.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ pin_border.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ isr_border.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ pin_led.o. \ CortexM3 \54_go . \ CortexM3 \ ARM_GCC_541 \ Debug \ pin_goal_right.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ pin_goal_left.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ isr_goal_right.o. \ CortexM3 \ AR__ \ \ \ __1 Debug \ AMux.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ CyBootAsmGnu.o arm-none-eabi-ar.exe: создание. \ CortexM3 \ ARM_GCC_541 \ Debug \ Plotterkode.a arm-none-eabi-g cc .exe -Wl, - start-group -o C: \ Users \ Vikto \ Desktop \ plottercode \ Plotterkode.cydsn \ CortexM3 \ ARM_GCC_541 \ Debug \ Plotterkode.elf. \ CortexM3 \ ARM_GCC_541 \ Debug \ main.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ cyfitter_cfg.o. \ CortexM3 \54 \ cy.GD.CortexM3 \54. ARM_GCC_541 \ Debug \ Cm3Start.o. \ CortexM3 \ ARM_GCC_541 \ Debug \ Plotterkode.a "C: \ Program Files (x86) \ Cypress \ PSo C Creator \ 4. 2 \ PSo C Creator \ psoc \ content \ cycomponentlibrary \ CyComponentLibrary.cylib \ CortexM3 \ ARM_GCC_541 \ Debug \ CyComponentLibrary.a "-mcpu = cortex-m3 -mthumb -L Generated_Source \ PSoCM3,. \ ARM_GCC_541 \ Debug / Plotterkode.map -T Generated_Source \ PSoC5 \ cm3g cc .ld -specs = nano.specs -u _printf_float -Wl, - g c -sections -u_printf_float -g -ffunction-section -Og -ffat-lto-objects -Wl, - end-group. \ CortexM3 \ ARM_GCC_541 \ Debug \ main.o: в функции step_respons':
C:\Users\Vikto\Desktop\plottercode\Plotterkode.cydsn/./plotter_position.h:125: undefined reference to
exp 'collect2.exe: ошибка: ld вернул 1 состояние выхода Команда' arm-none -eabi-g cc .exe 'завершился неудачно с кодом выхода' 1 '. --------------- Ошибка сборки: 28.04.2020 01:34:42 ---- -----------