Пт ноя 17, 2017 19:35:12
Пт ноя 17, 2017 19:57:30
Пт ноя 17, 2017 20:53:42
Пт ноя 17, 2017 20:56:10
Вс ноя 19, 2017 09:24:26
Вс ноя 19, 2017 10:26:14
Вс ноя 19, 2017 13:07:35
Чт ноя 23, 2017 03:46:54
typedef struct{
uint8_t error1;
uint8_t error2;
uint8_t error3;
uint8_t error4;
}Type_error;
Type_error Err1;
Type_error Err2;
Err1.error1=Err2.error1; // Вот это как сделать по феншую ?
Err1.error2=Err2.error2;
Err1.error3=Err2.error3;
Чт ноя 23, 2017 07:07:46
нельзяpokk писал(а):в С как нибудь можно в цикле по полям структуры пройтись?
вот так и делатьpokk писал(а):// Вот это как сделать по феншую ?
Чт ноя 23, 2017 08:16:46
typedef union {
struct {
uint8_t error1;
uint8_t error2;
uint8_t error3;
uint8_t error4;
};
uint8_t error[4];
} Type_error;
...
Type_error te;
for (uint8_t i = 0; i < sizeof(Type_error); i++) {
te.error[i] = 3;
}
struct {
uint8_t error1;
uint8_t error2;
uint8_t error3;
uint8_t error4;
} Type_error ;
...
Type_error te;
for (uint8_t i = 0; i < sizeof(Type_error); i++) {
*(uint8_t*)(&te + i) = 3;
}
Чт ноя 23, 2017 08:52:54
Чт ноя 23, 2017 08:58:13
ну и зачем вам эти грабли? ну нельзя в Си перебирать поля структуры в цикле... смиритесь. все костыли вам боком выйдут.pokk писал(а):фиг его знает как компилятор структуру упакует. И при портретировании такого когда сложности могут возникать
Чт ноя 23, 2017 14:07:30
uint32_t errors;
typedef enum {
ERR_FOO = (uint32_t) 0x000001,
ERR_BAR = (uint32_t) 0x000002,
ERR_AAAAAAAAA = (uint32_t) 0x000004,
ERR_ZOMBIEAPOCALYPSE = (uint32_t) 0x000008
} error_event_t;
....
errors = 0;
....
errors |= ERR_FOO;
....
if(errors){
if(errors & ERR_FOO){
.....
}
}
Пт ноя 24, 2017 06:33:24
//==========================
/*
* @Описание: Устанавливаем статусные биты(норма,предупреждение,авария).
* @Параметр:
* @Возврат: Нету
*/
void SetStatus(uint8_t data,uint32_t Var){
MatchVall.StatusAll&=(~(3<<Var*2)); //очистить место под установку битов(стереть предыдушее значение)
MatchVall.StatusAll|= (data<<(Var*2));
}
//==========================
/*
* @Описание: Функция возврашает статус запрашиваемого параметра.
* @Параметр:
* @Возврат: Нету
*/
uint8_t GetStatus(uint32_t Var){
uint32_t temp;
temp=MatchVall.StatusAll&(3<<Var*2);
temp=temp>>(Var*2);
return temp;
}
Пт ноя 24, 2017 07:36:52
как с моей точки зрения, так вы сделали плохо, я бы даже сказал недопустимо, если бы мне не было все равно кто вам помешал сделать нормально?pokk писал(а):да я сделал похоже, но в лоб
typedef enum{
STATUS_OK,
STATUS_FAIL,
STATUS_ALARM
}status_t;
Пт ноя 24, 2017 11:49:15
typedef enum{
STATUS_OK,
STATUS_FAIL,
STATUS_ALARM
}status_t;
typedef struct{
status_t T;
status_t AC;
status_t Erorr3;
status_t Erorr4;
}T_error_t;
T_error_t Error;
void SetStatus123(status_t data,status_t Var){
if(data==STATUS_OK){Var=STATUS_OK;}
if(data==STATUS_FAIL){Var=STATUS_OK;}
if(data==STATUS_ALARM){Var=STATUS_OK;}
}
SetStatus123(STATUS_ALARM,Error.AC);
Пт ноя 24, 2017 12:01:13
void SetStatus123(status_t data,status_t Var){
if(data==STATUS_OK){Var=STATUS_OK;}
if(data==STATUS_FAIL){Var=STATUS_OK;}
if(data==STATUS_ALARM){Var=STATUS_OK;}
}
status_t status;
...
switch(status){
case STATUS_OK:
...
break;
case STATUS_FAIL:
...
break;
case STATUS_ALARM:
...
break;
}
Пт ноя 24, 2017 12:39:45
Пт ноя 24, 2017 14:23:34
Пт ноя 24, 2017 16:00:03
#pragma pack(push, 1)
struct {
uint8_t error1;
uint8_t error2;
uint8_t error3;
uint8_t error4;
};
#pragma pack(pop)
struct {
uint8_t error1;
uint8_t error2;
uint8_t error3;
uint8_t error4;
} __attribute__ ((__packed__));