Чт мар 04, 2021 12:49:14
Чт мар 04, 2021 12:53:14
Пт мар 05, 2021 11:47:50
union {
long my_long;
struct
{
unsigned int my_int1;
unsigned int my_int2;
};
struct
{
unsigned char my_char1;
unsigned char my_char2;
unsigned char my_char3;
unsigned char my_char4;
};
} my_sptp;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
/* my_sptp.my_char1 = 1;
my_sptp.my_char2 = 2;
my_sptp.my_char3 = 3;
my_sptp.my_char4 = 4;
*/
}
void loop() {
// put your main code here, to run repeatedly:
for (long test_cnt=0; test_cnt<=300000; test_cnt++)
{
my_sptp.my_long=test_cnt;
Serial.println(my_sptp.my_long, HEX);
Serial.print(my_sptp.my_int2, HEX);Serial.print(F(" : "));
Serial.println(my_sptp.my_int1, HEX);
Serial.print(my_sptp.my_char4, HEX);Serial.print(F(" : "));
Serial.print(my_sptp.my_char3, HEX);Serial.print(F(" : "));
Serial.print(my_sptp.my_char2, HEX);Serial.print(F(" : "));
Serial.println(my_sptp.my_char1, HEX);
delay(500);
}
while (1)
{
}
}
Пт мар 05, 2021 13:05:05
Пт мар 05, 2021 13:25:00
union {
long my_long;
struct
{
unsigned int my_int1;
unsigned int my_int2;
};
struct
{
unsigned char my_char1;
unsigned char my_char2;
unsigned char my_char3;
unsigned char my_char4;
};
} my_sptp;
#pragma pack(push, 1)
union char_to_long {
struct {
char c1;
char c2;
char c3;
char c4;
} chars;
long int value;
}
#pragma pack(pop)
Пт мар 05, 2021 13:35:43
Пт мар 05, 2021 14:57:45
Пт мар 05, 2021 22:36:13
union {
long my_long;
struct
{
unsigned int my_int1;
unsigned int my_int2;
} tests1;
struct
{
unsigned char my_char1;
unsigned char my_char2;
unsigned char my_char3;
unsigned char my_char4;
} tests2;
} my_sptp;
/*
union {
long my_long;
struct
{
unsigned int my_int1;
unsigned int my_int2;
};
struct
{
unsigned char my_char1;
unsigned char my_char2;
unsigned char my_char3;
unsigned char my_char4;
};
} my_sptp;
*/
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
/* my_sptp.my_char1 = 1;
my_sptp.my_char2 = 2;
my_sptp.my_char3 = 3;
my_sptp.my_char4 = 4;
*/
}
void loop() {
// put your main code here, to run repeatedly:
for (long test_cnt=0; test_cnt<=300000; test_cnt++)
{
my_sptp.my_long=test_cnt;
Serial.println(my_sptp.my_long, HEX);
Serial.print(my_sptp.tests1.my_int2, HEX);Serial.print(F(" : "));
Serial.println(my_sptp.tests1.my_int1, HEX);
Serial.print(my_sptp.tests2.my_char4, HEX);Serial.print(F(" : "));
Serial.print(my_sptp.tests2.my_char3, HEX);Serial.print(F(" : "));
Serial.print(my_sptp.tests2.my_char2, HEX);Serial.print(F(" : "));
Serial.println(my_sptp.tests2.my_char1, HEX);
delay(500);
}
while (1)
{ }
}
union my_sptp {
long my_long;
struct
{
unsigned int my_int1;
unsigned int my_int2;
}tests1;
struct
{
unsigned char my_char1;
unsigned char my_char2;
unsigned char my_char3;
unsigned char my_char4;
}tests2;
}; // my_sptp;
#pragma pack(push, 1)
// union char_to_long {
union {
struct {
char c1;
char c2;
char c3;
char c4;
} chars;
long int value;
} char_to_long;
#pragma pack(pop)
//----------
// вариант 5
struct two_int
{
unsigned int my_int1;
unsigned int my_int2;
};
struct four_char
{
unsigned char my_char1;
unsigned char my_char2;
unsigned char my_char3;
unsigned char my_char4;
};
union my_union{
long my_long;
two_int tests1;
four_char tests2;
} my_sptp;
/*
//----------
// вариант 4
union my_union{
long my_long;
struct
{
unsigned int my_int1;
unsigned int my_int2;
}tests1;
struct
{
unsigned char my_char1;
unsigned char my_char2;
unsigned char my_char3;
unsigned char my_char4;
}tests2;
} my_sptp;
//----------
// вариант 3
union {
long my_long;
struct
{
unsigned int my_int1;
unsigned int my_int2;
}tests1;
struct
{
unsigned char my_char1;
unsigned char my_char2;
unsigned char my_char3;
unsigned char my_char4;
}tests2;
}; // my_sptp;
my_union my_sptp;
//----------
// вариант 2
union {
long my_long;
struct
{
unsigned int my_int1;
unsigned int my_int2;
}tests1;
struct
{
unsigned char my_char1;
unsigned char my_char2;
unsigned char my_char3;
unsigned char my_char4;
}tests2;
} my_sptp;
//----------
// вариант 1
union {
long my_long;
struct
{
unsigned int my_int1;
unsigned int my_int2;
};
struct
{
unsigned char my_char1;
unsigned char my_char2;
unsigned char my_char3;
unsigned char my_char4;
};
} my_sptp;
//----------
*/
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
/* my_sptp.my_char1 = 1;
my_sptp.my_char2 = 2;
my_sptp.my_char3 = 3;
my_sptp.my_char4 = 4;
*/
}
void loop() {
// put your main code here, to run repeatedly:
// for (long test_cnt=0; test_cnt<=300000; test_cnt++)
for (my_sptp.my_long=0; my_sptp.my_long<=(500); my_sptp.my_long++)
{
// my_sptp.my_long=test_cnt;
Serial.print(my_sptp.my_long, HEX);Serial.print(F(" :: "));
Serial.println(my_sptp.my_long, DEC);
Serial.print(my_sptp.tests1.my_int2, HEX);Serial.print(F(" : "));
Serial.println(my_sptp.tests1.my_int1, HEX);
Serial.print(my_sptp.tests2.my_char4, HEX);Serial.print(F(" : "));
Serial.print(my_sptp.tests2.my_char3, HEX);Serial.print(F(" : "));
Serial.print(my_sptp.tests2.my_char2, HEX);Serial.print(F(" : "));
Serial.println(my_sptp.tests2.my_char1, HEX);
// delay(500);
}
while (1)
{
}
}
Вс мар 07, 2021 11:17:16
BOB51, Вы серьёзно не видите разницу междуBOB51 писал(а):при том, что конструкция типа
для компилятора недопустима
union t_union {
.......
.......
};
union {
.......
.......
} m_union;
Вс мар 07, 2021 17:16:22
Вс мар 07, 2021 17:40:41
вот чтобы не попадать в подобные ситуации, я никогда так не определяю типы, а только через typedef:Аlex писал(а):не видите разницу между
Аlex писал(а):union t_union {
.......
.......
};
typedef union{
....
....
} t_union;
Вс мар 07, 2021 18:26:58
Совершенно верно. Это в одном случае.BOB51 писал(а):Есть объявление объединения, но нет создания самого объединения (объекта).
Я тоже.ARV писал(а):только через typedef
Вс мар 07, 2021 19:09:39
struct two_int
{
unsigned int my_int1;
unsigned int my_int2;
};
struct four_char
{
unsigned char my_char1;
unsigned char my_char2;
unsigned char my_char3;
unsigned char my_char4;
};
union my_union
{
long my_long;
two_int tests1;
four_char tests2;
};
my_union my_sptp;
Вс мар 07, 2021 19:34:45
НИ ОДНОЙBOB51 писал(а):А сколько (теоретически) может быть точек в имени переменной?
Вс мар 07, 2021 19:39:39
my_sptp.tests2.my_char3
Вс мар 07, 2021 23:18:52
Есть объявление объединения, но нет создания самого объединения (объекта).
Да и вызов переменной с двумя точками в имени... как-то в примерах раньше не попадался...
Тем более само применение комбинирования union+struct на практике редкость...
Под ассемблером такой прием более часто применяется.
Осталось еще enum переварить.
Вс мар 07, 2021 23:40:52
union MyUnion
{
long my_long;
TwoInt tests1;
FourChar tests2;
};
MyUnion my_sptp;
Пн мар 08, 2021 09:43:31
Пн мар 08, 2021 10:13:22
using FP = void(*)(int);
using F = void(int);
F* f = func;
Пн мар 08, 2021 10:19:55