Я новичок в C ++ и RTOS, так что не вините меня и не смейтесь надо мной
я имею:
typedef struct
{
//... 10 uint8 and 2 enums
} tStruct1;
typedef struct
{
//... slightly different, but completely different enums
} tStruct2;
class someClass
{
private:
struct
{
//...
union
{
tStruct1 s1;
tStruct2 s2;
} data;
} node[10];
//...
public:
unsigned int length;
tStruct1 Get1(void);
tStruct2 Get2(void);
//...
}
tStruct1 someClass::Get1(void)
{
//...
length--;
return node[length].data.s1;
}
tStruct2 someClass::Get2(void)
{
//...
length--;
return node[length].data.s2;
}
и в некотором другом классе:
someClass * inst1 = new someClass();
это работает нормально:
inst1->Get1(void); //useless...
и это:
tStruct1 something = inst1->Get1(void);
перемещает inst1 куда-нибудь еще. Бывает 3 инструкции до переход к функции, указатель стека уменьшается на 0x14 (размер элементов структуры, вероятно, 0x12 + выравнивание -> я думаю, что все в порядке) и увеличивается обратно. Кажется, сама функция работает нормально. Возвращаемое значение является неинициализированным значением.
bool result = instance_of_someOtherClass->inst1->Set(tStruct1);
тоже работает отлично.
Эти 2 звонка сделаны из разных потоков. В любом случае, я собираюсь выбросить этот класс, потому что проект изменился, но я хочу знать, что я делаю неправильно.
Задача ещё не решена.
Других решений пока нет …