Пн дек 06, 2021 20:33:43
Пн дек 06, 2021 20:39:07
Пн дек 06, 2021 21:05:09
typedef union
{
uint8_t Byte[2];
uint16_t i;
float f;
} TValue;
TValue Temp;
Temp.Byte[0]=0xFF;//uint8_t
Temp.Byte[1]=0xFF;//uint8_t
Temp.i=0xFFFF//uint16_t
Temp.float=1.0;//float
Пн дек 06, 2021 21:10:46
union BytByte {
struct {
uint8_t l;
uint8_t h;
} bit;
uint16_t byte;
};
union BytByte myByte;
myByte.byte = 0x1235;
a0 = myByte.bit.l;
a1 = myByte.bit.h;
Пн дек 06, 2021 23:30:34
uint16_t data[N];
uint8_t *dptr = (uint8_t*) data;
for(int i = 2*N; i > 0; --i)
do_something_with(*dptr++);
uint16_t data[N];
uint8_t *dptr = (uint8_t*) data;
for(int i = 0; i < N; ++i){
do_something_with(dptr[1]);
do_something_with(dptr[0]);
dptr += 2;
}
Вт дек 07, 2021 01:06:05
uint16_t in_val = 0xBBAA;
unsigned char byte_1 = (uint8_t) (in_val & 0x00ff);
unsigned char byte_2 = (uint8_t) ((in_val & 0xff00) >> 8);
printf("b1: 0x%X, b2: 0x%X\n", byte_1, byte_2);
Вывод:
b1: 0xAA, b2: 0xBB
Вт дек 07, 2021 10:11:30
uint16_t in_val = 0xBBAA;
unsigned char byte_1 = (uint8_t) (in_val & 0x00ff);
unsigned char byte_2 = (uint8_t) ((in_val & 0xff00) >> 8);
printf("b1: 0x%X, b2: 0x%X\n", byte_1, byte_2);
uint16_t uint16_val = 0x0123;
uint8_t v1 = uint16_val;
uint8_t v2 = uint16_val >> 8;
Вт дек 07, 2021 14:09:34
функция из с++, очень бы хотелось глянуть на выхлоп с++, плиз, если вас не затруднитwarning: implicit declaration of function 'do_something_with' [-Wimplicit-function-declaration]
union BytByte {
struct {
uint8_t l;
uint8_t h;
} bit;
struct {
unsigned m:4;
unsigned l:4;
unsigned h:4;
unsigned g:4;
} tet;
uint16_t byte;
};
Вт дек 07, 2021 14:49:53
// Outputs config
#pragma pack(1)
typedef struct COutsCfg
{
union
{
struct
{
uint16_t out_0_cfg : 2;
uint16_t out_1_cfg : 2;
uint16_t out_2_cfg : 2;
uint16_t out_3_cfg : 2;
uint16_t out_4_cfg : 2;
uint16_t out_5_cfg : 2;
uint16_t out_6_cfg : 2;
uint16_t out_7_cfg : 2;
};
uint16_t config16;
};
uint8_t beforeResetTimeout;
uint8_t resetTimeout;
uint8_t afterResetTimeout;
}OutsCfg;
#pragma pack()
// Номер раз
uint16_t foo = 0xAA55;
uint8_t low = foo & 0x00FF; // low = 0x55
uint8_t high = (foo & 0xFF00) >> 8; // high = 0xAA
// Вариант номер двас
typedef union _FooType
{
struct
{
uint8_t low;
uint8_t high;
};
uint16_t foo;
}FooType;
FooType foo;
foo.foo = 0xAA55;
//foo.low = 0x55;
//foo.high = 0xAA;
Вт дек 07, 2021 15:01:14
uint16_t in_val = 0xBBAA;
unsigned char byte_1 = (uint8_t) (in_val & 0x00ff);
unsigned char byte_2 = (uint8_t) ((in_val & 0xff00) >> 8);
printf("b1: 0x%X, b2: 0x%X\n", byte_1, byte_2);
uint16_t uint16_val = 0x0123;
uint8_t v1 = uint16_val;
uint8_t v2 = uint16_val >> 8;
uint8_t v1 = (uint8_t) uint16_val; // усекаем явно - чтоб компилятор не ругался
uint8_t v2 = (uint8_t) (uint16_val >> 8);
typedef union
{
struct
{
uint8_t b1;
uint8_t b2;
};
uint16_t dwaBytes;
} DwaBytes_t;
DwaBytes_t dwaByte = { .dwaBytes = 0xBBAA };
Вт дек 07, 2021 20:29:07
Вт дек 07, 2021 20:48:54
uint16_t temp;
uint8_t data[2];
// туда
temp = *((uint16_t*)&data[0]);
// обратно
*((uint16_t*)&data[0]) = temp;
Вт дек 07, 2021 21:44:18
uint16_t temp;
uint8_t *data = (uint8_t*) &temp;
data[0] = 0xad; data[1] = 0xde; printf("16bit: 0x%x\n", temp); // Little-endian 8 -> 16bit
temp = 0xaabb; printf("lo: 0x%s, hi: 0x%x\n", data[0], data[1]); // 16bit -> little-endian 8
Вт дек 07, 2021 22:17:52
Вт дек 07, 2021 23:39:52
Ср дек 08, 2021 09:14:00
//********************************************
// Ужасная структура
// Outputs config
#pragma pack(1)
typedef struct COutsCfg
{
union
{
struct
{
uint16_t out_0_cfg : 2;
uint16_t out_1_cfg : 2;
uint16_t out_2_cfg : 2;
uint16_t out_3_cfg : 2;
uint16_t out_4_cfg : 2;
uint16_t out_5_cfg : 2;
uint16_t out_6_cfg : 2;
uint16_t out_7_cfg : 2;
};
uint16_t config16;
};
uint8_t beforeResetTimeout;
uint8_t resetTimeout;
uint8_t afterResetTimeout;
}OutsCfg;
#pragma pack()
//********************************************
// Код
// Reset outputs config
OutsCfg outCfg;
outCfg.config16 = OUTPUTS_DEFAULT_CONFIG;
outCfg.beforeResetTimeout = OUTPUTS_TIMEOUT_BEFORE_RESET;
outCfg.resetTimeout = OUTPUTS_TIMEOUT_RESET;
outCfg.afterResetTimeout = OUTPUTS_TIMEOUT_AFTER_RESET;
eeprom_write_block(&outCfg, (void*)(CONFIG_OUTS_OFFSET), sizeof(OutsCfg));
//********************************************
// Дизасм
// Reset outputs config
OutsCfg outCfg;
outCfg.config16 = OUTPUTS_DEFAULT_CONFIG;
35d4: 8a ea ldi r24, 0xAA ; 170
35d6: 9a e0 ldi r25, 0x0A ; 10
35d8: 9a 83 std Y+2, r25 ; 0x02
35da: 89 83 std Y+1, r24 ; 0x01
E:\PlatformIO\DailyTimer/src/Config.cpp:38
outCfg.beforeResetTimeout = OUTPUTS_TIMEOUT_BEFORE_RESET;
35dc: 8e e1 ldi r24, 0x1E ; 30
35de: 8b 83 std Y+3, r24 ; 0x03
E:\PlatformIO\DailyTimer/src/Config.cpp:39
outCfg.resetTimeout = OUTPUTS_TIMEOUT_RESET;
35e0: 12 e0 ldi r17, 0x02 ; 2
35e2: 1c 83 std Y+4, r17 ; 0x04
E:\PlatformIO\DailyTimer/src/Config.cpp:40
outCfg.afterResetTimeout = OUTPUTS_TIMEOUT_AFTER_RESET;
35e4: 85 e0 ldi r24, 0x05 ; 5
35e6: 8d 83 std Y+5, r24 ; 0x05
E:\PlatformIO\DailyTimer/src/Config.cpp:42
eeprom_write_block(&outCfg, (void*)(CONFIG_OUTS_OFFSET), sizeof(OutsCfg));
35e8: 45 e0 ldi r20, 0x05 ; 5
35ea: 50 e0 ldi r21, 0x00 ; 0
35ec: 68 e5 ldi r22, 0x58 ; 88
35ee: 71 e0 ldi r23, 0x01 ; 1
35f0: ce 01 movw r24, r28
35f2: 01 96 adiw r24, 0x01 ; 1
35f4: 0e 94 d2 1e call 0x3da4 ; 0x3da4 <eeprom_write_block>
Ср дек 08, 2021 10:38:09
uint8_t var[3] = {245, 235, 255};
uint8_t sum;
sum = (var[0] + var[1] + var[2]) / 3;
Ср дек 08, 2021 10:40:17
Ср дек 08, 2021 10:54:29
Ср дек 08, 2021 11:09:16
uint8_t var[3] = {245, 235, 255};
uint8_t sum;
sum = (uint16_t) (var[0] + var[1] + var[2]) / 3;