2017-02-15 36 views
0

В C, как я могу сделать внимание предупреждение для перелива размера структуры при увеличении проектаструктура ограничение на размер внимание предупреждение

Пример (моя структура в начале проекта

//32 bytes size! 
typedef struct 
{ 
    u8 Ver:8; 
    u8 HasAnyData:8; 
    u16 Ymin:16; 
    u16 Ymax:16; 
    u16 Xmax:16; 
    u16 PokerInterval:16; 
    u16 PokerDuration:16; 
    u16 MinimumWeight:16; 
    u32 tmp1:16; 
    u32 tmp2:32; 
    u32 tmp3:32; 
    u32 tmp4:32; 
    u32 tmp5:32; 
} ConfData_t; 

И после этого определения я прочитал из флэш-памяти

PP_ReadConfig(32,&confData); 

Может быть проблемы, если размер структура будет меньше, чем 32 байт я должен использовать калькулятор для проверки ошибка.

Есть ли стандартный способ для конфигурации компилятора?

P.S Вместо sizeof(confData)

ответ

0

Если вы используете C11, рассмотрим _Static_assertsizeof проверить во время компиляции.

Например:

#include <assert.h> 

typedef struct 
{ 
    u8 Ver:8; 
    u8 HasAnyData:8; 
    u16 Ymin:16; 
    u16 Ymax:16; 
    u16 Xmax:16; 
    u16 PokerInterval:16; 
    u16 PokerDuration:16; 
    u16 MinimumWeight:16; 
    u32 tmp1:16; 
    u32 tmp2:32; 
    u32 tmp3:32; 
    u32 tmp4:32; 
    u32 tmp5:32; 
} ConfData_t; 

int main(){ 

    static_assert(sizeof(ConfData_t) < 32, 
    "needs to be < 32 bytes for flash"); 
} 

Это не компилируется, если изменить-структуру, чтобы иметь SizeOf меньше 32.