HI!!
I declared 3 global var, i call it inside diferent task and every execution this var should be updates but not to do it. I have a 8051 under evaluation board. Maybe can be a problem of my small micro? What do u think about this?
Thanks
Maybe can be a problem of my small micro?
Most likely not. I would guess it is a problem with the code, but lacking the code it is hard to verify that.
What do u think about this?
I think that given the scarcity of information, any statement about the nature of the problem can be classified as speculation.
SPid iA void PIDa (void) _task_ A _priority_ 1 { Ua = UpdatePID (&iA, SPa, PVa, 1, 4); os_send_signal(WRITE); os_delete_task(A); }
iA is my global var that it is initialized into a task. This task is calling to the task A (top).
When UpdatePID funtion is executed the iA var not update.
You show a global variable of an unknown data type.
You show that you send the address of the variable to a function.
You do not show the function implementation
Exactly what do you think will be able to deduce from this?
I am not sure I understand what you are doing here: are you terminating the task that does your PID calculations just after one cycle? this is not the way to implemented a closed loop using a PID controller, of any controller whatsoever that is based on feedback.
The data type is :
typedef struct { real dState; /* Ultima posicion */ real iState; /* Estado del integrador */ real uMax,uMin; /* Saturacion del actuador */ real Kp; /* Ganancia proporcional */ real Ti,Td; /* Cte, tiempo integral y derivativo */ real Ts,Tt; /* Periodo muestreo, Cte. tiempo tracking */ real Kwindup; /* Cte. antireset windup */ } SPid;
The funtion implementation i think that is not important to resolve my problem. This is the top of the funtion:
real UpdatePID (SPid *pid, real SP, real PV, unsigned int AUTO,real Uman) reentrant;
real is int data type
View all questions in Keil forum