Почему я спрашиваю об этом, потому что происходит следующее:
Определено в заголовке:
typedef struct PID
{
// PID parameters
uint16_t Kp; // pGain
uint16_t Ki; // iGain
uint16_t Kd; // dGain
// PID calculations OLD ONES WHERE STATICS
int24_t pTerm;
int32_t iTerm;
int32_t dTerm;
int32_t PID;
// Extra variabels
int16_t CurrentError;
// PID Time
uint16_t tick;
}_PIDObject;
В источнике C:
static int16_t PIDUpdate(int16_t target, int16_t feedback)
{
_PIDObject PID2_t;
PID2_t.Kp = pGain2; // Has the value of 2000
PID2_t.CurrentError = target - feedback; // Has the value of 57
PID2_t.pTerm = PID2_t.Kp * PID2_t.CurrentError; // Should count this to (57x2000) = 114000
Что происходит, когда яотладка в том, что это не так.Самое большое значение, которое я могу определить (своего рода) в pGain2 - это 1140. 1140x57 дает 64980.
Почему-то кажется, что программа думает, что PID2_t.pTerm
- это uint16_t
.Но это не так;в структуре он объявлен больше.
Имеет PID2_t.pTerm
каким-то образом получил значение uint16_t
из первых объявленных переменных в структуре или что-то не так с вычислениями, у меня uint16_t
раз a int16_t
?Этого не произойдет, если я объявлю их вне структуры.
Кроме того, вот мое int def (никогда раньше не было проблем:
#ifdef __18CXX
typedef signed char int8_t; // -128 -> 127 // Char & Signed Char
typedef unsigned char uint8_t; // 0 -> 255 // Unsigned Char
typedef signed short int int16_t; // -32768 -> 32767 // Int
typedef unsigned short int uint16_t; // 0 -> 65535 // Unsigned Int
typedef signed short long int int24_t; // -8388608 -> 8388607 // Short Long
typedef unsigned short long int uint24_t; // 0 -> 16777215 // Unsigned Short Long
typedef signed long int int32_t; // -2147483648 -> 2147483647 // Long
typedef unsigned long int uint32_t; // 0 -> 4294967295 // Unsigned Long
#else
# include <stdint.h>
#endif