修复BOOT丢帧问题,优化标志位的存储
This commit is contained in:
+411
-411
@@ -1,417 +1,417 @@
|
||||
CompileFlags:
|
||||
CompilationDatabase: g:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Release
|
||||
CompilationDatabase: g:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Debug
|
||||
Add:
|
||||
- '-D_ILP32=1'
|
||||
- '-D_USE_STATIC_INLINE=1'
|
||||
- '-D__APCS_32__=1'
|
||||
- '-D__ARMCC_VERSION=6240002'
|
||||
- '-D__ARMCOMPILER_VERSION=6240002'
|
||||
- '-D__ARMEL__=1'
|
||||
- '-D__ARM_32BIT_STATE=1'
|
||||
- '-D__ARM_ACLE=200'
|
||||
- '-D__ARM_ARCH=7'
|
||||
- '-D__ARM_ARCH_7EM__=1'
|
||||
- '-D__ARM_ARCH_EXT_IDIV__=1'
|
||||
- '-D__ARM_ARCH_ISA_THUMB=2'
|
||||
- '-D__ARM_ARCH_PROFILE=''M'''
|
||||
- '-D__ARM_EABI__=1'
|
||||
- '-D__ARM_FEATURE_CLZ=1'
|
||||
- '-D__ARM_FEATURE_COPROC=0xf'
|
||||
- '-D__ARM_FEATURE_DSP=1'
|
||||
- '-D__ARM_FEATURE_FMA=1'
|
||||
- '-D__ARM_FEATURE_IDIV=1'
|
||||
- '-D__ARM_FEATURE_LDREX=0x7'
|
||||
- '-D__ARM_FEATURE_QBIT=1'
|
||||
- '-D__ARM_FEATURE_SAT=1'
|
||||
- '-D__ARM_FEATURE_SIMD32=1'
|
||||
- '-D__ARM_FEATURE_UNALIGNED=1'
|
||||
- '-D__ARM_FP=0x6'
|
||||
- '-D__ARM_FP16_ARGS=1'
|
||||
- '-D__ARM_FP16_FORMAT_IEEE=1'
|
||||
- '-D__ARM_NO_IMAGINARY_TYPE=1'
|
||||
- '-D__ARM_PCS=1'
|
||||
- '-D__ARM_PCS_VFP=1'
|
||||
- '-D__ARM_PROMISE=__builtin_assume'
|
||||
- '-D__ARM_SIZEOF_MINIMAL_ENUM=1'
|
||||
- '-D__ARM_SIZEOF_WCHAR_T=2'
|
||||
- '-D__ARM_VFPV2__=1'
|
||||
- '-D__ARM_VFPV3__=1'
|
||||
- '-D__ARM_VFPV4__=1'
|
||||
- '-D__ATOMIC_ACQUIRE=2'
|
||||
- '-D__ATOMIC_ACQ_REL=4'
|
||||
- '-D__ATOMIC_CONSUME=1'
|
||||
- '-D__ATOMIC_RELAXED=0'
|
||||
- '-D__ATOMIC_RELEASE=3'
|
||||
- '-D__ATOMIC_SEQ_CST=5'
|
||||
- '-D__BIGGEST_ALIGNMENT__=8'
|
||||
- '-D__BITINT_MAXWIDTH__=128'
|
||||
- '-D__BOOL_WIDTH__=8'
|
||||
- '-D__BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__'
|
||||
- '-D__CHAR16_TYPE__=unsigned short'
|
||||
- '-D__CHAR32_TYPE__=unsigned int'
|
||||
- '-D__CHAR_BIT__=8'
|
||||
- '-D__CHAR_UNSIGNED__=1'
|
||||
- '-D__CLANG_ATOMIC_BOOL_LOCK_FREE=2'
|
||||
- '-D__CLANG_ATOMIC_CHAR16_T_LOCK_FREE=2'
|
||||
- '-D__CLANG_ATOMIC_CHAR32_T_LOCK_FREE=2'
|
||||
- '-D__CLANG_ATOMIC_CHAR_LOCK_FREE=2'
|
||||
- '-D__CLANG_ATOMIC_INT_LOCK_FREE=2'
|
||||
- '-D__CLANG_ATOMIC_LLONG_LOCK_FREE=1'
|
||||
- '-D__CLANG_ATOMIC_LONG_LOCK_FREE=2'
|
||||
- '-D__CLANG_ATOMIC_POINTER_LOCK_FREE=2'
|
||||
- '-D__CLANG_ATOMIC_SHORT_LOCK_FREE=2'
|
||||
- '-D__CLANG_ATOMIC_WCHAR_T_LOCK_FREE=2'
|
||||
- '-D__CONSTANT_CFSTRINGS__=1'
|
||||
- '-D__DBL_DECIMAL_DIG__=17'
|
||||
- '-D__DBL_DENORM_MIN__=4.9406564584124654e-324'
|
||||
- '-D__DBL_DIG__=15'
|
||||
- '-D__DBL_EPSILON__=2.2204460492503131e-16'
|
||||
- '-D__DBL_HAS_DENORM__=1'
|
||||
- '-D__DBL_HAS_INFINITY__=1'
|
||||
- '-D__DBL_HAS_QUIET_NAN__=1'
|
||||
- '-D__DBL_MANT_DIG__=53'
|
||||
- '-D__DBL_MAX_10_EXP__=308'
|
||||
- '-D__DBL_MAX_EXP__=1024'
|
||||
- '-D__DBL_MAX__=1.7976931348623157e+308'
|
||||
- '-D__DBL_MIN_10_EXP__=(-307)'
|
||||
- '-D__DBL_MIN_EXP__=(-1021)'
|
||||
- '-D__DBL_MIN__=2.2250738585072014e-308'
|
||||
- '-D__DBL_NORM_MAX__=1.7976931348623157e+308'
|
||||
- '-D__DECIMAL_DIG__=__LDBL_DECIMAL_DIG__'
|
||||
- '-D__ELF__=1'
|
||||
- '-D__ESCAPE__='
|
||||
- '-D__FINITE_MATH_ONLY__=1'
|
||||
- '-D__FLT16_DECIMAL_DIG__=5'
|
||||
- '-D__FLT16_DENORM_MIN__=5.9604644775390625e-8F16'
|
||||
- '-D__FLT16_DIG__=3'
|
||||
- '-D__FLT16_EPSILON__=9.765625e-4F16'
|
||||
- '-D__FLT16_HAS_DENORM__=1'
|
||||
- '-D__FLT16_HAS_INFINITY__=1'
|
||||
- '-D__FLT16_HAS_QUIET_NAN__=1'
|
||||
- '-D__FLT16_MANT_DIG__=11'
|
||||
- '-D__FLT16_MAX_10_EXP__=4'
|
||||
- '-D__FLT16_MAX_EXP__=16'
|
||||
- '-D__FLT16_MAX__=6.5504e+4F16'
|
||||
- '-D__FLT16_MIN_10_EXP__=(-4)'
|
||||
- '-D__FLT16_MIN_EXP__=(-13)'
|
||||
- '-D__FLT16_MIN__=6.103515625e-5F16'
|
||||
- '-D__FLT16_NORM_MAX__=6.5504e+4F16'
|
||||
- '-D__FLT_DECIMAL_DIG__=9'
|
||||
- '-D__FLT_DENORM_MIN__=1.40129846e-45F'
|
||||
- '-D__FLT_DIG__=6'
|
||||
- '-D__FLT_EPSILON__=1.19209290e-7F'
|
||||
- '-D__FLT_HAS_DENORM__=1'
|
||||
- '-D__FLT_HAS_INFINITY__=1'
|
||||
- '-D__FLT_HAS_QUIET_NAN__=1'
|
||||
- '-D__FLT_MANT_DIG__=24'
|
||||
- '-D__FLT_MAX_10_EXP__=38'
|
||||
- '-D__FLT_MAX_EXP__=128'
|
||||
- '-D__FLT_MAX__=3.40282347e+38F'
|
||||
- '-D__FLT_MIN_10_EXP__=(-37)'
|
||||
- '-D__FLT_MIN_EXP__=(-125)'
|
||||
- '-D__FLT_MIN__=1.17549435e-38F'
|
||||
- '-D__FLT_NORM_MAX__=3.40282347e+38F'
|
||||
- '-D__FLT_RADIX__=2'
|
||||
- '-D__FPCLASS_NEGINF=0x0004'
|
||||
- '-D__FPCLASS_NEGNORMAL=0x0008'
|
||||
- '-D__FPCLASS_NEGSUBNORMAL=0x0010'
|
||||
- '-D__FPCLASS_NEGZERO=0x0020'
|
||||
- '-D__FPCLASS_POSINF=0x0200'
|
||||
- '-D__FPCLASS_POSNORMAL=0x0100'
|
||||
- '-D__FPCLASS_POSSUBNORMAL=0x0080'
|
||||
- '-D__FPCLASS_POSZERO=0x0040'
|
||||
- '-D__FPCLASS_QNAN=0x0002'
|
||||
- '-D__FPCLASS_SNAN=0x0001'
|
||||
- '-D__GCC_ATOMIC_BOOL_LOCK_FREE=2'
|
||||
- '-D__GCC_ATOMIC_CHAR16_T_LOCK_FREE=2'
|
||||
- '-D__GCC_ATOMIC_CHAR32_T_LOCK_FREE=2'
|
||||
- '-D__GCC_ATOMIC_CHAR_LOCK_FREE=2'
|
||||
- '-D__GCC_ATOMIC_INT_LOCK_FREE=2'
|
||||
- '-D__GCC_ATOMIC_LLONG_LOCK_FREE=1'
|
||||
- '-D__GCC_ATOMIC_LONG_LOCK_FREE=2'
|
||||
- '-D__GCC_ATOMIC_POINTER_LOCK_FREE=2'
|
||||
- '-D__GCC_ATOMIC_SHORT_LOCK_FREE=2'
|
||||
- '-D__GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1'
|
||||
- '-D__GCC_ATOMIC_WCHAR_T_LOCK_FREE=2'
|
||||
- '-D__GCC_CONSTRUCTIVE_SIZE=64'
|
||||
- '-D__GCC_DESTRUCTIVE_SIZE=64'
|
||||
- '-D__GCC_HAVE_DWARF2_CFI_ASM=1'
|
||||
- '-D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1'
|
||||
- '-D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1'
|
||||
- '-D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1'
|
||||
- '-D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8=1'
|
||||
- '-D__GNUC_MINOR__=2'
|
||||
- '-D__GNUC_PATCHLEVEL__=1'
|
||||
- '-D__GNUC_STDC_INLINE__=1'
|
||||
- '-D__GNUC__=4'
|
||||
- '-D__GXX_ABI_VERSION=1002'
|
||||
- '-D__ILP32__=1'
|
||||
- '-D__INT16_C_SUFFIX__='
|
||||
- '-D__INT16_FMTd__="hd"'
|
||||
- '-D__INT16_FMTi__="hi"'
|
||||
- '-D__INT16_MAX__=32767'
|
||||
- '-D__INT16_TYPE__=short'
|
||||
- '-D__INT32_C_SUFFIX__='
|
||||
- '-D__INT32_FMTd__="d"'
|
||||
- '-D__INT32_FMTi__="i"'
|
||||
- '-D__INT32_MAX__=2147483647'
|
||||
- '-D__INT32_TYPE__=int'
|
||||
- '-D__INT64_C_SUFFIX__=LL'
|
||||
- '-D__INT64_FMTd__="lld"'
|
||||
- '-D__INT64_FMTi__="lli"'
|
||||
- '-D__INT64_MAX__=9223372036854775807LL'
|
||||
- '-D__INT64_TYPE__=long long int'
|
||||
- '-D__INT8_C_SUFFIX__='
|
||||
- '-D__INT8_FMTd__="hhd"'
|
||||
- '-D__INT8_FMTi__="hhi"'
|
||||
- '-D__INT8_MAX__=127'
|
||||
- '-D__INT8_TYPE__=signed char'
|
||||
- '-D__INTMAX_C_SUFFIX__=LL'
|
||||
- '-D__INTMAX_FMTd__="lld"'
|
||||
- '-D__INTMAX_FMTi__="lli"'
|
||||
- '-D__INTMAX_MAX__=9223372036854775807LL'
|
||||
- '-D__INTMAX_TYPE__=long long int'
|
||||
- '-D__INTMAX_WIDTH__=64'
|
||||
- '-D__INTPTR_FMTd__="d"'
|
||||
- '-D__INTPTR_FMTi__="i"'
|
||||
- '-D__INTPTR_MAX__=2147483647'
|
||||
- '-D__INTPTR_TYPE__=int'
|
||||
- '-D__INTPTR_WIDTH__=32'
|
||||
- '-D__INT_FAST16_FMTd__="hd"'
|
||||
- '-D__INT_FAST16_FMTi__="hi"'
|
||||
- '-D__INT_FAST16_MAX__=32767'
|
||||
- '-D__INT_FAST16_TYPE__=short'
|
||||
- '-D__INT_FAST16_WIDTH__=16'
|
||||
- '-D__INT_FAST32_FMTd__="d"'
|
||||
- '-D__INT_FAST32_FMTi__="i"'
|
||||
- '-D__INT_FAST32_MAX__=2147483647'
|
||||
- '-D__INT_FAST32_TYPE__=int'
|
||||
- '-D__INT_FAST32_WIDTH__=32'
|
||||
- '-D__INT_FAST64_FMTd__="lld"'
|
||||
- '-D__INT_FAST64_FMTi__="lli"'
|
||||
- '-D__INT_FAST64_MAX__=9223372036854775807LL'
|
||||
- '-D__INT_FAST64_TYPE__=long long int'
|
||||
- '-D__INT_FAST64_WIDTH__=64'
|
||||
- '-D__INT_FAST8_FMTd__="hhd"'
|
||||
- '-D__INT_FAST8_FMTi__="hhi"'
|
||||
- '-D__INT_FAST8_MAX__=127'
|
||||
- '-D__INT_FAST8_TYPE__=signed char'
|
||||
- '-D__INT_FAST8_WIDTH__=8'
|
||||
- '-D__INT_LEAST16_FMTd__="hd"'
|
||||
- '-D__INT_LEAST16_FMTi__="hi"'
|
||||
- '-D__INT_LEAST16_MAX__=32767'
|
||||
- '-D__INT_LEAST16_TYPE__=short'
|
||||
- '-D__INT_LEAST16_WIDTH__=16'
|
||||
- '-D__INT_LEAST32_FMTd__="d"'
|
||||
- '-D__INT_LEAST32_FMTi__="i"'
|
||||
- '-D__INT_LEAST32_MAX__=2147483647'
|
||||
- '-D__INT_LEAST32_TYPE__=int'
|
||||
- '-D__INT_LEAST32_WIDTH__=32'
|
||||
- '-D__INT_LEAST64_FMTd__="lld"'
|
||||
- '-D__INT_LEAST64_FMTi__="lli"'
|
||||
- '-D__INT_LEAST64_MAX__=9223372036854775807LL'
|
||||
- '-D__INT_LEAST64_TYPE__=long long int'
|
||||
- '-D__INT_LEAST64_WIDTH__=64'
|
||||
- '-D__INT_LEAST8_FMTd__="hhd"'
|
||||
- '-D__INT_LEAST8_FMTi__="hhi"'
|
||||
- '-D__INT_LEAST8_MAX__=127'
|
||||
- '-D__INT_LEAST8_TYPE__=signed char'
|
||||
- '-D__INT_LEAST8_WIDTH__=8'
|
||||
- '-D__INT_MAX__=2147483647'
|
||||
- '-D__INT_WIDTH__=32'
|
||||
- '-D__I__=1.0if'
|
||||
- '-D__LDBL_DECIMAL_DIG__=17'
|
||||
- '-D__LDBL_DENORM_MIN__=4.9406564584124654e-324L'
|
||||
- '-D__LDBL_DIG__=15'
|
||||
- '-D__LDBL_EPSILON__=2.2204460492503131e-16L'
|
||||
- '-D__LDBL_HAS_DENORM__=1'
|
||||
- '-D__LDBL_HAS_INFINITY__=1'
|
||||
- '-D__LDBL_HAS_QUIET_NAN__=1'
|
||||
- '-D__LDBL_MANT_DIG__=53'
|
||||
- '-D__LDBL_MAX_10_EXP__=308'
|
||||
- '-D__LDBL_MAX_EXP__=1024'
|
||||
- '-D__LDBL_MAX__=1.7976931348623157e+308L'
|
||||
- '-D__LDBL_MIN_10_EXP__=(-307)'
|
||||
- '-D__LDBL_MIN_EXP__=(-1021)'
|
||||
- '-D__LDBL_MIN__=2.2250738585072014e-308L'
|
||||
- '-D__LDBL_NORM_MAX__=1.7976931348623157e+308L'
|
||||
- '-D__LITTLE_ENDIAN__=1'
|
||||
- '-D__LLONG_WIDTH__=64'
|
||||
- '-D__LONG_LONG_MAX__=9223372036854775807LL'
|
||||
- '-D__LONG_MAX__=2147483647L'
|
||||
- '-D__LONG_WIDTH__=32'
|
||||
- '-D__MEMORY_SCOPE_DEVICE=1'
|
||||
- '-D__MEMORY_SCOPE_SINGLE=4'
|
||||
- '-D__MEMORY_SCOPE_SYSTEM=0'
|
||||
- '-D__MEMORY_SCOPE_WRKGRP=2'
|
||||
- '-D__MEMORY_SCOPE_WVFRNT=3'
|
||||
- '-D__OBJC_BOOL_IS_BOOL=0'
|
||||
- '-D__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES=3'
|
||||
- '-D__OPENCL_MEMORY_SCOPE_DEVICE=2'
|
||||
- '-D__OPENCL_MEMORY_SCOPE_SUB_GROUP=4'
|
||||
- '-D__OPENCL_MEMORY_SCOPE_WORK_GROUP=1'
|
||||
- '-D__OPENCL_MEMORY_SCOPE_WORK_ITEM=0'
|
||||
- '-D__OPTIMIZE__=1'
|
||||
- '-D__ORDER_BIG_ENDIAN__=4321'
|
||||
- '-D__ORDER_LITTLE_ENDIAN__=1234'
|
||||
- '-D__ORDER_PDP_ENDIAN__=3412'
|
||||
- '-D__POINTER_WIDTH__=32'
|
||||
- '-D__PRAGMA_REDEFINE_EXTNAME=1'
|
||||
- '-D__PTRDIFF_FMTd__="d"'
|
||||
- '-D__PTRDIFF_FMTi__="i"'
|
||||
- '-D__PTRDIFF_MAX__=2147483647'
|
||||
- '-D__PTRDIFF_TYPE__=int'
|
||||
- '-D__PTRDIFF_WIDTH__=32'
|
||||
- '-D__REGISTER_PREFIX__='
|
||||
- '-D__SCHAR_MAX__=127'
|
||||
- '-D__SHRT_MAX__=32767'
|
||||
- '-D__SHRT_WIDTH__=16'
|
||||
- '-D__SIG_ATOMIC_MAX__=2147483647'
|
||||
- '-D__SIG_ATOMIC_WIDTH__=32'
|
||||
- '-D__SIZEOF_DOUBLE__=8'
|
||||
- '-D__SIZEOF_FLOAT__=4'
|
||||
- '-D__SIZEOF_INT__=4'
|
||||
- '-D__SIZEOF_LONG_DOUBLE__=8'
|
||||
- '-D__SIZEOF_LONG_LONG__=8'
|
||||
- '-D__SIZEOF_LONG__=4'
|
||||
- '-D__SIZEOF_POINTER__=4'
|
||||
- '-D__SIZEOF_PTRDIFF_T__=4'
|
||||
- '-D__SIZEOF_SHORT__=2'
|
||||
- '-D__SIZEOF_SIZE_T__=4'
|
||||
- '-D__SIZEOF_WCHAR_T__=2'
|
||||
- '-D__SIZEOF_WINT_T__=4'
|
||||
- '-D__SIZE_FMTX__="X"'
|
||||
- '-D__SIZE_FMTo__="o"'
|
||||
- '-D__SIZE_FMTu__="u"'
|
||||
- '-D__SIZE_FMTx__="x"'
|
||||
- '-D__SIZE_MAX__=4294967295U'
|
||||
- '-D__SIZE_TYPE__=unsigned int'
|
||||
- '-D__SIZE_WIDTH__=32'
|
||||
- '-D__STDC_EMBED_EMPTY__=2'
|
||||
- '-D__STDC_EMBED_FOUND__=1'
|
||||
- '-D__STDC_EMBED_NOT_FOUND__=0'
|
||||
- '-D__STDC_HOSTED__=1'
|
||||
- '-D__STDC_UTF_16__=1'
|
||||
- '-D__STDC_UTF_32__=1'
|
||||
- '-D__STDC_VERSION__=201710L'
|
||||
- '-D__STDC__=1'
|
||||
- '-D__THUMBEL__=1'
|
||||
- '-D__THUMB_INTERWORK__=1'
|
||||
- '-D__UINT16_C_SUFFIX__='
|
||||
- '-D__UINT16_FMTX__="hX"'
|
||||
- '-D__UINT16_FMTo__="ho"'
|
||||
- '-D__UINT16_FMTu__="hu"'
|
||||
- '-D__UINT16_FMTx__="hx"'
|
||||
- '-D__UINT16_MAX__=65535'
|
||||
- '-D__UINT16_TYPE__=unsigned short'
|
||||
- '-D__UINT32_C_SUFFIX__=U'
|
||||
- '-D__UINT32_FMTX__="X"'
|
||||
- '-D__UINT32_FMTo__="o"'
|
||||
- '-D__UINT32_FMTu__="u"'
|
||||
- '-D__UINT32_FMTx__="x"'
|
||||
- '-D__UINT32_MAX__=4294967295U'
|
||||
- '-D__UINT32_TYPE__=unsigned int'
|
||||
- '-D__UINT64_C_SUFFIX__=ULL'
|
||||
- '-D__UINT64_FMTX__="llX"'
|
||||
- '-D__UINT64_FMTo__="llo"'
|
||||
- '-D__UINT64_FMTu__="llu"'
|
||||
- '-D__UINT64_FMTx__="llx"'
|
||||
- '-D__UINT64_MAX__=18446744073709551615ULL'
|
||||
- '-D__UINT64_TYPE__=long long unsigned int'
|
||||
- '-D__UINT8_C_SUFFIX__='
|
||||
- '-D__UINT8_FMTX__="hhX"'
|
||||
- '-D__UINT8_FMTo__="hho"'
|
||||
- '-D__UINT8_FMTu__="hhu"'
|
||||
- '-D__UINT8_FMTx__="hhx"'
|
||||
- '-D__UINT8_MAX__=255'
|
||||
- '-D__UINT8_TYPE__=unsigned char'
|
||||
- '-D__UINTMAX_C_SUFFIX__=ULL'
|
||||
- '-D__UINTMAX_FMTX__="llX"'
|
||||
- '-D__UINTMAX_FMTo__="llo"'
|
||||
- '-D__UINTMAX_FMTu__="llu"'
|
||||
- '-D__UINTMAX_FMTx__="llx"'
|
||||
- '-D__UINTMAX_MAX__=18446744073709551615ULL'
|
||||
- '-D__UINTMAX_TYPE__=long long unsigned int'
|
||||
- '-D__UINTMAX_WIDTH__=64'
|
||||
- '-D__UINTPTR_FMTX__="X"'
|
||||
- '-D__UINTPTR_FMTo__="o"'
|
||||
- '-D__UINTPTR_FMTu__="u"'
|
||||
- '-D__UINTPTR_FMTx__="x"'
|
||||
- '-D__UINTPTR_MAX__=4294967295U'
|
||||
- '-D__UINTPTR_TYPE__=unsigned int'
|
||||
- '-D__UINTPTR_WIDTH__=32'
|
||||
- '-D__UINT_FAST16_FMTX__="hX"'
|
||||
- '-D__UINT_FAST16_FMTo__="ho"'
|
||||
- '-D__UINT_FAST16_FMTu__="hu"'
|
||||
- '-D__UINT_FAST16_FMTx__="hx"'
|
||||
- '-D__UINT_FAST16_MAX__=65535'
|
||||
- '-D__UINT_FAST16_TYPE__=unsigned short'
|
||||
- '-D__UINT_FAST32_FMTX__="X"'
|
||||
- '-D__UINT_FAST32_FMTo__="o"'
|
||||
- '-D__UINT_FAST32_FMTu__="u"'
|
||||
- '-D__UINT_FAST32_FMTx__="x"'
|
||||
- '-D__UINT_FAST32_MAX__=4294967295U'
|
||||
- '-D__UINT_FAST32_TYPE__=unsigned int'
|
||||
- '-D__UINT_FAST64_FMTX__="llX"'
|
||||
- '-D__UINT_FAST64_FMTo__="llo"'
|
||||
- '-D__UINT_FAST64_FMTu__="llu"'
|
||||
- '-D__UINT_FAST64_FMTx__="llx"'
|
||||
- '-D__UINT_FAST64_MAX__=18446744073709551615ULL'
|
||||
- '-D__UINT_FAST64_TYPE__=long long unsigned int'
|
||||
- '-D__UINT_FAST8_FMTX__="hhX"'
|
||||
- '-D__UINT_FAST8_FMTo__="hho"'
|
||||
- '-D__UINT_FAST8_FMTu__="hhu"'
|
||||
- '-D__UINT_FAST8_FMTx__="hhx"'
|
||||
- '-D__UINT_FAST8_MAX__=255'
|
||||
- '-D__UINT_FAST8_TYPE__=unsigned char'
|
||||
- '-D__UINT_LEAST16_FMTX__="hX"'
|
||||
- '-D__UINT_LEAST16_FMTo__="ho"'
|
||||
- '-D__UINT_LEAST16_FMTu__="hu"'
|
||||
- '-D__UINT_LEAST16_FMTx__="hx"'
|
||||
- '-D__UINT_LEAST16_MAX__=65535'
|
||||
- '-D__UINT_LEAST16_TYPE__=unsigned short'
|
||||
- '-D__UINT_LEAST32_FMTX__="X"'
|
||||
- '-D__UINT_LEAST32_FMTo__="o"'
|
||||
- '-D__UINT_LEAST32_FMTu__="u"'
|
||||
- '-D__UINT_LEAST32_FMTx__="x"'
|
||||
- '-D__UINT_LEAST32_MAX__=4294967295U'
|
||||
- '-D__UINT_LEAST32_TYPE__=unsigned int'
|
||||
- '-D__UINT_LEAST64_FMTX__="llX"'
|
||||
- '-D__UINT_LEAST64_FMTo__="llo"'
|
||||
- '-D__UINT_LEAST64_FMTu__="llu"'
|
||||
- '-D__UINT_LEAST64_FMTx__="llx"'
|
||||
- '-D__UINT_LEAST64_MAX__=18446744073709551615ULL'
|
||||
- '-D__UINT_LEAST64_TYPE__=long long unsigned int'
|
||||
- '-D__UINT_LEAST8_FMTX__="hhX"'
|
||||
- '-D__UINT_LEAST8_FMTo__="hho"'
|
||||
- '-D__UINT_LEAST8_FMTu__="hhu"'
|
||||
- '-D__UINT_LEAST8_FMTx__="hhx"'
|
||||
- '-D__UINT_LEAST8_MAX__=255'
|
||||
- '-D__UINT_LEAST8_TYPE__=unsigned char'
|
||||
- '-D__USER_LABEL_PREFIX__='
|
||||
- '-D__VERSION__="Clang 20.0.0git"'
|
||||
- '-D__VFP_FP__=1'
|
||||
- '-D__WCHAR_MAX__=65535'
|
||||
- '-D__WCHAR_TYPE__=unsigned short'
|
||||
- '-D__WCHAR_UNSIGNED__=1'
|
||||
- '-D__WCHAR_WIDTH__=16'
|
||||
- '-D__WINT_MAX__=2147483647'
|
||||
- '-D__WINT_TYPE__=int'
|
||||
- '-D__WINT_WIDTH__=32'
|
||||
- '-D__arm=1'
|
||||
- '-D__arm__=1'
|
||||
- '-D__clang__=1'
|
||||
- '-D__clang_literal_encoding__="UTF-8"'
|
||||
- '-D__clang_major__=20'
|
||||
- '-D__clang_minor__=0'
|
||||
- '-D__clang_patchlevel__=0'
|
||||
- '-D__clang_version__="20.0.0git "'
|
||||
- '-D__clang_wide_literal_encoding__="UTF-16"'
|
||||
- '-D__llvm__=1'
|
||||
- '-D__thumb2__=1'
|
||||
- '-D__thumb__=1'
|
||||
- "-D_ILP32=1\r\n"
|
||||
- "-D_USE_STATIC_INLINE=1\r\n"
|
||||
- "-D__APCS_32__=1\r\n"
|
||||
- "-D__ARMCC_VERSION=6240002\r\n"
|
||||
- "-D__ARMCOMPILER_VERSION=6240002\r\n"
|
||||
- "-D__ARMEL__=1\r\n"
|
||||
- "-D__ARM_32BIT_STATE=1\r\n"
|
||||
- "-D__ARM_ACLE=200\r\n"
|
||||
- "-D__ARM_ARCH=7\r\n"
|
||||
- "-D__ARM_ARCH_7EM__=1\r\n"
|
||||
- "-D__ARM_ARCH_EXT_IDIV__=1\r\n"
|
||||
- "-D__ARM_ARCH_ISA_THUMB=2\r\n"
|
||||
- "-D__ARM_ARCH_PROFILE='M'\r\n"
|
||||
- "-D__ARM_EABI__=1\r\n"
|
||||
- "-D__ARM_FEATURE_CLZ=1\r\n"
|
||||
- "-D__ARM_FEATURE_COPROC=0xf\r\n"
|
||||
- "-D__ARM_FEATURE_DSP=1\r\n"
|
||||
- "-D__ARM_FEATURE_FMA=1\r\n"
|
||||
- "-D__ARM_FEATURE_IDIV=1\r\n"
|
||||
- "-D__ARM_FEATURE_LDREX=0x7\r\n"
|
||||
- "-D__ARM_FEATURE_QBIT=1\r\n"
|
||||
- "-D__ARM_FEATURE_SAT=1\r\n"
|
||||
- "-D__ARM_FEATURE_SIMD32=1\r\n"
|
||||
- "-D__ARM_FEATURE_UNALIGNED=1\r\n"
|
||||
- "-D__ARM_FP=0x6\r\n"
|
||||
- "-D__ARM_FP16_ARGS=1\r\n"
|
||||
- "-D__ARM_FP16_FORMAT_IEEE=1\r\n"
|
||||
- "-D__ARM_NO_IMAGINARY_TYPE=1\r\n"
|
||||
- "-D__ARM_PCS=1\r\n"
|
||||
- "-D__ARM_PCS_VFP=1\r\n"
|
||||
- "-D__ARM_PROMISE=__builtin_assume\r\n"
|
||||
- "-D__ARM_SIZEOF_MINIMAL_ENUM=1\r\n"
|
||||
- "-D__ARM_SIZEOF_WCHAR_T=2\r\n"
|
||||
- "-D__ARM_VFPV2__=1\r\n"
|
||||
- "-D__ARM_VFPV3__=1\r\n"
|
||||
- "-D__ARM_VFPV4__=1\r\n"
|
||||
- "-D__ATOMIC_ACQUIRE=2\r\n"
|
||||
- "-D__ATOMIC_ACQ_REL=4\r\n"
|
||||
- "-D__ATOMIC_CONSUME=1\r\n"
|
||||
- "-D__ATOMIC_RELAXED=0\r\n"
|
||||
- "-D__ATOMIC_RELEASE=3\r\n"
|
||||
- "-D__ATOMIC_SEQ_CST=5\r\n"
|
||||
- "-D__BIGGEST_ALIGNMENT__=8\r\n"
|
||||
- "-D__BITINT_MAXWIDTH__=128\r\n"
|
||||
- "-D__BOOL_WIDTH__=8\r\n"
|
||||
- "-D__BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__\r\n"
|
||||
- "-D__CHAR16_TYPE__=unsigned short\r\n"
|
||||
- "-D__CHAR32_TYPE__=unsigned int\r\n"
|
||||
- "-D__CHAR_BIT__=8\r\n"
|
||||
- "-D__CHAR_UNSIGNED__=1\r\n"
|
||||
- "-D__CLANG_ATOMIC_BOOL_LOCK_FREE=2\r\n"
|
||||
- "-D__CLANG_ATOMIC_CHAR16_T_LOCK_FREE=2\r\n"
|
||||
- "-D__CLANG_ATOMIC_CHAR32_T_LOCK_FREE=2\r\n"
|
||||
- "-D__CLANG_ATOMIC_CHAR_LOCK_FREE=2\r\n"
|
||||
- "-D__CLANG_ATOMIC_INT_LOCK_FREE=2\r\n"
|
||||
- "-D__CLANG_ATOMIC_LLONG_LOCK_FREE=1\r\n"
|
||||
- "-D__CLANG_ATOMIC_LONG_LOCK_FREE=2\r\n"
|
||||
- "-D__CLANG_ATOMIC_POINTER_LOCK_FREE=2\r\n"
|
||||
- "-D__CLANG_ATOMIC_SHORT_LOCK_FREE=2\r\n"
|
||||
- "-D__CLANG_ATOMIC_WCHAR_T_LOCK_FREE=2\r\n"
|
||||
- "-D__CONSTANT_CFSTRINGS__=1\r\n"
|
||||
- "-D__DBL_DECIMAL_DIG__=17\r\n"
|
||||
- "-D__DBL_DENORM_MIN__=4.9406564584124654e-324\r\n"
|
||||
- "-D__DBL_DIG__=15\r\n"
|
||||
- "-D__DBL_EPSILON__=2.2204460492503131e-16\r\n"
|
||||
- "-D__DBL_HAS_DENORM__=1\r\n"
|
||||
- "-D__DBL_HAS_INFINITY__=1\r\n"
|
||||
- "-D__DBL_HAS_QUIET_NAN__=1\r\n"
|
||||
- "-D__DBL_MANT_DIG__=53\r\n"
|
||||
- "-D__DBL_MAX_10_EXP__=308\r\n"
|
||||
- "-D__DBL_MAX_EXP__=1024\r\n"
|
||||
- "-D__DBL_MAX__=1.7976931348623157e+308\r\n"
|
||||
- "-D__DBL_MIN_10_EXP__=(-307)\r\n"
|
||||
- "-D__DBL_MIN_EXP__=(-1021)\r\n"
|
||||
- "-D__DBL_MIN__=2.2250738585072014e-308\r\n"
|
||||
- "-D__DBL_NORM_MAX__=1.7976931348623157e+308\r\n"
|
||||
- "-D__DECIMAL_DIG__=__LDBL_DECIMAL_DIG__\r\n"
|
||||
- "-D__ELF__=1\r\n"
|
||||
- "-D__ESCAPE__=\r\n"
|
||||
- "-D__FINITE_MATH_ONLY__=1\r\n"
|
||||
- "-D__FLT16_DECIMAL_DIG__=5\r\n"
|
||||
- "-D__FLT16_DENORM_MIN__=5.9604644775390625e-8F16\r\n"
|
||||
- "-D__FLT16_DIG__=3\r\n"
|
||||
- "-D__FLT16_EPSILON__=9.765625e-4F16\r\n"
|
||||
- "-D__FLT16_HAS_DENORM__=1\r\n"
|
||||
- "-D__FLT16_HAS_INFINITY__=1\r\n"
|
||||
- "-D__FLT16_HAS_QUIET_NAN__=1\r\n"
|
||||
- "-D__FLT16_MANT_DIG__=11\r\n"
|
||||
- "-D__FLT16_MAX_10_EXP__=4\r\n"
|
||||
- "-D__FLT16_MAX_EXP__=16\r\n"
|
||||
- "-D__FLT16_MAX__=6.5504e+4F16\r\n"
|
||||
- "-D__FLT16_MIN_10_EXP__=(-4)\r\n"
|
||||
- "-D__FLT16_MIN_EXP__=(-13)\r\n"
|
||||
- "-D__FLT16_MIN__=6.103515625e-5F16\r\n"
|
||||
- "-D__FLT16_NORM_MAX__=6.5504e+4F16\r\n"
|
||||
- "-D__FLT_DECIMAL_DIG__=9\r\n"
|
||||
- "-D__FLT_DENORM_MIN__=1.40129846e-45F\r\n"
|
||||
- "-D__FLT_DIG__=6\r\n"
|
||||
- "-D__FLT_EPSILON__=1.19209290e-7F\r\n"
|
||||
- "-D__FLT_HAS_DENORM__=1\r\n"
|
||||
- "-D__FLT_HAS_INFINITY__=1\r\n"
|
||||
- "-D__FLT_HAS_QUIET_NAN__=1\r\n"
|
||||
- "-D__FLT_MANT_DIG__=24\r\n"
|
||||
- "-D__FLT_MAX_10_EXP__=38\r\n"
|
||||
- "-D__FLT_MAX_EXP__=128\r\n"
|
||||
- "-D__FLT_MAX__=3.40282347e+38F\r\n"
|
||||
- "-D__FLT_MIN_10_EXP__=(-37)\r\n"
|
||||
- "-D__FLT_MIN_EXP__=(-125)\r\n"
|
||||
- "-D__FLT_MIN__=1.17549435e-38F\r\n"
|
||||
- "-D__FLT_NORM_MAX__=3.40282347e+38F\r\n"
|
||||
- "-D__FLT_RADIX__=2\r\n"
|
||||
- "-D__FPCLASS_NEGINF=0x0004\r\n"
|
||||
- "-D__FPCLASS_NEGNORMAL=0x0008\r\n"
|
||||
- "-D__FPCLASS_NEGSUBNORMAL=0x0010\r\n"
|
||||
- "-D__FPCLASS_NEGZERO=0x0020\r\n"
|
||||
- "-D__FPCLASS_POSINF=0x0200\r\n"
|
||||
- "-D__FPCLASS_POSNORMAL=0x0100\r\n"
|
||||
- "-D__FPCLASS_POSSUBNORMAL=0x0080\r\n"
|
||||
- "-D__FPCLASS_POSZERO=0x0040\r\n"
|
||||
- "-D__FPCLASS_QNAN=0x0002\r\n"
|
||||
- "-D__FPCLASS_SNAN=0x0001\r\n"
|
||||
- "-D__GCC_ATOMIC_BOOL_LOCK_FREE=2\r\n"
|
||||
- "-D__GCC_ATOMIC_CHAR16_T_LOCK_FREE=2\r\n"
|
||||
- "-D__GCC_ATOMIC_CHAR32_T_LOCK_FREE=2\r\n"
|
||||
- "-D__GCC_ATOMIC_CHAR_LOCK_FREE=2\r\n"
|
||||
- "-D__GCC_ATOMIC_INT_LOCK_FREE=2\r\n"
|
||||
- "-D__GCC_ATOMIC_LLONG_LOCK_FREE=1\r\n"
|
||||
- "-D__GCC_ATOMIC_LONG_LOCK_FREE=2\r\n"
|
||||
- "-D__GCC_ATOMIC_POINTER_LOCK_FREE=2\r\n"
|
||||
- "-D__GCC_ATOMIC_SHORT_LOCK_FREE=2\r\n"
|
||||
- "-D__GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1\r\n"
|
||||
- "-D__GCC_ATOMIC_WCHAR_T_LOCK_FREE=2\r\n"
|
||||
- "-D__GCC_CONSTRUCTIVE_SIZE=64\r\n"
|
||||
- "-D__GCC_DESTRUCTIVE_SIZE=64\r\n"
|
||||
- "-D__GCC_HAVE_DWARF2_CFI_ASM=1\r\n"
|
||||
- "-D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1\r\n"
|
||||
- "-D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1\r\n"
|
||||
- "-D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1\r\n"
|
||||
- "-D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8=1\r\n"
|
||||
- "-D__GNUC_MINOR__=2\r\n"
|
||||
- "-D__GNUC_PATCHLEVEL__=1\r\n"
|
||||
- "-D__GNUC_STDC_INLINE__=1\r\n"
|
||||
- "-D__GNUC__=4\r\n"
|
||||
- "-D__GXX_ABI_VERSION=1002\r\n"
|
||||
- "-D__ILP32__=1\r\n"
|
||||
- "-D__INT16_C_SUFFIX__=\r\n"
|
||||
- "-D__INT16_FMTd__=\"hd\"\r\n"
|
||||
- "-D__INT16_FMTi__=\"hi\"\r\n"
|
||||
- "-D__INT16_MAX__=32767\r\n"
|
||||
- "-D__INT16_TYPE__=short\r\n"
|
||||
- "-D__INT32_C_SUFFIX__=\r\n"
|
||||
- "-D__INT32_FMTd__=\"d\"\r\n"
|
||||
- "-D__INT32_FMTi__=\"i\"\r\n"
|
||||
- "-D__INT32_MAX__=2147483647\r\n"
|
||||
- "-D__INT32_TYPE__=int\r\n"
|
||||
- "-D__INT64_C_SUFFIX__=LL\r\n"
|
||||
- "-D__INT64_FMTd__=\"lld\"\r\n"
|
||||
- "-D__INT64_FMTi__=\"lli\"\r\n"
|
||||
- "-D__INT64_MAX__=9223372036854775807LL\r\n"
|
||||
- "-D__INT64_TYPE__=long long int\r\n"
|
||||
- "-D__INT8_C_SUFFIX__=\r\n"
|
||||
- "-D__INT8_FMTd__=\"hhd\"\r\n"
|
||||
- "-D__INT8_FMTi__=\"hhi\"\r\n"
|
||||
- "-D__INT8_MAX__=127\r\n"
|
||||
- "-D__INT8_TYPE__=signed char\r\n"
|
||||
- "-D__INTMAX_C_SUFFIX__=LL\r\n"
|
||||
- "-D__INTMAX_FMTd__=\"lld\"\r\n"
|
||||
- "-D__INTMAX_FMTi__=\"lli\"\r\n"
|
||||
- "-D__INTMAX_MAX__=9223372036854775807LL\r\n"
|
||||
- "-D__INTMAX_TYPE__=long long int\r\n"
|
||||
- "-D__INTMAX_WIDTH__=64\r\n"
|
||||
- "-D__INTPTR_FMTd__=\"d\"\r\n"
|
||||
- "-D__INTPTR_FMTi__=\"i\"\r\n"
|
||||
- "-D__INTPTR_MAX__=2147483647\r\n"
|
||||
- "-D__INTPTR_TYPE__=int\r\n"
|
||||
- "-D__INTPTR_WIDTH__=32\r\n"
|
||||
- "-D__INT_FAST16_FMTd__=\"hd\"\r\n"
|
||||
- "-D__INT_FAST16_FMTi__=\"hi\"\r\n"
|
||||
- "-D__INT_FAST16_MAX__=32767\r\n"
|
||||
- "-D__INT_FAST16_TYPE__=short\r\n"
|
||||
- "-D__INT_FAST16_WIDTH__=16\r\n"
|
||||
- "-D__INT_FAST32_FMTd__=\"d\"\r\n"
|
||||
- "-D__INT_FAST32_FMTi__=\"i\"\r\n"
|
||||
- "-D__INT_FAST32_MAX__=2147483647\r\n"
|
||||
- "-D__INT_FAST32_TYPE__=int\r\n"
|
||||
- "-D__INT_FAST32_WIDTH__=32\r\n"
|
||||
- "-D__INT_FAST64_FMTd__=\"lld\"\r\n"
|
||||
- "-D__INT_FAST64_FMTi__=\"lli\"\r\n"
|
||||
- "-D__INT_FAST64_MAX__=9223372036854775807LL\r\n"
|
||||
- "-D__INT_FAST64_TYPE__=long long int\r\n"
|
||||
- "-D__INT_FAST64_WIDTH__=64\r\n"
|
||||
- "-D__INT_FAST8_FMTd__=\"hhd\"\r\n"
|
||||
- "-D__INT_FAST8_FMTi__=\"hhi\"\r\n"
|
||||
- "-D__INT_FAST8_MAX__=127\r\n"
|
||||
- "-D__INT_FAST8_TYPE__=signed char\r\n"
|
||||
- "-D__INT_FAST8_WIDTH__=8\r\n"
|
||||
- "-D__INT_LEAST16_FMTd__=\"hd\"\r\n"
|
||||
- "-D__INT_LEAST16_FMTi__=\"hi\"\r\n"
|
||||
- "-D__INT_LEAST16_MAX__=32767\r\n"
|
||||
- "-D__INT_LEAST16_TYPE__=short\r\n"
|
||||
- "-D__INT_LEAST16_WIDTH__=16\r\n"
|
||||
- "-D__INT_LEAST32_FMTd__=\"d\"\r\n"
|
||||
- "-D__INT_LEAST32_FMTi__=\"i\"\r\n"
|
||||
- "-D__INT_LEAST32_MAX__=2147483647\r\n"
|
||||
- "-D__INT_LEAST32_TYPE__=int\r\n"
|
||||
- "-D__INT_LEAST32_WIDTH__=32\r\n"
|
||||
- "-D__INT_LEAST64_FMTd__=\"lld\"\r\n"
|
||||
- "-D__INT_LEAST64_FMTi__=\"lli\"\r\n"
|
||||
- "-D__INT_LEAST64_MAX__=9223372036854775807LL\r\n"
|
||||
- "-D__INT_LEAST64_TYPE__=long long int\r\n"
|
||||
- "-D__INT_LEAST64_WIDTH__=64\r\n"
|
||||
- "-D__INT_LEAST8_FMTd__=\"hhd\"\r\n"
|
||||
- "-D__INT_LEAST8_FMTi__=\"hhi\"\r\n"
|
||||
- "-D__INT_LEAST8_MAX__=127\r\n"
|
||||
- "-D__INT_LEAST8_TYPE__=signed char\r\n"
|
||||
- "-D__INT_LEAST8_WIDTH__=8\r\n"
|
||||
- "-D__INT_MAX__=2147483647\r\n"
|
||||
- "-D__INT_WIDTH__=32\r\n"
|
||||
- "-D__I__=1.0if\r\n"
|
||||
- "-D__LDBL_DECIMAL_DIG__=17\r\n"
|
||||
- "-D__LDBL_DENORM_MIN__=4.9406564584124654e-324L\r\n"
|
||||
- "-D__LDBL_DIG__=15\r\n"
|
||||
- "-D__LDBL_EPSILON__=2.2204460492503131e-16L\r\n"
|
||||
- "-D__LDBL_HAS_DENORM__=1\r\n"
|
||||
- "-D__LDBL_HAS_INFINITY__=1\r\n"
|
||||
- "-D__LDBL_HAS_QUIET_NAN__=1\r\n"
|
||||
- "-D__LDBL_MANT_DIG__=53\r\n"
|
||||
- "-D__LDBL_MAX_10_EXP__=308\r\n"
|
||||
- "-D__LDBL_MAX_EXP__=1024\r\n"
|
||||
- "-D__LDBL_MAX__=1.7976931348623157e+308L\r\n"
|
||||
- "-D__LDBL_MIN_10_EXP__=(-307)\r\n"
|
||||
- "-D__LDBL_MIN_EXP__=(-1021)\r\n"
|
||||
- "-D__LDBL_MIN__=2.2250738585072014e-308L\r\n"
|
||||
- "-D__LDBL_NORM_MAX__=1.7976931348623157e+308L\r\n"
|
||||
- "-D__LITTLE_ENDIAN__=1\r\n"
|
||||
- "-D__LLONG_WIDTH__=64\r\n"
|
||||
- "-D__LONG_LONG_MAX__=9223372036854775807LL\r\n"
|
||||
- "-D__LONG_MAX__=2147483647L\r\n"
|
||||
- "-D__LONG_WIDTH__=32\r\n"
|
||||
- "-D__MEMORY_SCOPE_DEVICE=1\r\n"
|
||||
- "-D__MEMORY_SCOPE_SINGLE=4\r\n"
|
||||
- "-D__MEMORY_SCOPE_SYSTEM=0\r\n"
|
||||
- "-D__MEMORY_SCOPE_WRKGRP=2\r\n"
|
||||
- "-D__MEMORY_SCOPE_WVFRNT=3\r\n"
|
||||
- "-D__NO_INLINE__=1\r\n"
|
||||
- "-D__OBJC_BOOL_IS_BOOL=0\r\n"
|
||||
- "-D__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES=3\r\n"
|
||||
- "-D__OPENCL_MEMORY_SCOPE_DEVICE=2\r\n"
|
||||
- "-D__OPENCL_MEMORY_SCOPE_SUB_GROUP=4\r\n"
|
||||
- "-D__OPENCL_MEMORY_SCOPE_WORK_GROUP=1\r\n"
|
||||
- "-D__OPENCL_MEMORY_SCOPE_WORK_ITEM=0\r\n"
|
||||
- "-D__ORDER_BIG_ENDIAN__=4321\r\n"
|
||||
- "-D__ORDER_LITTLE_ENDIAN__=1234\r\n"
|
||||
- "-D__ORDER_PDP_ENDIAN__=3412\r\n"
|
||||
- "-D__POINTER_WIDTH__=32\r\n"
|
||||
- "-D__PRAGMA_REDEFINE_EXTNAME=1\r\n"
|
||||
- "-D__PTRDIFF_FMTd__=\"d\"\r\n"
|
||||
- "-D__PTRDIFF_FMTi__=\"i\"\r\n"
|
||||
- "-D__PTRDIFF_MAX__=2147483647\r\n"
|
||||
- "-D__PTRDIFF_TYPE__=int\r\n"
|
||||
- "-D__PTRDIFF_WIDTH__=32\r\n"
|
||||
- "-D__REGISTER_PREFIX__=\r\n"
|
||||
- "-D__SCHAR_MAX__=127\r\n"
|
||||
- "-D__SHRT_MAX__=32767\r\n"
|
||||
- "-D__SHRT_WIDTH__=16\r\n"
|
||||
- "-D__SIG_ATOMIC_MAX__=2147483647\r\n"
|
||||
- "-D__SIG_ATOMIC_WIDTH__=32\r\n"
|
||||
- "-D__SIZEOF_DOUBLE__=8\r\n"
|
||||
- "-D__SIZEOF_FLOAT__=4\r\n"
|
||||
- "-D__SIZEOF_INT__=4\r\n"
|
||||
- "-D__SIZEOF_LONG_DOUBLE__=8\r\n"
|
||||
- "-D__SIZEOF_LONG_LONG__=8\r\n"
|
||||
- "-D__SIZEOF_LONG__=4\r\n"
|
||||
- "-D__SIZEOF_POINTER__=4\r\n"
|
||||
- "-D__SIZEOF_PTRDIFF_T__=4\r\n"
|
||||
- "-D__SIZEOF_SHORT__=2\r\n"
|
||||
- "-D__SIZEOF_SIZE_T__=4\r\n"
|
||||
- "-D__SIZEOF_WCHAR_T__=2\r\n"
|
||||
- "-D__SIZEOF_WINT_T__=4\r\n"
|
||||
- "-D__SIZE_FMTX__=\"X\"\r\n"
|
||||
- "-D__SIZE_FMTo__=\"o\"\r\n"
|
||||
- "-D__SIZE_FMTu__=\"u\"\r\n"
|
||||
- "-D__SIZE_FMTx__=\"x\"\r\n"
|
||||
- "-D__SIZE_MAX__=4294967295U\r\n"
|
||||
- "-D__SIZE_TYPE__=unsigned int\r\n"
|
||||
- "-D__SIZE_WIDTH__=32\r\n"
|
||||
- "-D__STDC_EMBED_EMPTY__=2\r\n"
|
||||
- "-D__STDC_EMBED_FOUND__=1\r\n"
|
||||
- "-D__STDC_EMBED_NOT_FOUND__=0\r\n"
|
||||
- "-D__STDC_HOSTED__=1\r\n"
|
||||
- "-D__STDC_UTF_16__=1\r\n"
|
||||
- "-D__STDC_UTF_32__=1\r\n"
|
||||
- "-D__STDC_VERSION__=201710L\r\n"
|
||||
- "-D__STDC__=1\r\n"
|
||||
- "-D__THUMBEL__=1\r\n"
|
||||
- "-D__THUMB_INTERWORK__=1\r\n"
|
||||
- "-D__UINT16_C_SUFFIX__=\r\n"
|
||||
- "-D__UINT16_FMTX__=\"hX\"\r\n"
|
||||
- "-D__UINT16_FMTo__=\"ho\"\r\n"
|
||||
- "-D__UINT16_FMTu__=\"hu\"\r\n"
|
||||
- "-D__UINT16_FMTx__=\"hx\"\r\n"
|
||||
- "-D__UINT16_MAX__=65535\r\n"
|
||||
- "-D__UINT16_TYPE__=unsigned short\r\n"
|
||||
- "-D__UINT32_C_SUFFIX__=U\r\n"
|
||||
- "-D__UINT32_FMTX__=\"X\"\r\n"
|
||||
- "-D__UINT32_FMTo__=\"o\"\r\n"
|
||||
- "-D__UINT32_FMTu__=\"u\"\r\n"
|
||||
- "-D__UINT32_FMTx__=\"x\"\r\n"
|
||||
- "-D__UINT32_MAX__=4294967295U\r\n"
|
||||
- "-D__UINT32_TYPE__=unsigned int\r\n"
|
||||
- "-D__UINT64_C_SUFFIX__=ULL\r\n"
|
||||
- "-D__UINT64_FMTX__=\"llX\"\r\n"
|
||||
- "-D__UINT64_FMTo__=\"llo\"\r\n"
|
||||
- "-D__UINT64_FMTu__=\"llu\"\r\n"
|
||||
- "-D__UINT64_FMTx__=\"llx\"\r\n"
|
||||
- "-D__UINT64_MAX__=18446744073709551615ULL\r\n"
|
||||
- "-D__UINT64_TYPE__=long long unsigned int\r\n"
|
||||
- "-D__UINT8_C_SUFFIX__=\r\n"
|
||||
- "-D__UINT8_FMTX__=\"hhX\"\r\n"
|
||||
- "-D__UINT8_FMTo__=\"hho\"\r\n"
|
||||
- "-D__UINT8_FMTu__=\"hhu\"\r\n"
|
||||
- "-D__UINT8_FMTx__=\"hhx\"\r\n"
|
||||
- "-D__UINT8_MAX__=255\r\n"
|
||||
- "-D__UINT8_TYPE__=unsigned char\r\n"
|
||||
- "-D__UINTMAX_C_SUFFIX__=ULL\r\n"
|
||||
- "-D__UINTMAX_FMTX__=\"llX\"\r\n"
|
||||
- "-D__UINTMAX_FMTo__=\"llo\"\r\n"
|
||||
- "-D__UINTMAX_FMTu__=\"llu\"\r\n"
|
||||
- "-D__UINTMAX_FMTx__=\"llx\"\r\n"
|
||||
- "-D__UINTMAX_MAX__=18446744073709551615ULL\r\n"
|
||||
- "-D__UINTMAX_TYPE__=long long unsigned int\r\n"
|
||||
- "-D__UINTMAX_WIDTH__=64\r\n"
|
||||
- "-D__UINTPTR_FMTX__=\"X\"\r\n"
|
||||
- "-D__UINTPTR_FMTo__=\"o\"\r\n"
|
||||
- "-D__UINTPTR_FMTu__=\"u\"\r\n"
|
||||
- "-D__UINTPTR_FMTx__=\"x\"\r\n"
|
||||
- "-D__UINTPTR_MAX__=4294967295U\r\n"
|
||||
- "-D__UINTPTR_TYPE__=unsigned int\r\n"
|
||||
- "-D__UINTPTR_WIDTH__=32\r\n"
|
||||
- "-D__UINT_FAST16_FMTX__=\"hX\"\r\n"
|
||||
- "-D__UINT_FAST16_FMTo__=\"ho\"\r\n"
|
||||
- "-D__UINT_FAST16_FMTu__=\"hu\"\r\n"
|
||||
- "-D__UINT_FAST16_FMTx__=\"hx\"\r\n"
|
||||
- "-D__UINT_FAST16_MAX__=65535\r\n"
|
||||
- "-D__UINT_FAST16_TYPE__=unsigned short\r\n"
|
||||
- "-D__UINT_FAST32_FMTX__=\"X\"\r\n"
|
||||
- "-D__UINT_FAST32_FMTo__=\"o\"\r\n"
|
||||
- "-D__UINT_FAST32_FMTu__=\"u\"\r\n"
|
||||
- "-D__UINT_FAST32_FMTx__=\"x\"\r\n"
|
||||
- "-D__UINT_FAST32_MAX__=4294967295U\r\n"
|
||||
- "-D__UINT_FAST32_TYPE__=unsigned int\r\n"
|
||||
- "-D__UINT_FAST64_FMTX__=\"llX\"\r\n"
|
||||
- "-D__UINT_FAST64_FMTo__=\"llo\"\r\n"
|
||||
- "-D__UINT_FAST64_FMTu__=\"llu\"\r\n"
|
||||
- "-D__UINT_FAST64_FMTx__=\"llx\"\r\n"
|
||||
- "-D__UINT_FAST64_MAX__=18446744073709551615ULL\r\n"
|
||||
- "-D__UINT_FAST64_TYPE__=long long unsigned int\r\n"
|
||||
- "-D__UINT_FAST8_FMTX__=\"hhX\"\r\n"
|
||||
- "-D__UINT_FAST8_FMTo__=\"hho\"\r\n"
|
||||
- "-D__UINT_FAST8_FMTu__=\"hhu\"\r\n"
|
||||
- "-D__UINT_FAST8_FMTx__=\"hhx\"\r\n"
|
||||
- "-D__UINT_FAST8_MAX__=255\r\n"
|
||||
- "-D__UINT_FAST8_TYPE__=unsigned char\r\n"
|
||||
- "-D__UINT_LEAST16_FMTX__=\"hX\"\r\n"
|
||||
- "-D__UINT_LEAST16_FMTo__=\"ho\"\r\n"
|
||||
- "-D__UINT_LEAST16_FMTu__=\"hu\"\r\n"
|
||||
- "-D__UINT_LEAST16_FMTx__=\"hx\"\r\n"
|
||||
- "-D__UINT_LEAST16_MAX__=65535\r\n"
|
||||
- "-D__UINT_LEAST16_TYPE__=unsigned short\r\n"
|
||||
- "-D__UINT_LEAST32_FMTX__=\"X\"\r\n"
|
||||
- "-D__UINT_LEAST32_FMTo__=\"o\"\r\n"
|
||||
- "-D__UINT_LEAST32_FMTu__=\"u\"\r\n"
|
||||
- "-D__UINT_LEAST32_FMTx__=\"x\"\r\n"
|
||||
- "-D__UINT_LEAST32_MAX__=4294967295U\r\n"
|
||||
- "-D__UINT_LEAST32_TYPE__=unsigned int\r\n"
|
||||
- "-D__UINT_LEAST64_FMTX__=\"llX\"\r\n"
|
||||
- "-D__UINT_LEAST64_FMTo__=\"llo\"\r\n"
|
||||
- "-D__UINT_LEAST64_FMTu__=\"llu\"\r\n"
|
||||
- "-D__UINT_LEAST64_FMTx__=\"llx\"\r\n"
|
||||
- "-D__UINT_LEAST64_MAX__=18446744073709551615ULL\r\n"
|
||||
- "-D__UINT_LEAST64_TYPE__=long long unsigned int\r\n"
|
||||
- "-D__UINT_LEAST8_FMTX__=\"hhX\"\r\n"
|
||||
- "-D__UINT_LEAST8_FMTo__=\"hho\"\r\n"
|
||||
- "-D__UINT_LEAST8_FMTu__=\"hhu\"\r\n"
|
||||
- "-D__UINT_LEAST8_FMTx__=\"hhx\"\r\n"
|
||||
- "-D__UINT_LEAST8_MAX__=255\r\n"
|
||||
- "-D__UINT_LEAST8_TYPE__=unsigned char\r\n"
|
||||
- "-D__USER_LABEL_PREFIX__=\r\n"
|
||||
- "-D__VERSION__=\"Clang 20.0.0git\"\r\n"
|
||||
- "-D__VFP_FP__=1\r\n"
|
||||
- "-D__WCHAR_MAX__=65535\r\n"
|
||||
- "-D__WCHAR_TYPE__=unsigned short\r\n"
|
||||
- "-D__WCHAR_UNSIGNED__=1\r\n"
|
||||
- "-D__WCHAR_WIDTH__=16\r\n"
|
||||
- "-D__WINT_MAX__=2147483647\r\n"
|
||||
- "-D__WINT_TYPE__=int\r\n"
|
||||
- "-D__WINT_WIDTH__=32\r\n"
|
||||
- "-D__arm=1\r\n"
|
||||
- "-D__arm__=1\r\n"
|
||||
- "-D__clang__=1\r\n"
|
||||
- "-D__clang_literal_encoding__=\"UTF-8\"\r\n"
|
||||
- "-D__clang_major__=20\r\n"
|
||||
- "-D__clang_minor__=0\r\n"
|
||||
- "-D__clang_patchlevel__=0\r\n"
|
||||
- "-D__clang_version__=\"20.0.0git \"\r\n"
|
||||
- "-D__clang_wide_literal_encoding__=\"UTF-16\"\r\n"
|
||||
- "-D__llvm__=1\r\n"
|
||||
- "-D__thumb2__=1\r\n"
|
||||
- "-D__thumb__=1\r\n"
|
||||
- '-D__ARMCOMPILER_LIBCXX=1'
|
||||
- '-IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB'
|
||||
- '-IG:/Robot_v2/BOOT/Robot_V2/RTE/_Debug_GD32C103CB'
|
||||
- '-IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include'
|
||||
- >-
|
||||
-IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
#define __ROM0_BASE 0x08000000
|
||||
// <o> Region size [bytes] <0x0-0xFFFFFFFF:8>
|
||||
// <i> Defines size of memory region. Default: 0x00020000
|
||||
#define __ROM0_SIZE 0x08005000
|
||||
#define __ROM0_SIZE 0x08006000
|
||||
// </h>
|
||||
|
||||
// <h> __ROM1 (unused)
|
||||
|
||||
+31
-22
@@ -6,8 +6,6 @@
|
||||
#include "gd32c10x_dma.h"
|
||||
#include "gd32c10x_gpio.h"
|
||||
#include "main.h"
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@@ -176,6 +174,10 @@ u8 CAN_transmiter::init() {
|
||||
/* initialize receive message */
|
||||
can_struct_para_init(CAN_RX_MESSAGE_STRUCT, &receive_message);
|
||||
|
||||
// 初始化计数器和标志位
|
||||
can0_receive_count = 0;
|
||||
can0_send_flag = RESET;
|
||||
|
||||
// 初始化DMA缓冲区
|
||||
memset(can_rx_buffer, 0, sizeof(can_rx_buffer));
|
||||
memset(can_tx_buffer, 0, sizeof(can_tx_buffer));
|
||||
@@ -184,28 +186,20 @@ u8 CAN_transmiter::init() {
|
||||
|
||||
/**
|
||||
* @brief CAN通信检查函数
|
||||
* @retval 0: 无新消息
|
||||
* 1: 有新消息
|
||||
* @retval 无
|
||||
*/
|
||||
void CAN_transmiter::communication_check() {
|
||||
// CAN0 发送数据标志
|
||||
if (SET == can0_send_flag) {
|
||||
can0_send_flag = RESET;
|
||||
}
|
||||
|
||||
// CAN0 接收数据标志
|
||||
if (SET == can0_receive_flag) {
|
||||
if (receive_message.rx_efid == CANFD_OTA_DATA_ID or
|
||||
receive_message.rx_efid == CANFD_OTA_REQ_ID) {
|
||||
ota.handleOTAMessage(receive_message.rx_efid,
|
||||
receive_message.rx_data,
|
||||
receive_message.rx_dlen);
|
||||
} else {
|
||||
#if CAN_DEBUG
|
||||
printf("Unknown CAN ID: %X\n", receive_message.rx_efid);
|
||||
#endif
|
||||
}
|
||||
can0_receive_flag = RESET;
|
||||
// CAN0 接收数据计数器
|
||||
if (can0_receive_count > 0) {
|
||||
can0_receive_count--;
|
||||
// 处理OTA消息(中断处理程序已确保只接收OTA相关ID)
|
||||
ota.handleOTAMessage(receive_message.rx_efid,
|
||||
receive_message.rx_data,
|
||||
receive_message.rx_dlen);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -225,7 +219,6 @@ u8 CAN_transmiter::sendBackup() { // 握手的时候
|
||||
return CANFD_AsyncSend(CANFD_OTA_ACK_ID, 0, transmit_data);
|
||||
}
|
||||
|
||||
|
||||
u8 CAN_transmiter::sendDATA_ACK(u32 packet_num,
|
||||
bool if_success) { // 发送数据的时候
|
||||
memset(transmit_data, 0, 4);
|
||||
@@ -255,10 +248,26 @@ void CAN0_RX0_IRQHandler(void) {
|
||||
dma_channel_enable(DMA0, DMA_CH4);
|
||||
|
||||
// 读取接收到的数据
|
||||
can_message_receive(CAN0, CAN_FIFO0, &CAN0_transmiter.receive_message);
|
||||
can_receive_message_struct temp_message;
|
||||
can_message_receive(CAN0, CAN_FIFO0, &temp_message);
|
||||
|
||||
// 接收标志位置1
|
||||
CAN0_transmiter.can0_receive_flag = SET;
|
||||
// 只处理指定的OTA相关ID(硬件过滤器已经确保只接收这些ID)
|
||||
if (temp_message.rx_efid == CANFD_OTA_DATA_ID ||
|
||||
temp_message.rx_efid == CANFD_OTA_REQ_ID ||
|
||||
temp_message.rx_efid == CANFD_OTA_ACK_ID ||
|
||||
temp_message.rx_efid == CANFD_OTA_WAIT_ID ||
|
||||
temp_message.rx_efid == CANFD_OTA_CANCEL_ID) {
|
||||
// 将消息复制到接收缓冲区
|
||||
CAN0_transmiter.receive_message = temp_message;
|
||||
// 增加待处理消息计数器
|
||||
if (CAN0_transmiter.can0_receive_count < 255) {
|
||||
CAN0_transmiter.can0_receive_count++;
|
||||
}
|
||||
} else {
|
||||
#if CAN_DEBUG
|
||||
printf("Unknown CAN ID: %X\n", temp_message.rx_efid);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
// 检查其他可能的中断源
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
#ifndef _CAN_H
|
||||
#define _CAN_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "cstdint"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "gd32c10x_can.h"
|
||||
#include "stdint.h"
|
||||
#include <stdio.h>
|
||||
|
||||
u8 can_gpio_init(void); // CAN引脚初始化
|
||||
@@ -32,7 +31,7 @@ class CAN_transmiter {
|
||||
u8 init(void);
|
||||
|
||||
can_receive_message_struct receive_message; // 接收消息结构体
|
||||
FlagStatus can0_receive_flag; // CAN0接收标志
|
||||
u8 can0_receive_count; // CAN0待处理消息计数器
|
||||
FlagStatus can0_send_flag; // CAN0发送标志
|
||||
|
||||
void communication_check(); // 通信检查
|
||||
|
||||
+8
-8
@@ -15,7 +15,7 @@ extern OTAHandler ota;
|
||||
|
||||
void BootloaderSystem::initHardware() {
|
||||
systick_config(); // 系统时钟初始化
|
||||
// USART0_init(); // 调试串口初始化
|
||||
USART0_init(); // 调试串口初始化
|
||||
|
||||
CAN0_transmiter.init();
|
||||
check_sleep();
|
||||
@@ -28,14 +28,14 @@ void BootloaderSystem::run() {
|
||||
u32 app_check = *flash_ptr;
|
||||
if (app_check == OTA_AVAL and
|
||||
app_enable == OTA_AVAL) { // APP已确认且激活,直接进入
|
||||
#if OTA_DEBUG
|
||||
#if DEBUG_OTA
|
||||
printf("Normal Mode\r\n");
|
||||
#endif
|
||||
// 正常模式:跳转到APP
|
||||
ota.jumpToApplication();
|
||||
} else if (app_check == OTA_AVAL and
|
||||
app_enable == OTA_NOT_AVAL) { // 手动禁用APP,进入OTA模式
|
||||
#if OTA_DEBUG
|
||||
#if DEBUG_OTA
|
||||
printf("OTA Mode1\r\n");
|
||||
#endif
|
||||
// OTA模式
|
||||
@@ -50,14 +50,14 @@ void BootloaderSystem::run() {
|
||||
u32 back_check = *flash_ptr;
|
||||
if (back_check == OTA_AVAL and
|
||||
back_aval == OTA_AVAL) { // backup已确认且激活,复制到主APP区域
|
||||
#if OTA_DEBUG
|
||||
#if DEBUG_OTA
|
||||
printf("OTA Mode3\r\n");
|
||||
#endif
|
||||
CAN0_transmiter.sendBackup();
|
||||
move_app_data(); // 恢复BACKUP
|
||||
ota.jumpToApplication(); // 跳转到APP
|
||||
} else { // backup无效,进入OTA模式
|
||||
#if OTA_DEBUG
|
||||
} else { // backup无效,进入OTA模式
|
||||
#if DEBUG_OTA
|
||||
printf("OTA Mode4\r\n");
|
||||
#endif
|
||||
// OTA模式
|
||||
@@ -68,12 +68,12 @@ void BootloaderSystem::run() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
sys.initHardware();
|
||||
// scanAppFlashContent();
|
||||
// test_decrypt();
|
||||
sys.run();
|
||||
|
||||
while (1)
|
||||
; // 不应该执行到这里
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#ifndef MAIN_H
|
||||
#define MAIN_H
|
||||
#include "cstdint"
|
||||
#include "stdint.h"
|
||||
#include "sys/OTA.h"
|
||||
|
||||
|
||||
+60
-52
@@ -2,11 +2,11 @@
|
||||
#include "Can.h"
|
||||
#include "aes128.h"
|
||||
#include "config.h"
|
||||
#include "core_cmFunc.h"
|
||||
#include "gd32c10x.h" // 主头文件,包含了gd32c10x_crc.h的内容
|
||||
#include "gd32c10x_fmc.h"
|
||||
#include "initial.h"
|
||||
#include "systick.h"
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <stdint.h>
|
||||
|
||||
extern CAN_transmiter CAN0_transmiter; // CAN初始化
|
||||
@@ -28,13 +28,14 @@ inline fmc_state_enum write_ADDRESS(u32 address, u32 data) {
|
||||
|
||||
/**
|
||||
* @brief 设置OTA配置参数到Flash
|
||||
*
|
||||
*
|
||||
* 此函数用于更新存储在Flash中的OTA相关标志位(如APP可用、启用、校验等)。
|
||||
* GD32的Flash特性是:只能将1写为0,不能将0写为1。若要将0变为1,必须先擦除整个页面。
|
||||
* 因此,本函数通过读取同一页内的所有参数,擦除该页,然后重新写入有效的参数来实现“写1”操作。
|
||||
*
|
||||
*
|
||||
* @param addr: 要设置的Flash地址
|
||||
* @param data: 要写入的数据 (通常为OTA_AVAL=0x00000000 或 OTA_NOT_AVAL=0xFFFFFFFF)
|
||||
* @param data: 要写入的数据 (通常为OTA_AVAL=0x00000000 或
|
||||
* OTA_NOT_AVAL=0xFFFFFFFF)
|
||||
* @retval FLASH_EEPROM_OK (0) 表示成功, 其他值表示失败
|
||||
*/
|
||||
u8 OTA_SET(u32 addr, u32 data) {
|
||||
@@ -59,7 +60,6 @@ u8 OTA_SET(u32 addr, u32 data) {
|
||||
}
|
||||
|
||||
// 3. 对于需要将0改回1的操作,必须先擦除整个Flash页
|
||||
// 首先读取同一页内所有相关配置参数的当前状态
|
||||
flash_ptr = (volatile u32 *)n_APP_LATEST_AVAL_ADDR;
|
||||
temp_val[0] = *flash_ptr;
|
||||
flash_ptr = (volatile u32 *)n_APP_BACKUP_AVAL_ADDR;
|
||||
@@ -74,11 +74,12 @@ u8 OTA_SET(u32 addr, u32 data) {
|
||||
temp_val[5] = *flash_ptr;
|
||||
|
||||
#if EEP_DEBUG
|
||||
printf("OTA_SET - Start updating configuration\r\n");
|
||||
printf("OTA_prepare write%08x at %08x\r\n", data, addr);
|
||||
// 修复:完整输出所有6个配置项的值,便于调试
|
||||
printf("LatestAval:0x%x, BackupAval:0x%x, LatestEn:0x%x, "
|
||||
"BackupEn:0x%x, LatestCheck:0x%x, BackupCheck:0x%x\r\n",
|
||||
temp_val[0], temp_val[1], temp_val[2], temp_val[3], temp_val[4], temp_val[5]);
|
||||
temp_val[0], temp_val[1], temp_val[2], temp_val[3], temp_val[4],
|
||||
temp_val[5]);
|
||||
#endif
|
||||
|
||||
// 4. 擦除包含所有配置参数的Flash页
|
||||
@@ -90,35 +91,37 @@ u8 OTA_SET(u32 addr, u32 data) {
|
||||
return FLASH_EEPROM_ERROR;
|
||||
}
|
||||
|
||||
// 5. 重新写入所有之前为有效(OTA_AVAL)的配置项
|
||||
// 注意:不包括当前正在设置的地址,因为它将在最后单独处理
|
||||
// 5. 重新写入所有之前读取的配置项值,只有0改F需要写,所以最后不用写
|
||||
for (int i = 0; i < OTA_CONFIG_NUM; i++) {
|
||||
u32 current_addr = n_APP_LATEST_AVAL_ADDR + 4 * i;
|
||||
if (temp_val[i] == OTA_AVAL && current_addr != addr) {
|
||||
fmc_status = write_ADDRESS(current_addr, OTA_AVAL);
|
||||
if (fmc_status != FMC_READY) {
|
||||
#if EEP_DEBUG
|
||||
printf("OTA_SET - Write backup value failed at 0x%08X!\r\n", current_addr);
|
||||
#endif
|
||||
return FLASH_EEPROM_ERROR;
|
||||
}
|
||||
if (current_addr != addr and temp_val[i] != OTA_NOT_AVAL) {
|
||||
fmc_status = write_ADDRESS(current_addr, temp_val[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// 6. 最后,写入本次调用的目标数据
|
||||
// 即使addr为0(理论上无效),也检查一下以避免潜在问题
|
||||
if (addr != 0) {
|
||||
fmc_status = write_ADDRESS(addr, data);
|
||||
if (fmc_status != FMC_READY) {
|
||||
#if EEP_DEBUG
|
||||
printf("OTA_SET - Final write to target address 0x%08X failed!\r\n", addr);
|
||||
// 3. 对于需要将0改回1的操作,必须先擦除整个Flash页
|
||||
flash_ptr = (volatile u32 *)n_APP_LATEST_AVAL_ADDR;
|
||||
temp_val[0] = *flash_ptr;
|
||||
flash_ptr = (volatile u32 *)n_APP_BACKUP_AVAL_ADDR;
|
||||
temp_val[1] = *flash_ptr;
|
||||
flash_ptr = (volatile u32 *)n_APP_LATEST_EN_ADDR;
|
||||
temp_val[2] = *flash_ptr;
|
||||
flash_ptr = (volatile u32 *)n_APP_BACKUP_EN_ADDR;
|
||||
temp_val[3] = *flash_ptr;
|
||||
flash_ptr = (volatile u32 *)n_APP_LATEST_CHECK_ADDR;
|
||||
temp_val[4] = *flash_ptr;
|
||||
flash_ptr = (volatile u32 *)n_APP_BACKUP_CHECK_ADDR;
|
||||
temp_val[5] = *flash_ptr;
|
||||
// 修复:完整输出所有6个配置项的值,便于调试
|
||||
printf("LatestAval:0x%x, BackupAval:0x%x, LatestEn:0x%x, "
|
||||
"BackupEn:0x%x, LatestCheck:0x%x, BackupCheck:0x%x\r\n",
|
||||
temp_val[0], temp_val[1], temp_val[2], temp_val[3], temp_val[4],
|
||||
temp_val[5]);
|
||||
#endif
|
||||
return FLASH_EEPROM_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
return FLASH_EEPROM_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 从4字节数组中提取一个32位无符号整数
|
||||
* @param array: 4字节数组
|
||||
@@ -208,12 +211,7 @@ void OTAHandler::jumpToApplication() {
|
||||
#if DEBUG_OTA
|
||||
printf("try jump to app\r\n");
|
||||
if (!validateApplication()) {
|
||||
printf("app valid failed\r\n");
|
||||
return;
|
||||
} else {
|
||||
printf("valid result:successful\r\n");
|
||||
u8 check_data[2] = {0x0A, 0xAC};
|
||||
CAN0_transmiter.CANFD_AsyncSend(CANFD_OTA_WAIT_ID, 2, check_data);
|
||||
}
|
||||
printf("jumping1\r\n");
|
||||
#endif
|
||||
@@ -222,8 +220,6 @@ void OTAHandler::jumpToApplication() {
|
||||
OTA_SET(n_APP_LATEST_EN_ADDR, OTA_AVAL); // 设置APP为激活
|
||||
fmc_lock();
|
||||
|
||||
// 1. 关闭所有中断
|
||||
__disable_irq();
|
||||
for (int i = 0; i < 8; i++) {
|
||||
NVIC->ICER[i] = 0xFFFFFFFF;
|
||||
}
|
||||
@@ -260,9 +256,7 @@ void OTAHandler::jumpToApplication() {
|
||||
printf("jumping5, MSP:0x%08X, Reset Handler:0x%08X\r\n", msp_value,
|
||||
reset_handler);
|
||||
#endif
|
||||
|
||||
__set_MSP(msp_value);
|
||||
|
||||
// 在跳转前清除复位标志
|
||||
rcu_all_reset_flag_clear();
|
||||
// 7. 跳转
|
||||
@@ -280,35 +274,39 @@ void OTAHandler::jumpToApplication() {
|
||||
* @retval 无
|
||||
*/
|
||||
void OTAHandler::eraseApplicationArea() {
|
||||
// 擦除APP区域
|
||||
|
||||
fmc_unlock();
|
||||
OTA_SET(n_APP_LATEST_CHECK_ADDR, OTA_NOT_AVAL); // 设置APP为未确认
|
||||
OTA_SET(n_APP_LATEST_EN_ADDR, OTA_NOT_AVAL); // 设置APP为未激活
|
||||
OTA_SET(n_APP_LATEST_AVAL_ADDR, OTA_NOT_AVAL); // 设置APP为不可用
|
||||
|
||||
|
||||
// 擦除前禁用中断,防止中断处理程序执行期间发生Flash操作导致问题
|
||||
__disable_irq();
|
||||
fmc_unlock();
|
||||
|
||||
fmc_state_enum fmc_status;
|
||||
for (u32 addr = APPLATEST_START_ADDR;
|
||||
addr < (APPLATEST_START_ADDR + APP_MAX_SIZE); addr += FMC_PAGE_SIZE) {
|
||||
fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_PGAERR | FMC_FLAG_WPERR);
|
||||
fmc_status = fmc_page_erase(addr);
|
||||
if (fmc_status != FMC_READY) {
|
||||
// 如果擦除失败,记录错误并退出
|
||||
#if DEBUG_OTA
|
||||
printf("Flash erase failed at address 0x%08X, status: %d\r\n", addr,
|
||||
fmc_status);
|
||||
delay_1ms(5000);
|
||||
#endif
|
||||
ota_error = OTA_ERROR_FLASH_ERROR;
|
||||
send_error_frame(OTA_ERROR_FLASH_ERROR);
|
||||
break;
|
||||
} else {
|
||||
#if DEBUG_OTA
|
||||
printf("Flash erase SUCCESS\r\n");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
// 重新启用中断
|
||||
__enable_irq();
|
||||
|
||||
fmc_lock();
|
||||
}
|
||||
|
||||
@@ -322,13 +320,17 @@ void OTAHandler::eraseApplicationArea() {
|
||||
void OTAHandler::writeApplicationData(u32 offset, u8 *data, u32 size) {
|
||||
fmc_unlock();
|
||||
u32 write_addr = APPLATEST_START_ADDR + offset;
|
||||
fmc_state_enum fmc_state;
|
||||
|
||||
u32 i = 0;
|
||||
u8 *src = data;
|
||||
|
||||
// 32位对齐写入 - 处理完整的32位字
|
||||
for (; i <= size - 4; i += 4) {
|
||||
fmc_word_program(write_addr + i, *(u32 *)&src[i]);
|
||||
fmc_state = fmc_word_program(write_addr + i, *(u32 *)&src[i]);
|
||||
if (fmc_state != FMC_READY) {
|
||||
printf("FMC_WRITE_ERROR\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
// 处理剩余字节(如果有的话)
|
||||
@@ -355,7 +357,16 @@ void OTAHandler::writeApplicationData(u32 offset, u8 *data, u32 size) {
|
||||
* @retval 无
|
||||
*/
|
||||
void OTAHandler::handleOTAMessage(u32 id, u8 *data, u8 len) {
|
||||
if (id == CANFD_OTA_DATA_ID) {
|
||||
if (id == CANFD_OTA_CANCEL_ID) {
|
||||
// 取消OTA过程
|
||||
ota_state = OTA_STATE_IDLE;
|
||||
ota_time = 0;
|
||||
ota_error = OTA_ERROR_NONE;
|
||||
#if DEBUG_OTA
|
||||
printf("OTA process cancelled by CANFD_OTA_CANCEL_ID\r\n");
|
||||
#endif
|
||||
return;
|
||||
} else if (id == CANFD_OTA_DATA_ID) {
|
||||
ota_time = 0;
|
||||
if (len == 64 and ota_state == OTA_STATE_RECEIVING_FIRMWARE) {
|
||||
#if DEBUG_OTA
|
||||
@@ -435,7 +446,6 @@ void OTAHandler::handleOTAMessage(u32 id, u8 *data, u8 len) {
|
||||
}
|
||||
u8 send_data[6] = {0xBA, 0xC0, 0x00,
|
||||
0x00, 0x00, 0x00}; // 确认开始传输
|
||||
|
||||
eraseApplicationArea();
|
||||
// 发送接收包0请求
|
||||
CAN0_transmiter.CANFD_AsyncSend(CANFD_OTA_ACK_ID, 6, send_data);
|
||||
@@ -444,10 +454,7 @@ void OTAHandler::handleOTAMessage(u32 id, u8 *data, u8 len) {
|
||||
#if DEBUG_OTA
|
||||
printf("stage--:OTA_STATE_FINISHED\r\n");
|
||||
#endif
|
||||
u8 send_data[2] = {0x0A, 0xAC}; // 确认开始传输
|
||||
// 4. 验证成功 - 发送最终ACK
|
||||
CAN0_transmiter.CANFD_AsyncSend(CANFD_OTA_ACK_ID, 2, send_data);
|
||||
|
||||
;
|
||||
} else {
|
||||
ota_error = OTA_ERROR_INVALID_PACKET;
|
||||
ota_state = OTA_STATE_IDLE;
|
||||
@@ -602,6 +609,7 @@ void getDeviceSerialNumberString(char *str) {
|
||||
fmc_state_enum move_app_data() {
|
||||
fmc_state_enum fmc_status = FMC_READY;
|
||||
|
||||
scanAppFlashContent();
|
||||
// 关闭全局中断以防止Flash操作期间的中断干扰
|
||||
__disable_irq();
|
||||
fmc_unlock();
|
||||
@@ -628,7 +636,7 @@ fmc_state_enum move_app_data() {
|
||||
// 复制数据 - 按字(32位)进行复制以提高效率
|
||||
uint32_t offset = 0;
|
||||
uint32_t write_count = 0; // 记录实际写入的字数
|
||||
const uint32_t *src_ptr = (const uint32_t *)APPBACK_START_ADDR; // 从备份区域读取
|
||||
const uint32_t *src_ptr = (const uint32_t *)APPBACK_START_ADDR;
|
||||
|
||||
// 预计算源数据的CRC,避免重复访问内存
|
||||
crc_deinit();
|
||||
@@ -637,7 +645,7 @@ fmc_state_enum move_app_data() {
|
||||
APP_MAX_SIZE / 4);
|
||||
|
||||
while (offset < APP_MAX_SIZE) {
|
||||
uint32_t src_data = src_ptr[offset / 4]; // 从备份区域读取数据
|
||||
uint32_t src_data = src_ptr[offset / 4];
|
||||
|
||||
// 检查源地址是否为有效的Flash数据(非0xFFFFFFFF表示有数据)
|
||||
if (src_data != 0xFFFFFFFF) {
|
||||
@@ -646,7 +654,7 @@ fmc_state_enum move_app_data() {
|
||||
FMC_FLAG_PGERR);
|
||||
|
||||
fmc_status =
|
||||
fmc_word_program(APPLATEST_START_ADDR + offset, src_data); // 写入到最新APP区域
|
||||
fmc_word_program(APPLATEST_START_ADDR + offset, src_data);
|
||||
|
||||
// 检查写入操作是否成功
|
||||
if (fmc_status != FMC_READY) {
|
||||
@@ -763,4 +771,4 @@ void calculate_crc32_with_key(const uint8_t *key, const uint8_t *data,
|
||||
output[1] = (uint8_t)(crc >> 8);
|
||||
output[2] = (uint8_t)(crc >> 16);
|
||||
output[3] = (uint8_t)(crc >> 24);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#ifndef __AES_H
|
||||
#define __AES_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "cstdint"
|
||||
#include <string.h>
|
||||
|
||||
// AES-128 密钥长度 (16 bytes)
|
||||
|
||||
+13
-13
@@ -2,20 +2,20 @@
|
||||
#define __CONFIG_H__
|
||||
#include "stdint.h"
|
||||
|
||||
#define EEPDEBUG 0
|
||||
#define EEP_DEBUG 0
|
||||
#define DEBUG_OTA 0
|
||||
#define CAN_DEBUG 0
|
||||
#define SLEEP_DEBUG 0
|
||||
|
||||
// Flash分区配置
|
||||
constexpr u32 BOOTLOADER_SIZE = 0x4000; // 16KB
|
||||
constexpr u32 BOOTLOADER_SIZE = 0x6000; // 24KB
|
||||
constexpr u32 BOOTLOADER_START_ADDR = 0x08000000; // BOOT起始地址
|
||||
constexpr u32 APPLATEST_START_ADDR = 0x08011000; // APP起始地址
|
||||
constexpr u32 APPBACK_START_ADDR = 0x08005000; // APPBACK起始地址
|
||||
constexpr u32 APPLATEST_START_ADDR = 0x08012000; // APP起始地址
|
||||
constexpr u32 APPBACK_START_ADDR = 0x08006000; // APPBACK起始地址
|
||||
constexpr u32 APP_MAX_SIZE = 0xC000; // 48KB
|
||||
constexpr u32 FMC_PAGE_SIZE = 0x400; // 1KB
|
||||
constexpr u32 SLEEP_CONFIG_START = 0x0801D400; // 睡眠配置起始地址
|
||||
constexpr u32 SLEEP_CONFIG_END = 0x0801D800; // 睡眠配置结束地址
|
||||
constexpr u32 SLEEP_CONFIG_START = 0x0801E400; // 睡眠配置起始地址
|
||||
constexpr u32 SLEEP_CONFIG_END = 0x0801E800; // 睡眠配置结束地址
|
||||
constexpr u32 FLASH_EMPTY = 0xFFFFFFFF; // 空数据
|
||||
constexpr u32 SLEEP_ENABLE = 0x11111111; // 睡眠使能
|
||||
constexpr u32 SLEEP_DISABLE = 0x00000000; // 睡眠禁止
|
||||
@@ -23,12 +23,12 @@ constexpr u32 SLEEP_DISABLE = 0x00000000; // 睡眠禁止
|
||||
|
||||
// BOOT 相关
|
||||
constexpr u32 OTA_CONFIG_NUM = 6;
|
||||
constexpr u32 n_APP_LATEST_AVAL_ADDR = 0x0801D000; // 最新APP可用地址
|
||||
constexpr u32 n_APP_BACKUP_AVAL_ADDR = 0x0801D004; // 备份APP可用地址
|
||||
constexpr u32 n_APP_LATEST_EN_ADDR = 0x0801D008; // 最新APP激活
|
||||
constexpr u32 n_APP_BACKUP_EN_ADDR = 0x0801D00C; // 备份APP激活
|
||||
constexpr u32 n_APP_LATEST_CHECK_ADDR = 0x0801D010; // 最新APP校验
|
||||
constexpr u32 n_APP_BACKUP_CHECK_ADDR = 0x0801D014; // 备份APP校验
|
||||
constexpr u32 n_APP_LATEST_AVAL_ADDR = 0x0801E000; // 最新APP可用地址
|
||||
constexpr u32 n_APP_BACKUP_AVAL_ADDR = 0x0801E004; // 备份APP可用地址
|
||||
constexpr u32 n_APP_LATEST_EN_ADDR = 0x0801E008; // 最新APP激活
|
||||
constexpr u32 n_APP_BACKUP_EN_ADDR = 0x0801E00C; // 备份APP激活
|
||||
constexpr u32 n_APP_LATEST_CHECK_ADDR = 0x0801E010; // 最新APP校验
|
||||
constexpr u32 n_APP_BACKUP_CHECK_ADDR = 0x0801E014; // 备份APP校验
|
||||
constexpr u32 OTA_NOT_AVAL = 0xFFFFFFFF;
|
||||
constexpr u32 OTA_AVAL = 0x00000000; // 全零表示可用
|
||||
constexpr u32 FLASH_EEPROM_OK = 0;
|
||||
@@ -60,7 +60,7 @@ constexpr uint8_t K_master[16] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB,
|
||||
0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98,
|
||||
0x76, 0x54, 0x32, 0x10}; // 预置主密钥
|
||||
// 其他
|
||||
constexpr u32 OTA_TIMEOUT = 100000;
|
||||
constexpr u32 OTA_TIMEOUT = 10000;
|
||||
constexpr u8 SIZE_U32 = sizeof(uint32_t);
|
||||
constexpr u8 SIZE_FLOAT = sizeof(float);
|
||||
#endif
|
||||
@@ -35,7 +35,7 @@ u8 FlashEEPROM::init() {
|
||||
*/
|
||||
FlashEepromStatus FlashEEPROM::format() {
|
||||
fmc_state_enum fmc_status;
|
||||
#if EEPDEBUG
|
||||
#if EEP_DEBUG
|
||||
printf("擦除页面\r\n");
|
||||
#endif
|
||||
|
||||
|
||||
+43
-45
@@ -19,7 +19,6 @@ u8 USART0_init() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int fputc(int ch, FILE *f) throw() {
|
||||
usart_data_transmit(EVAL_COM0, (uint8_t)ch);
|
||||
while (RESET == usart_flag_get(EVAL_COM0, USART_FLAG_TBE))
|
||||
@@ -48,7 +47,7 @@ void unused_pin_init() {
|
||||
* @param page_count 扫描的页数,默认为0表示扫描整个APP区域
|
||||
* @retval 无
|
||||
*/
|
||||
void scanAppFlashContent(bool print_content = true, u32 page_count = 0) {
|
||||
void scanAppFlashContent(bool print_content, u32 page_count) {
|
||||
u32 start_addr = APPLATEST_START_ADDR;
|
||||
u32 total_size = 0xC000;
|
||||
|
||||
@@ -86,48 +85,48 @@ void scanAppFlashContent(bool print_content = true, u32 page_count = 0) {
|
||||
} else {
|
||||
data_pages++;
|
||||
|
||||
// 只有在非空页面且需要打印时才输出内容
|
||||
if (print_content) {
|
||||
printf("Page 0x%08X: \r\n", addr);
|
||||
// // 只有在非空页面且需要打印时才输出内容
|
||||
// if (print_content) {
|
||||
// printf("Page 0x%08X: \r\n", addr);
|
||||
|
||||
// 打印所有内容
|
||||
for (u32 offset = 0; offset < FMC_PAGE_SIZE;
|
||||
offset += 16) { // 每行打印16字节
|
||||
// 打印地址偏移
|
||||
printf(" +%03X: ", offset);
|
||||
// // 打印所有内容
|
||||
// for (u32 offset = 0; offset < FMC_PAGE_SIZE;
|
||||
// offset += 16) { // 每行打印16字节
|
||||
// // 打印地址偏移
|
||||
// printf(" +%03X: ", offset);
|
||||
|
||||
// 打印十六进制数据
|
||||
for (u32 byte_idx = 0; byte_idx < 16; byte_idx++) {
|
||||
if ((offset + byte_idx) < FMC_PAGE_SIZE) {
|
||||
u8 data = *(__IO u8 *)(addr + offset + byte_idx);
|
||||
printf("%02X ", data);
|
||||
} else {
|
||||
printf(" "); // 空白填充
|
||||
}
|
||||
// // 打印十六进制数据
|
||||
// for (u32 byte_idx = 0; byte_idx < 16; byte_idx++) {
|
||||
// if ((offset + byte_idx) < FMC_PAGE_SIZE) {
|
||||
// u8 data = *(__IO u8 *)(addr + offset + byte_idx);
|
||||
// printf("%02X ", data);
|
||||
// } else {
|
||||
// printf(" "); // 空白填充
|
||||
// }
|
||||
|
||||
// 每8字节加个小空格,便于阅读
|
||||
if (byte_idx == 7) {
|
||||
printf(" ");
|
||||
}
|
||||
}
|
||||
// // 每8字节加个小空格,便于阅读
|
||||
// if (byte_idx == 7) {
|
||||
// printf(" ");
|
||||
// }
|
||||
// }
|
||||
|
||||
// 打印可打印字符
|
||||
printf("|");
|
||||
for (u32 byte_idx = 0; byte_idx < 16; byte_idx++) {
|
||||
if ((offset + byte_idx) < FMC_PAGE_SIZE) {
|
||||
u8 data = *(__IO u8 *)(addr + offset + byte_idx);
|
||||
if (data >= 32 && data <= 126) { // 可打印字符范围
|
||||
printf("%c", data);
|
||||
} else {
|
||||
printf(".");
|
||||
}
|
||||
} else {
|
||||
printf(" "); // 空白填充
|
||||
}
|
||||
}
|
||||
printf("|\r\n");
|
||||
}
|
||||
}
|
||||
// // 打印可打印字符
|
||||
// printf("|");
|
||||
// for (u32 byte_idx = 0; byte_idx < 16; byte_idx++) {
|
||||
// if ((offset + byte_idx) < FMC_PAGE_SIZE) {
|
||||
// u8 data = *(__IO u8 *)(addr + offset + byte_idx);
|
||||
// if (data >= 32 && data <= 126) { // 可打印字符范围
|
||||
// printf("%c", data);
|
||||
// } else {
|
||||
// printf(".");
|
||||
// }
|
||||
// } else {
|
||||
// printf(" "); // 空白填充
|
||||
// }
|
||||
// }
|
||||
// printf("|\r\n");
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
page_count_scanned++;
|
||||
@@ -177,11 +176,10 @@ void enter_deep_sleep() {
|
||||
pmu_to_deepsleepmode(PMU_LDO_LOWPOWER, WFI_CMD);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 写地址
|
||||
* @return fmc_state_enum
|
||||
*/
|
||||
/**
|
||||
* @brief 写地址
|
||||
* @return fmc_state_enum
|
||||
*/
|
||||
fmc_state_enum write_ADDRESS(u32 address, u32 data) {
|
||||
fmc_unlock();
|
||||
fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_PGAERR | FMC_FLAG_WPERR);
|
||||
|
||||
@@ -6,7 +6,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#include "gd32c10x_eval.h"
|
||||
#include "stdint.h"
|
||||
#include "cstdint"
|
||||
#include <stdio.h>
|
||||
|
||||
int fputc(int ch, FILE *f); // 声明fputc函数以重载标准库实现
|
||||
@@ -18,6 +18,7 @@ void print_system_clock_info(void);
|
||||
void enter_deep_sleep(void);
|
||||
int check_sleep(void);
|
||||
void EXTI5_9_IRQHandler(void);
|
||||
void scanAppFlashContent(bool print_content = true, u32 page_count = 0);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user