mirror of
https://github.com/opentx/opentx.git
synced 2025-07-14 20:10:08 +03:00
Merge pull request #3401 from opentx/schwabe/check_struct_sizes
check struct sizes
This commit is contained in:
commit
2acf6aed3b
3 changed files with 161 additions and 5 deletions
|
@ -986,14 +986,15 @@ if(ARCH STREQUAL ARM)
|
||||||
set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> -o <OBJECT> <SOURCE>")
|
set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> -o <OBJECT> <SOURCE>")
|
||||||
|
|
||||||
set(COMMON_FLAGS "-mcpu=${MCU} -mthumb -fomit-frame-pointer -fverbose-asm -Wa,-ahlms=firmware.lst -O${OPT} -gdwarf-2 -DHSE_VALUE=${HSE_VALUE} -fno-exceptions -fdata-sections -ffunction-sections ${WARNING_FLAGS}")
|
set(COMMON_FLAGS "-mcpu=${MCU} -mthumb -fomit-frame-pointer -fverbose-asm -Wa,-ahlms=firmware.lst -O${OPT} -gdwarf-2 -DHSE_VALUE=${HSE_VALUE} -fno-exceptions -fdata-sections -ffunction-sections ${WARNING_FLAGS}")
|
||||||
|
set(COMMON_CPP_FLAGS "${COMMON_FLAGS} -std=gnu++11")
|
||||||
set(CMAKE_C_FLAGS "${COMMON_FLAGS} -Wimplicit")
|
set(CMAKE_C_FLAGS "${COMMON_FLAGS} -Wimplicit")
|
||||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${COMMON_FLAGS} -Wimplicit -g")
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${COMMON_FLAGS} -Wimplicit -g")
|
||||||
set(CMAKE_C_FLAGS_RELEASE "${COMMON_FLAGS} -Wimplicit")
|
set(CMAKE_C_FLAGS_RELEASE "${COMMON_FLAGS} -Wimplicit")
|
||||||
set(CMAKE_C_FLAGS_DEBUG "${COMMON_FLAGS} -Wimplicit -g")
|
set(CMAKE_C_FLAGS_DEBUG "${COMMON_FLAGS} -Wimplicit -g")
|
||||||
set(CMAKE_CXX_FLAGS "${COMMON_FLAGS}")
|
set(CMAKE_CXX_FLAGS "${COMMON_CPP_FLAGS}")
|
||||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${COMMON_FLAGS} -g")
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${COMMON_CPP_FLAGS} -g")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "${COMMON_FLAGS}")
|
set(CMAKE_CXX_FLAGS_RELEASE "${COMMON_CPP_FLAGS}")
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${COMMON_FLAGS} -g")
|
set(CMAKE_CXX_FLAGS_DEBUG "${COMMON_CPP_FLAGS} -g")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "-mcpu=${MCU} -mthumb -lm -T${RADIO_SRC_DIRECTORY}/${LINKER_SCRIPT} -Wl,-Map=firmware.map,--cref,--no-warn-mismatch,--gc-sections")
|
set(CMAKE_EXE_LINKER_FLAGS "-mcpu=${MCU} -mthumb -lm -T${RADIO_SRC_DIRECTORY}/${LINKER_SCRIPT} -Wl,-Map=firmware.map,--cref,--no-warn-mismatch,--gc-sections")
|
||||||
|
|
||||||
if(PCB STREQUAL TARANIS)
|
if(PCB STREQUAL TARANIS)
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include "opentx.h"
|
#include "opentx.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <strings.h>
|
||||||
|
|
||||||
extern OS_MutexID audioMutex;
|
extern OS_MutexID audioMutex;
|
||||||
|
|
||||||
|
|
|
@ -1031,3 +1031,157 @@ PACK(struct RadioData {
|
||||||
#undef EXTRA_GENERAL_FIELDS
|
#undef EXTRA_GENERAL_FIELDS
|
||||||
#undef THEME_DATA
|
#undef THEME_DATA
|
||||||
#undef NOBACKUP
|
#undef NOBACKUP
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(BACKUP)
|
||||||
|
/* Compile time check to test structure size has not changed *
|
||||||
|
Changing the size of one of the eeprom structs may cause wrong data to
|
||||||
|
be loaded. Error out if the struct size changes.
|
||||||
|
This function tries not avoid checking or using the defines
|
||||||
|
other than the CPU arch and board type so changes in other
|
||||||
|
defines also trigger the struct size changes */
|
||||||
|
|
||||||
|
template <typename ToCheck, size_t expectedSize, size_t realSize = sizeof(ToCheck)>
|
||||||
|
void check_size() {
|
||||||
|
static_assert(expectedSize == realSize, "struct size changed");
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void check_struct()
|
||||||
|
{
|
||||||
|
#define CHKSIZE(x, y) check_size<struct x, y>()
|
||||||
|
#define CHKTYPE(x, y) check_size<x, y>()
|
||||||
|
|
||||||
|
#if defined(VIRTUALINPUTS)
|
||||||
|
CHKSIZE(CurveRef, 2);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Difference between Taranis/Horus is LEN_EXPOMIX_NAME */
|
||||||
|
/* Sky9x does not have virtualinputs */
|
||||||
|
|
||||||
|
/* LEN_CFN_NAME is the difference in CustomFunctionData */
|
||||||
|
|
||||||
|
#if defined(PCBTARANIS)
|
||||||
|
CHKSIZE(MixData, 22);
|
||||||
|
CHKSIZE(ExpoData, 19);
|
||||||
|
CHKSIZE(LimitData, 13);
|
||||||
|
CHKSIZE(LogicalSwitchData, 9);
|
||||||
|
CHKSIZE(CustomFunctionData, 11);
|
||||||
|
CHKSIZE(FlightModeData, 40);
|
||||||
|
CHKSIZE(TimerData, 16);
|
||||||
|
CHKSIZE(SwashRingData, 8);
|
||||||
|
CHKSIZE(FrSkyBarData, 6);
|
||||||
|
CHKSIZE(FrSkyLineData, 6);
|
||||||
|
CHKTYPE(union FrSkyScreenData, 24);
|
||||||
|
CHKSIZE(FrSkyTelemetryData, 106);
|
||||||
|
CHKSIZE(ModelHeader, 24);
|
||||||
|
CHKSIZE(CurveData, 4);
|
||||||
|
|
||||||
|
#if defined(REV9E)
|
||||||
|
CHKSIZE(RadioData, 952);
|
||||||
|
CHKSIZE(ModelData, 6519);
|
||||||
|
#else
|
||||||
|
CHKSIZE(RadioData, 872);
|
||||||
|
CHKSIZE(ModelData, 6506);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif defined(PCBHORUS)
|
||||||
|
CHKSIZE(MixData, 20);
|
||||||
|
CHKSIZE(ExpoData, 17);
|
||||||
|
CHKSIZE(LimitData, 13);
|
||||||
|
CHKSIZE(CustomFunctionData, 9);
|
||||||
|
CHKSIZE(FlightModeData, 40);
|
||||||
|
CHKSIZE(TimerData, 16);
|
||||||
|
CHKSIZE(SwashRingData, 8);
|
||||||
|
|
||||||
|
CHKSIZE(FrSkyTelemetryData, 7);
|
||||||
|
CHKSIZE(ModelHeader, 27);
|
||||||
|
CHKSIZE(CurveData, 4);
|
||||||
|
CHKSIZE(RadioData, 835);
|
||||||
|
CHKSIZE(ModelData, 9335);
|
||||||
|
|
||||||
|
#elif defined(PCBSKY9X)
|
||||||
|
CHKSIZE(MixData, 20);
|
||||||
|
CHKSIZE(ExpoData, 11);
|
||||||
|
CHKSIZE(LimitData, 5);
|
||||||
|
CHKSIZE(CustomFunctionData, 9);
|
||||||
|
CHKSIZE(FlightModeData, 38);
|
||||||
|
CHKSIZE(TimerData, 11);
|
||||||
|
CHKSIZE(SwashRingData, 3);
|
||||||
|
CHKSIZE(FrSkyBarData, 5);
|
||||||
|
CHKSIZE(FrSkyLineData, 2);
|
||||||
|
CHKSIZE(FrSkyTelemetryData, 90);
|
||||||
|
CHKSIZE(ModelHeader, 12);
|
||||||
|
CHKTYPE(CurveData, 2);
|
||||||
|
CHKSIZE(RadioData, 685);
|
||||||
|
CHKSIZE(ModelData, 4671);
|
||||||
|
#else
|
||||||
|
// Common for all variants
|
||||||
|
CHKSIZE(LimitData, 5);
|
||||||
|
CHKSIZE(SwashRingData, 3);
|
||||||
|
CHKSIZE(FrSkyBarData, 3);
|
||||||
|
CHKSIZE(FrSkyLineData, 2);
|
||||||
|
CHKSIZE(FrSkyTelemetryData, 43);
|
||||||
|
CHKSIZE(ModelHeader, 11);
|
||||||
|
CHKTYPE(CurveData, 1);
|
||||||
|
|
||||||
|
// AVR
|
||||||
|
#if defined(CPUM2560) || defined(CPUM2561)
|
||||||
|
CHKSIZE(ExpoData, 5);
|
||||||
|
CHKSIZE(MixData, 10);
|
||||||
|
#else
|
||||||
|
CHKSIZE(MixData, 9);
|
||||||
|
CHKSIZE(ExpoData, 4);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(CPUM2560)
|
||||||
|
CHKSIZE(CustomFunctionData, 4);
|
||||||
|
CHKSIZE(TimerData, 6);
|
||||||
|
#else
|
||||||
|
CHKSIZE(CustomFunctionData, 3);
|
||||||
|
CHKSIZE(TimerData, 3);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PCBSTD)
|
||||||
|
CHKSIZE(FlightModeData, 13);
|
||||||
|
CHKSIZE(RadioData, 84);
|
||||||
|
#else
|
||||||
|
CHKSIZE(FlightModeData, 30);
|
||||||
|
CHKSIZE(RadioData, 85);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PCBSTD) && defined (MAVLINK)
|
||||||
|
CHKSIZE(ModelData, 717);
|
||||||
|
#elif defined(PCBSTD)
|
||||||
|
CHKSIZE(ModelData, 756);
|
||||||
|
#elif defined(MAVLINK)
|
||||||
|
CHKSIZE(ModelData, 978);
|
||||||
|
#else
|
||||||
|
CHKSIZE(ModelData, 1017);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* board specific ifdefs*/
|
||||||
|
|
||||||
|
#if defined(CPUARM)
|
||||||
|
CHKSIZE(LogicalSwitchData, 9);
|
||||||
|
#if !defined(COLORLCD)
|
||||||
|
CHKSIZE(FrSkyChannelData, 7);
|
||||||
|
#endif
|
||||||
|
CHKSIZE(TelemetrySensor, 13);
|
||||||
|
CHKSIZE(ModuleData,70);
|
||||||
|
#else
|
||||||
|
CHKSIZE(LogicalSwitchData, 3);
|
||||||
|
CHKSIZE(FrSkyChannelData, 6);
|
||||||
|
CHKSIZE(ModuleData, 38);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(PCBSTD)
|
||||||
|
CHKSIZE(GVarData, 7);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
CHKSIZE(FrSkyRSSIAlarm, 1);
|
||||||
|
CHKSIZE(TrainerData, 16);
|
||||||
|
|
||||||
|
#undef CHKSIZE
|
||||||
|
#undef CHKSIZEUNION
|
||||||
|
}
|
||||||
|
#endif /* BACKUP */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue