省流:

1.函数使用了多个其他.c文件中的变量,使用extern声明变量。

当多个.c文件使用extern 声明变量,导致正确的参数无法被引用,导致返回值错误。
以后在定义变量时,尽量把extern都写在.h文件中,并把所有的.h文件集合在一个.h文件中,调用只需要include一个.h文件,避免使用多个extern 声明同一个变量

2. 在参数传入时候,float int类型要保证规范,否则会导致数据溢出或者是其他很奇怪的问题

3.在定时器与while中使用结构体,在main里有pid的初始化,所以定时器里只放了声明与函数,导致返回值一直不对
1
2
3
4
5
6
7
8
9
10
   //定时器

IncrementalPID ver;
IncrementalPID hor;

IncrementalPID_init(&ver, 0.4, 0.01, 0.0);// 设置PID参数
IncrementalPID_init(&hor, 0.4, 0.01, 0.0);// 设置PID参数

Servo_pid_move(&ver, &hor, y1, y_green, x1, x_green);

结构体的书写要规范,在定时器中使用时候

声明、初始化、函数使用都不能少

代码书写一定要严谨,思路清晰。

参考:
keil中的extern的使用
关于extern声明后,变量值和定义值不一样的问题及解决办法