Lots of MISRA-related changes in RT. Not finished yet.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7715 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
880d6916b3
commit
b53489d0e4
|
@ -202,3 +202,9 @@ ULIBS =
|
||||||
|
|
||||||
RULESPATH = $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC
|
RULESPATH = $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC
|
||||||
include $(RULESPATH)/rules.mk
|
include $(RULESPATH)/rules.mk
|
||||||
|
|
||||||
|
misra:
|
||||||
|
@echo Running PCLint
|
||||||
|
lint-nt -w1 pclint/co-gcc.lnt pclint/au-misra3.lnt pclint/waivers.lnt $(IINCDIR) $(KERNSRC) > misra.txt
|
||||||
|
@echo
|
||||||
|
@echo Done
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,129 @@
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
// This file is provided by Gimpel Software (www.gimpel.com) for use with
|
||||||
|
// its products PC-lint and FlexeLint.
|
||||||
|
//
|
||||||
|
// Redistribution and use of this file, with or without modification, is
|
||||||
|
// permitted provided that any such redistribution retains this notice.
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef CO_GCC_H_
|
||||||
|
#define CO_GCC_H_
|
||||||
|
/*lint -save -w1 */
|
||||||
|
|
||||||
|
#ifdef _lint /* Make sure no compiler comes this way */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Standard library headers typically define the assert macro so that it
|
||||||
|
expands to a complicated conditional expression that uses special
|
||||||
|
funtions that Lint does not know about by default. For linting
|
||||||
|
purposes, we can simplify things a bit by forcing assert() to expand to
|
||||||
|
a call to a special function that has the appropriate 'assert'
|
||||||
|
semantics.
|
||||||
|
*/
|
||||||
|
//lint -function( __assert, __lint_assert )
|
||||||
|
void __lint_assert( int );
|
||||||
|
//lint ++d"assert(e)=__lint_assert(!!(e))"
|
||||||
|
//(++d makes this definition permanently immutable for the Lint run.)
|
||||||
|
//Now that we've made our own 'assert', we need to keep people from being
|
||||||
|
//punished when the marco in 'assert.h' appears not to be used:
|
||||||
|
//lint -efile(766,*assert.h)
|
||||||
|
|
||||||
|
typedef char *__builtin_va_list;
|
||||||
|
|
||||||
|
/*lint -e{171} */
|
||||||
|
__builtin_va_list __lint_init_va(...);
|
||||||
|
|
||||||
|
void __builtin_va_end( __builtin_va_list );
|
||||||
|
/*lint
|
||||||
|
++d"__builtin_va_start(ap,parmN)=((ap)=__lint_init_va(parmN))"
|
||||||
|
++d"__builtin_va_arg(a,b)=(*( ((b) *) ( (((a) += sizeof(b)) - sizeof(b) )))"
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
The headers included below must be generated; For C++, generate
|
||||||
|
with:
|
||||||
|
|
||||||
|
g++ [usual build options] -E -dM t.cpp >lint_cppmac.h
|
||||||
|
|
||||||
|
For C, generate with:
|
||||||
|
|
||||||
|
gcc [usual build options] -E -dM t.c >lint_cmac.h
|
||||||
|
|
||||||
|
...where "t.cpp" and "t.c" are empty source files.
|
||||||
|
|
||||||
|
It's important to use the same compiler options used when compiling
|
||||||
|
project code because they can affect the existence and precise
|
||||||
|
definitions of certain predefined macros. See gcc-readme.txt for
|
||||||
|
details and a tutorial.
|
||||||
|
*/
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
# include "lint_cppmac.h" // DO NOT COMMENT THIS OUT. DO NOT SUPPRESS ERROR 322. (If you see an error here, your Lint configuration is broken; check -i options and ensure that you have generated lint_cppmac.h as documented in gcc-readme.txt. Otherwise Gimpel Software cannot support your configuration.)
|
||||||
|
#else
|
||||||
|
# include "lint_cmac.h" // DO NOT COMMENT THIS OUT. DO NOT SUPPRESS ERROR 322. (If you see an error here, your Lint configuration is broken; check -i options and ensure that you have generated lint_cmac.h as documented in gcc-readme.txt. Otherwise Gimpel Software cannot support your configuration.)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* If the macro set given by the generated macro files must be adjusted in
|
||||||
|
order for Lint to cope, then you can make those adjustments here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define LINT_CO_GCC_H_GCC_VERSION ( __GNUC__ * 10000 + \
|
||||||
|
__GNUC_MINOR__ * 100 + \
|
||||||
|
__GNUC_PATCHLEVEL__ )
|
||||||
|
|
||||||
|
/* The following is a workaround for versions of GCC with bug 25717, in
|
||||||
|
which the preprocessor does not dump a #define directive for __STDC__
|
||||||
|
when -dM is given:
|
||||||
|
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25717
|
||||||
|
|
||||||
|
We know the unconditional definition of __STDC__ was introduced no
|
||||||
|
later than version 3.0; the preprocessor bug was fixed no later than
|
||||||
|
version 4.1.0.
|
||||||
|
*/
|
||||||
|
#if ( LINT_CO_GCC_H_GCC_VERSION >= 30000 && \
|
||||||
|
LINT_CO_GCC_H_GCC_VERSION < 40100 )
|
||||||
|
# define __STDC__ 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !__cplusplus && !__STRICT_ANSI__ && __STDC_VERSION__ < 199901L
|
||||||
|
/* apparently, the code is compiled with -std=gnu89 (as opposed to -std=c89),
|
||||||
|
so: */
|
||||||
|
/*lint -rw_asgn(inline,__inline) */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if LINT_CO_GCC_H_GCC_VERSION >= 40300
|
||||||
|
# define __COUNTER__ __lint__COUNTER__
|
||||||
|
//lint +rw( *type_traits ) // Enable type traits support
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if _lint >= 909 // For 9.00i and later:
|
||||||
|
//// __attribute__ is GCC's __attribute__:
|
||||||
|
//
|
||||||
|
//lint -rw_asgn(__attribute__,__gcc_attribute__)
|
||||||
|
//lint -rw_asgn(__attribute, __gcc_attribute__)
|
||||||
|
//
|
||||||
|
//// Prevent "__attribute__" from being defined as a macro:
|
||||||
|
//
|
||||||
|
//lint --u"__attribute__"
|
||||||
|
//lint --u"__attribute"
|
||||||
|
//
|
||||||
|
//// Because an attribute-specifier is a form of
|
||||||
|
//// declaration-modifier, and because it can appear at the
|
||||||
|
//// beginning of a decl-specifier-seq, we must enable "Early
|
||||||
|
//// Modifiers":
|
||||||
|
//
|
||||||
|
//lint +fem
|
||||||
|
#else // for 9.00h and earlier:
|
||||||
|
//lint -d__attribute__()=
|
||||||
|
//lint -d__attribute()=
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _lint */
|
||||||
|
/*lint -restore */
|
||||||
|
#endif /* CO_GCC_H_ */
|
|
@ -0,0 +1,209 @@
|
||||||
|
/* Date Stamp */ -d"_lint_co_gcc_lnt=co-gcc.lnt modified 12-Jun-2014"
|
||||||
|
/* To document usage use: -message( "Using " _lint_co_gcc_lnt ) */
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
// This file is provided by Gimpel Software (www.gimpel.com) for use with
|
||||||
|
// its products PC-lint and FlexeLint.
|
||||||
|
//
|
||||||
|
// Redistribution and use of this file, with or without modification, is
|
||||||
|
// permitted provided that any such redistribution retains this notice.
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
/* co-gcc.lnt: This is the seed file for configuring Lint for use with
|
||||||
|
GCC versions 2.95.3 and later.
|
||||||
|
|
||||||
|
Like all compiler options files this file is intended to be used
|
||||||
|
as follows:
|
||||||
|
|
||||||
|
lint co-gcc.lnt source-files-to-be-linted
|
||||||
|
|
||||||
|
Some of the information that co-gcc.lnt requires needs to be furnished
|
||||||
|
with the help of the gcc system itself. The easiest way to generate
|
||||||
|
this information is to use the makefile co-gcc.mak (supplied with the
|
||||||
|
Lint distribution) in an invocation of GNU Make; for details, see the
|
||||||
|
commentary at the top of co-gcc.mak.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-cgnu // Notifies FlexeLint that gcc is being used.
|
||||||
|
|
||||||
|
// ===========================
|
||||||
|
// Preprocessor Configuration:
|
||||||
|
+fdi // GCC starts its #include search in the directory of the including
|
||||||
|
// file.
|
||||||
|
|
||||||
|
++fln // Allow:
|
||||||
|
// # digit-sequence " [s-char-sequence] " new-line
|
||||||
|
// as a synonym for:
|
||||||
|
// # line digit-sequence " [s-char-sequence] " new-line
|
||||||
|
// GCC additionally allows flag values to follow the
|
||||||
|
// s-char-sequence, but currently Lint ignores them.
|
||||||
|
|
||||||
|
-header(pclint/co-gcc.h) // Includes headers generated by GCC (bringing in
|
||||||
|
// predefined macros).
|
||||||
|
+libh(pclint/co-gcc.h) // Marks that header as library code.
|
||||||
|
|
||||||
|
pclint/gcc-include-path.lnt // This .lnt file should contain --i options
|
||||||
|
// and should be generated by invoking gcc with its '-v' option.
|
||||||
|
// (GCC's implicit #include search path is presented in the output.)
|
||||||
|
// This happens automatically when 'make -f co-gcc.mak' is invoked.
|
||||||
|
|
||||||
|
// Assertion directives (a feature of GCC's preprocessor) have been
|
||||||
|
// considered obsolete in GCC's documentation since version 3.0, so we do
|
||||||
|
// not use them here. If support for #assert is needed in the form of a
|
||||||
|
// lint option, one may use '-a#' like so:
|
||||||
|
// -a#machine(i386) // #assert's machine(i386) (SVR4 facility).
|
||||||
|
|
||||||
|
// File extensions:
|
||||||
|
// From the GCC man page:
|
||||||
|
//
|
||||||
|
// file.cc
|
||||||
|
// file.cp
|
||||||
|
// file.cxx
|
||||||
|
// file.cpp
|
||||||
|
// file.CPP
|
||||||
|
// file.c++
|
||||||
|
// file.C
|
||||||
|
// C++ source code that must be preprocessed. Note that in .cxx, the
|
||||||
|
// last two letters must both be literally x. Likewise, .C refers to
|
||||||
|
// a literal capital C.
|
||||||
|
//
|
||||||
|
// We emulate this with:
|
||||||
|
|
||||||
|
+cpp(.cc)
|
||||||
|
+cpp(.cp)
|
||||||
|
+cpp(.cxx)
|
||||||
|
+cpp(.cpp)
|
||||||
|
+cpp(.c++)
|
||||||
|
// Note the exceptions:
|
||||||
|
// +cpp(.CPP)
|
||||||
|
// +cpp(.C)
|
||||||
|
// These are commented out for the default config because they seem to
|
||||||
|
// cause trouble more often than not. For starters, it is problematic
|
||||||
|
// with filesystems that are case-insensitive (which has become common
|
||||||
|
// even on some POSIX systems).
|
||||||
|
|
||||||
|
// =============
|
||||||
|
// Size Options:
|
||||||
|
// +fwc // wchar_t might be builtin; if so, uncomment this option. (NOTE:
|
||||||
|
// // this option needs to be set before a size option is given for
|
||||||
|
// // wchar_t; see the documentation for -sw# in the Lint manual.)
|
||||||
|
|
||||||
|
pclint/size-options.lnt // This .lnt file should be generated (preferrably
|
||||||
|
// by a program created by invoking GCC with the compile options that
|
||||||
|
// are used in the compilation of the project to be linted). This
|
||||||
|
// happens automatically when 'make -f co-gcc.mak' is invoked.
|
||||||
|
|
||||||
|
|
||||||
|
// ===========================================
|
||||||
|
// +rw and -d options to cope with GNU syntax:
|
||||||
|
+ppw(ident) // Tolerate #ident
|
||||||
|
+ppw(warning)
|
||||||
|
|
||||||
|
// GCC provides alternative spellings of certain keywords:
|
||||||
|
+rw(__inline)
|
||||||
|
-rw_asgn(__inline__,__inline)
|
||||||
|
-rw_asgn(__header_always_inline,__inline)
|
||||||
|
-rw_asgn(__header_inline,__inline)
|
||||||
|
|
||||||
|
-rw_asgn(__signed__,signed)
|
||||||
|
-rw_asgn(__signed,signed)
|
||||||
|
-rw_asgn( __volatile__, volatile )
|
||||||
|
-rw_asgn( __volatile, volatile )
|
||||||
|
+rw(restrict)
|
||||||
|
-rw_asgn(__restrict,restrict)
|
||||||
|
-rw_asgn(__restrict__,restrict)
|
||||||
|
++d"__const=const" // gconv.h uses __const rather than const
|
||||||
|
++d"const=const" // ensure const expands to const.
|
||||||
|
|
||||||
|
-rw_asgn( asm, _up_to_brackets )
|
||||||
|
-rw_asgn( __asm, _up_to_brackets )
|
||||||
|
-rw_asgn( __asm__, _up_to_brackets )
|
||||||
|
// This re-definition of the various spellings of the asm keyword enables
|
||||||
|
// Lint to pass gracefully over expression-statements like:
|
||||||
|
// __asm __volatile ("fsqrt" : "=t" (__result) : "0" (__x));
|
||||||
|
// But it may be necessary to suppress certain error messages that are
|
||||||
|
// triggered by tokens that are part of an assembly declaration or
|
||||||
|
// statement. For example:
|
||||||
|
|
||||||
|
// -d"__asm__(p...)=/*lint -e{19}*/ __asm__(p)"
|
||||||
|
|
||||||
|
// ...causes Lint to be quiet about the semicolon that follows an
|
||||||
|
// __asm__() declaration. Note, the -e{N} form of suppression takes
|
||||||
|
// effect only for the forward-declaration, definition or
|
||||||
|
// [possibly-compound] statement that immediately follows. Because a
|
||||||
|
// semicolon is seen as a declaration-terminator, Error 19 will be
|
||||||
|
// re-enabled immediately after the semicolon in '__asm__(...);'.
|
||||||
|
// (The elipsis after the macro parameter p allows zero or more commas to
|
||||||
|
// appear in the operand.)
|
||||||
|
//
|
||||||
|
// If you encounter other diagnostics that appear to need suppression in
|
||||||
|
// or near assembly regions, please let us know!
|
||||||
|
//
|
||||||
|
-esym(123,__asm__)
|
||||||
|
|
||||||
|
-rw_asgn(__alignof__,__alignof)
|
||||||
|
|
||||||
|
// "__extension__" is GCC's way of allowing the use of non-standard
|
||||||
|
// constructs in a strict Standard-conforming mode. We don't currently
|
||||||
|
// have explicit support for it, but we can use local suppressions. For
|
||||||
|
// example, we can use -e(160) so that we will not see any Errors about
|
||||||
|
// GNU statement-expressions wrapped in __extension__().
|
||||||
|
++d"__extension__=/*lint -e(160) */"
|
||||||
|
|
||||||
|
++d"__null=0"
|
||||||
|
+rw(_to_semi) // needed for the two macros above.
|
||||||
|
+rw(__typeof__) // activate __typeof__ keyword
|
||||||
|
-d"__typeof=__typeof__" // an alternative to using __typeof__
|
||||||
|
|
||||||
|
-rw(__except) // This MS reserved word is used as an identifier
|
||||||
|
+rw( __complex__, __real__, __imag__ ) // reserved words that can be ignored.
|
||||||
|
++d"__builtin_strchr=(char*)" // permits the inline definition ...
|
||||||
|
++d"__builtin_strpbrk=(char*)" // of these functions to be linted ...
|
||||||
|
++d"__builtin_strrchr=(char*)" // without drawing a complaint
|
||||||
|
++d"__builtin_strstr=(char*)" // about the use of a non-standard name
|
||||||
|
++d"__PRETTY_FUNCTION__=___function___" // lint defines ___function___ internally
|
||||||
|
++d"__FUNCTION__=___function___" // lint defines ___function___ internally
|
||||||
|
++d"__func__=___function___" // Some C++ modes suport the implicit __func__
|
||||||
|
// identifier.
|
||||||
|
-ident($)
|
||||||
|
|
||||||
|
// =========================================================
|
||||||
|
// Other options supporting GNU C/C++ syntax:
|
||||||
|
+fld // enables the processing of _L_abel _D_esignators E.g.:
|
||||||
|
// union { double d; int i; } u = { d: 3.141 };
|
||||||
|
|
||||||
|
// =========================================================
|
||||||
|
// Generally useful suppressions:
|
||||||
|
-wlib(1) // sets the warning level within library headers to 1
|
||||||
|
// (no warnings, just syntax errors). Comment out if you
|
||||||
|
// are actually linting library headers.
|
||||||
|
-elib(123) // 123 is really a warning, but it's in the "Error" range.
|
||||||
|
-elib(93) // allow newlines within quoted string arguments to macros
|
||||||
|
-elib(46) // allow bit fields to have integral types other than
|
||||||
|
// '_Bool' and 'int'.
|
||||||
|
-elibsym(628) // Suppress 628 for __builtin symbols.
|
||||||
|
|
||||||
|
-esym(528,__huge_val,__nan,__qnan,__qnanf,__snan,__snanf)
|
||||||
|
// We don't care if we don't reference some GNU functions
|
||||||
|
-esym(528,__gnu_malloc,__gnu_calloc)
|
||||||
|
|
||||||
|
// The following functions exhibit variable return modes.
|
||||||
|
// That is, they may equally-usefully be called for a value
|
||||||
|
// as called just for their effects. Accordingly we inhibit
|
||||||
|
// Warning 534 for these functions.
|
||||||
|
// Feel free to add to or subtract from this list.
|
||||||
|
|
||||||
|
-esym(534,close,creat,fclose,fprintf,fputc)
|
||||||
|
-esym(534,fputs,fscanf,fseek,fwrite,lseek,memcpy,memmove,memset)
|
||||||
|
-esym(534,printf,puts,scanf,sprintf,sscanf,strcat,strcpy)
|
||||||
|
-esym(534,strncat,strncpy,unlink,write)
|
||||||
|
|
||||||
|
// For non-ANSI compilers we suppress messages 515 and 516
|
||||||
|
// for functions known to have variable argument lists.
|
||||||
|
// For ANSI compilers, header files should take care of this.
|
||||||
|
|
||||||
|
-esym(515,fprintf,printf,sprintf,fscanf,scanf,sscanf)
|
||||||
|
-esym(516,fprintf,printf,sprintf,fscanf,scanf,sscanf)
|
||||||
|
-esym(1702,*operator<<,*operator>>)
|
||||||
|
-esym(534,*operator<<,*operator>>)
|
||||||
|
-esym(1055,*__builtin*)
|
||||||
|
-esym(718,*__builtin*) // The compiler does not need these ...
|
||||||
|
-esym(746,*__builtin*) // declared and it knows their prototypes.
|
|
@ -0,0 +1,6 @@
|
||||||
|
--i"c:\programmi\gnu tools arm embedded\4.7 2013q3\bin\../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/c++/4.7.4"
|
||||||
|
--i"c:\programmi\gnu tools arm embedded\4.7 2013q3\bin\../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/c++/4.7.4/arm-none-eabi"
|
||||||
|
--i"c:\programmi\gnu tools arm embedded\4.7 2013q3\bin\../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include/c++/4.7.4/backward"
|
||||||
|
--i"c:\programmi\gnu tools arm embedded\4.7 2013q3\bin\../lib/gcc/arm-none-eabi/4.7.4/include"
|
||||||
|
--i"c:\programmi\gnu tools arm embedded\4.7 2013q3\bin\../lib/gcc/arm-none-eabi/4.7.4/include-fixed"
|
||||||
|
--i"c:\programmi\gnu tools arm embedded\4.7 2013q3\bin\../lib/gcc/arm-none-eabi/4.7.4/../../../../arm-none-eabi/include"
|
|
@ -0,0 +1,330 @@
|
||||||
|
#define __DBL_MIN_EXP__ (-1021)
|
||||||
|
#define __HQ_FBIT__ 15
|
||||||
|
#define __UINT_LEAST16_MAX__ 65535
|
||||||
|
#define __ATOMIC_ACQUIRE 2
|
||||||
|
#define __SFRACT_IBIT__ 0
|
||||||
|
#define __FLT_MIN__ 1.1754943508222875e-38F
|
||||||
|
#define __UFRACT_MAX__ 0XFFFFP-16UR
|
||||||
|
#define __UINT_LEAST8_TYPE__ unsigned char
|
||||||
|
#define __DQ_FBIT__ 63
|
||||||
|
#define __INTMAX_C(c) c ## LL
|
||||||
|
#define __ULFRACT_FBIT__ 32
|
||||||
|
#define __SACCUM_EPSILON__ 0x1P-7HK
|
||||||
|
#define __CHAR_BIT__ 8
|
||||||
|
#define __USQ_IBIT__ 0
|
||||||
|
#define __UINT8_MAX__ 255
|
||||||
|
#define __ACCUM_FBIT__ 15
|
||||||
|
#define __WINT_MAX__ 4294967295U
|
||||||
|
#define __USFRACT_FBIT__ 8
|
||||||
|
#define __ORDER_LITTLE_ENDIAN__ 1234
|
||||||
|
#define __SIZE_MAX__ 4294967295U
|
||||||
|
#define __WCHAR_MAX__ 4294967295U
|
||||||
|
#define __LACCUM_IBIT__ 32
|
||||||
|
#define __DBL_DENORM_MIN__ ((double)4.9406564584124654e-324L)
|
||||||
|
#define __GCC_ATOMIC_CHAR_LOCK_FREE 1
|
||||||
|
#define __FLT_EVAL_METHOD__ 0
|
||||||
|
#define __LLACCUM_MAX__ 0X7FFFFFFFFFFFFFFFP-31LLK
|
||||||
|
#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 1
|
||||||
|
#define __FRACT_FBIT__ 15
|
||||||
|
#define __UINT_FAST64_MAX__ 18446744073709551615ULL
|
||||||
|
#define __SIG_ATOMIC_TYPE__ int
|
||||||
|
#define __UACCUM_FBIT__ 16
|
||||||
|
#define __DBL_MIN_10_EXP__ (-307)
|
||||||
|
#define __FINITE_MATH_ONLY__ 0
|
||||||
|
#define __ARMEL__ 1
|
||||||
|
#define __LFRACT_IBIT__ 0
|
||||||
|
#define __GNUC_PATCHLEVEL__ 4
|
||||||
|
#define __LFRACT_MAX__ 0X7FFFFFFFP-31LR
|
||||||
|
#define __UINT_FAST8_MAX__ 4294967295U
|
||||||
|
#define __DEC64_MAX_EXP__ 385
|
||||||
|
#define __INT8_C(c) c
|
||||||
|
#define __UINT_LEAST64_MAX__ 18446744073709551615ULL
|
||||||
|
#define __SA_FBIT__ 15
|
||||||
|
#define __SHRT_MAX__ 32767
|
||||||
|
#define __LDBL_MAX__ 1.7976931348623157e+308L
|
||||||
|
#define __FRACT_MAX__ 0X7FFFP-15R
|
||||||
|
#define __UFRACT_FBIT__ 16
|
||||||
|
#define __UFRACT_MIN__ 0.0UR
|
||||||
|
#define __UINT_LEAST8_MAX__ 255
|
||||||
|
#define __GCC_ATOMIC_BOOL_LOCK_FREE 1
|
||||||
|
#define __UINTMAX_TYPE__ long long unsigned int
|
||||||
|
#define __LLFRACT_EPSILON__ 0x1P-63LLR
|
||||||
|
#define __DEC32_EPSILON__ 1E-6DF
|
||||||
|
#define __CHAR_UNSIGNED__ 1
|
||||||
|
#define __UINT32_MAX__ 4294967295UL
|
||||||
|
#define __ULFRACT_MAX__ 0XFFFFFFFFP-32ULR
|
||||||
|
#define __TA_IBIT__ 64
|
||||||
|
#define __LDBL_MAX_EXP__ 1024
|
||||||
|
#define __WINT_MIN__ 0U
|
||||||
|
#define __ULLFRACT_MIN__ 0.0ULLR
|
||||||
|
#define __SCHAR_MAX__ 127
|
||||||
|
#define __WCHAR_MIN__ 0U
|
||||||
|
#define __INT64_C(c) c ## LL
|
||||||
|
#define __DBL_DIG__ 15
|
||||||
|
#define __GCC_ATOMIC_POINTER_LOCK_FREE 1
|
||||||
|
#define __LLACCUM_MIN__ (-0X1P31LLK-0X1P31LLK)
|
||||||
|
#define __SIZEOF_INT__ 4
|
||||||
|
#define __SIZEOF_POINTER__ 4
|
||||||
|
#define __USACCUM_IBIT__ 8
|
||||||
|
#define __USER_LABEL_PREFIX__
|
||||||
|
#define __STDC_HOSTED__ 1
|
||||||
|
#define __LDBL_HAS_INFINITY__ 1
|
||||||
|
#define __LFRACT_MIN__ (-0.5LR-0.5LR)
|
||||||
|
#define __HA_IBIT__ 8
|
||||||
|
#define __TQ_IBIT__ 0
|
||||||
|
#define __FLT_EPSILON__ 1.1920928955078125e-7F
|
||||||
|
#define __APCS_32__ 1
|
||||||
|
#define __USFRACT_IBIT__ 0
|
||||||
|
#define __LDBL_MIN__ 2.2250738585072014e-308L
|
||||||
|
#define __FRACT_MIN__ (-0.5R-0.5R)
|
||||||
|
#define __DEC32_MAX__ 9.999999E96DF
|
||||||
|
#define __DA_IBIT__ 32
|
||||||
|
#define __INT32_MAX__ 2147483647L
|
||||||
|
#define __UQQ_FBIT__ 8
|
||||||
|
#define __SIZEOF_LONG__ 4
|
||||||
|
#define __UACCUM_MAX__ 0XFFFFFFFFP-16UK
|
||||||
|
#define __UINT16_C(c) c
|
||||||
|
#define __DECIMAL_DIG__ 17
|
||||||
|
#define __LFRACT_EPSILON__ 0x1P-31LR
|
||||||
|
#define __ULFRACT_MIN__ 0.0ULR
|
||||||
|
#define __LDBL_HAS_QUIET_NAN__ 1
|
||||||
|
#define __ULACCUM_IBIT__ 32
|
||||||
|
#define __UACCUM_EPSILON__ 0x1P-16UK
|
||||||
|
#define __GNUC__ 4
|
||||||
|
#define __ULLACCUM_MAX__ 0XFFFFFFFFFFFFFFFFP-32ULLK
|
||||||
|
#define __HQ_IBIT__ 0
|
||||||
|
#define __FLT_HAS_DENORM__ 1
|
||||||
|
#define __SIZEOF_LONG_DOUBLE__ 8
|
||||||
|
#define __BIGGEST_ALIGNMENT__ 8
|
||||||
|
#define __DQ_IBIT__ 0
|
||||||
|
#define __DBL_MAX__ ((double)1.7976931348623157e+308L)
|
||||||
|
#define __ULFRACT_IBIT__ 0
|
||||||
|
#define __INT_FAST32_MAX__ 2147483647
|
||||||
|
#define __DBL_HAS_INFINITY__ 1
|
||||||
|
#define __ACCUM_IBIT__ 16
|
||||||
|
#define __DEC32_MIN_EXP__ (-94)
|
||||||
|
#define __THUMB_INTERWORK__ 1
|
||||||
|
#define __LACCUM_MAX__ 0X7FFFFFFFFFFFFFFFP-31LK
|
||||||
|
#define __INT_FAST16_TYPE__ int
|
||||||
|
#define __LDBL_HAS_DENORM__ 1
|
||||||
|
#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL
|
||||||
|
#define __INT_LEAST32_MAX__ 2147483647L
|
||||||
|
#define __ARM_PCS 1
|
||||||
|
#define __DEC32_MIN__ 1E-95DF
|
||||||
|
#define __ACCUM_MAX__ 0X7FFFFFFFP-15K
|
||||||
|
#define __DBL_MAX_EXP__ 1024
|
||||||
|
#define __USACCUM_EPSILON__ 0x1P-8UHK
|
||||||
|
#define __DEC128_EPSILON__ 1E-33DL
|
||||||
|
#define __SFRACT_MAX__ 0X7FP-7HR
|
||||||
|
#define __FRACT_IBIT__ 0
|
||||||
|
#define __PTRDIFF_MAX__ 2147483647
|
||||||
|
#define __UACCUM_MIN__ 0.0UK
|
||||||
|
#define __UACCUM_IBIT__ 16
|
||||||
|
#define __LONG_LONG_MAX__ 9223372036854775807LL
|
||||||
|
#define __SIZEOF_SIZE_T__ 4
|
||||||
|
#define __ULACCUM_MAX__ 0XFFFFFFFFFFFFFFFFP-32ULK
|
||||||
|
#define __SIZEOF_WINT_T__ 4
|
||||||
|
#define __SA_IBIT__ 16
|
||||||
|
#define __ULLACCUM_MIN__ 0.0ULLK
|
||||||
|
#define __GXX_ABI_VERSION 1002
|
||||||
|
#define __UTA_FBIT__ 64
|
||||||
|
#define __SOFTFP__ 1
|
||||||
|
#define __FLT_MIN_EXP__ (-125)
|
||||||
|
#define __USFRACT_MAX__ 0XFFP-8UHR
|
||||||
|
#define __UFRACT_IBIT__ 0
|
||||||
|
#define __INT_FAST64_TYPE__ long long int
|
||||||
|
#define __DBL_MIN__ ((double)2.2250738585072014e-308L)
|
||||||
|
#define __LACCUM_MIN__ (-0X1P31LK-0X1P31LK)
|
||||||
|
#define __ULLACCUM_FBIT__ 32
|
||||||
|
#define __GXX_TYPEINFO_EQUALITY_INLINE 0
|
||||||
|
#define __ULLFRACT_EPSILON__ 0x1P-64ULLR
|
||||||
|
#define __USES_INITFINI__ 1
|
||||||
|
#define __DEC128_MIN__ 1E-6143DL
|
||||||
|
#define __REGISTER_PREFIX__
|
||||||
|
#define __UINT16_MAX__ 65535
|
||||||
|
#define __DBL_HAS_DENORM__ 1
|
||||||
|
#define __ACCUM_MIN__ (-0X1P15K-0X1P15K)
|
||||||
|
#define __SQ_IBIT__ 0
|
||||||
|
#define __UINT8_TYPE__ unsigned char
|
||||||
|
#define __UHA_FBIT__ 8
|
||||||
|
#define __NO_INLINE__ 1
|
||||||
|
#define __SFRACT_MIN__ (-0.5HR-0.5HR)
|
||||||
|
#define __UTQ_FBIT__ 128
|
||||||
|
#define __FLT_MANT_DIG__ 24
|
||||||
|
#define __VERSION__ "4.7.4 20130913 (release) [ARM/embedded-4_7-branch revision 202601]"
|
||||||
|
#define __UINT64_C(c) c ## ULL
|
||||||
|
#define __ULLFRACT_FBIT__ 64
|
||||||
|
#define __FRACT_EPSILON__ 0x1P-15R
|
||||||
|
#define __ULACCUM_MIN__ 0.0ULK
|
||||||
|
#define __UDA_FBIT__ 32
|
||||||
|
#define __LLACCUM_EPSILON__ 0x1P-31LLK
|
||||||
|
#define __GCC_ATOMIC_INT_LOCK_FREE 1
|
||||||
|
#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__
|
||||||
|
#define __USFRACT_MIN__ 0.0UHR
|
||||||
|
#define __UQQ_IBIT__ 0
|
||||||
|
#define __INT32_C(c) c ## L
|
||||||
|
#define __DEC64_EPSILON__ 1E-15DD
|
||||||
|
#define __ORDER_PDP_ENDIAN__ 3412
|
||||||
|
#define __DEC128_MIN_EXP__ (-6142)
|
||||||
|
#define __UHQ_FBIT__ 16
|
||||||
|
#define __LLACCUM_FBIT__ 31
|
||||||
|
#define __INT_FAST32_TYPE__ int
|
||||||
|
#define __UINT_LEAST16_TYPE__ short unsigned int
|
||||||
|
#define __INT16_MAX__ 32767
|
||||||
|
#define __SIZE_TYPE__ unsigned int
|
||||||
|
#define __UINT64_MAX__ 18446744073709551615ULL
|
||||||
|
#define __UDQ_FBIT__ 64
|
||||||
|
#define __INT8_TYPE__ signed char
|
||||||
|
#define __ELF__ 1
|
||||||
|
#define __ULFRACT_EPSILON__ 0x1P-32ULR
|
||||||
|
#define __LLFRACT_FBIT__ 63
|
||||||
|
#define __FLT_RADIX__ 2
|
||||||
|
#define __INT_LEAST16_TYPE__ short int
|
||||||
|
#define __LDBL_EPSILON__ 2.2204460492503131e-16L
|
||||||
|
#define __UINTMAX_C(c) c ## ULL
|
||||||
|
#define __SACCUM_MAX__ 0X7FFFP-7HK
|
||||||
|
#define __SIG_ATOMIC_MAX__ 2147483647
|
||||||
|
#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 1
|
||||||
|
#define __VFP_FP__ 1
|
||||||
|
#define __SIZEOF_PTRDIFF_T__ 4
|
||||||
|
#define __LACCUM_EPSILON__ 0x1P-31LK
|
||||||
|
#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF
|
||||||
|
#define __INT_FAST16_MAX__ 2147483647
|
||||||
|
#define __UINT_FAST32_MAX__ 4294967295U
|
||||||
|
#define __UINT_LEAST64_TYPE__ long long unsigned int
|
||||||
|
#define __USACCUM_MAX__ 0XFFFFP-8UHK
|
||||||
|
#define __SFRACT_EPSILON__ 0x1P-7HR
|
||||||
|
#define __FLT_HAS_QUIET_NAN__ 1
|
||||||
|
#define __FLT_MAX_10_EXP__ 38
|
||||||
|
#define __LONG_MAX__ 2147483647L
|
||||||
|
#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL
|
||||||
|
#define __FLT_HAS_INFINITY__ 1
|
||||||
|
#define __USA_FBIT__ 16
|
||||||
|
#define __UINT_FAST16_TYPE__ unsigned int
|
||||||
|
#define __DEC64_MAX__ 9.999999999999999E384DD
|
||||||
|
#define __CHAR16_TYPE__ short unsigned int
|
||||||
|
#define __PRAGMA_REDEFINE_EXTNAME 1
|
||||||
|
#define __INT_LEAST16_MAX__ 32767
|
||||||
|
#define __DEC64_MANT_DIG__ 16
|
||||||
|
#define __INT64_MAX__ 9223372036854775807LL
|
||||||
|
#define __UINT_LEAST32_MAX__ 4294967295UL
|
||||||
|
#define __SACCUM_FBIT__ 7
|
||||||
|
#define __GCC_ATOMIC_LONG_LOCK_FREE 1
|
||||||
|
#define __INT_LEAST64_TYPE__ long long int
|
||||||
|
#define __INT16_TYPE__ short int
|
||||||
|
#define __INT_LEAST8_TYPE__ signed char
|
||||||
|
#define __SQ_FBIT__ 31
|
||||||
|
#define __DEC32_MAX_EXP__ 97
|
||||||
|
#define __INT_FAST8_MAX__ 2147483647
|
||||||
|
#define __INTPTR_MAX__ 2147483647
|
||||||
|
#define __QQ_FBIT__ 7
|
||||||
|
#define __UTA_IBIT__ 64
|
||||||
|
#define __LDBL_MANT_DIG__ 53
|
||||||
|
#define __SFRACT_FBIT__ 7
|
||||||
|
#define __SACCUM_MIN__ (-0X1P7HK-0X1P7HK)
|
||||||
|
#define __DBL_HAS_QUIET_NAN__ 1
|
||||||
|
#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1)
|
||||||
|
#define __INTPTR_TYPE__ int
|
||||||
|
#define __UINT16_TYPE__ short unsigned int
|
||||||
|
#define __WCHAR_TYPE__ unsigned int
|
||||||
|
#define __SIZEOF_FLOAT__ 4
|
||||||
|
#define __USQ_FBIT__ 32
|
||||||
|
#define __UINTPTR_MAX__ 4294967295U
|
||||||
|
#define __DEC64_MIN_EXP__ (-382)
|
||||||
|
#define __ULLACCUM_IBIT__ 32
|
||||||
|
#define __INT_FAST64_MAX__ 9223372036854775807LL
|
||||||
|
#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1
|
||||||
|
#define __FLT_DIG__ 6
|
||||||
|
#define __UINT_FAST64_TYPE__ long long unsigned int
|
||||||
|
#define __INT_MAX__ 2147483647
|
||||||
|
#define __LACCUM_FBIT__ 31
|
||||||
|
#define __USACCUM_MIN__ 0.0UHK
|
||||||
|
#define __UHA_IBIT__ 8
|
||||||
|
#define __INT64_TYPE__ long long int
|
||||||
|
#define __FLT_MAX_EXP__ 128
|
||||||
|
#define __UTQ_IBIT__ 0
|
||||||
|
#define __DBL_MANT_DIG__ 53
|
||||||
|
#define __INT_LEAST64_MAX__ 9223372036854775807LL
|
||||||
|
#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 1
|
||||||
|
#define __DEC64_MIN__ 1E-383DD
|
||||||
|
#define __WINT_TYPE__ unsigned int
|
||||||
|
#define __UINT_LEAST32_TYPE__ long unsigned int
|
||||||
|
#define __SIZEOF_SHORT__ 2
|
||||||
|
#define __ULLFRACT_IBIT__ 0
|
||||||
|
#define __LDBL_MIN_EXP__ (-1021)
|
||||||
|
#define __arm__ 1
|
||||||
|
#define __UDA_IBIT__ 32
|
||||||
|
#define __INT_LEAST8_MAX__ 127
|
||||||
|
#define __LFRACT_FBIT__ 31
|
||||||
|
#define __LDBL_MAX_10_EXP__ 308
|
||||||
|
#define __ATOMIC_RELAXED 0
|
||||||
|
#define __DBL_EPSILON__ ((double)2.2204460492503131e-16L)
|
||||||
|
#define __UINT8_C(c) c
|
||||||
|
#define __INT_LEAST32_TYPE__ long int
|
||||||
|
#define __SIZEOF_WCHAR_T__ 4
|
||||||
|
#define __UINT64_TYPE__ long long unsigned int
|
||||||
|
#define __LLFRACT_MAX__ 0X7FFFFFFFFFFFFFFFP-63LLR
|
||||||
|
#define __TQ_FBIT__ 127
|
||||||
|
#define __INT_FAST8_TYPE__ int
|
||||||
|
#define __ULLACCUM_EPSILON__ 0x1P-32ULLK
|
||||||
|
#define __UHQ_IBIT__ 0
|
||||||
|
#define __LLACCUM_IBIT__ 32
|
||||||
|
#define __DBL_DECIMAL_DIG__ 17
|
||||||
|
#define __DEC_EVAL_METHOD__ 2
|
||||||
|
#define __TA_FBIT__ 63
|
||||||
|
#define __UDQ_IBIT__ 0
|
||||||
|
#define __ORDER_BIG_ENDIAN__ 4321
|
||||||
|
#define __ACCUM_EPSILON__ 0x1P-15K
|
||||||
|
#define __UINT32_C(c) c ## UL
|
||||||
|
#define __INTMAX_MAX__ 9223372036854775807LL
|
||||||
|
#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
|
||||||
|
#define __FLT_DENORM_MIN__ 1.4012984643248171e-45F
|
||||||
|
#define __LLFRACT_IBIT__ 0
|
||||||
|
#define __INT8_MAX__ 127
|
||||||
|
#define __UINT_FAST32_TYPE__ unsigned int
|
||||||
|
#define __CHAR32_TYPE__ long unsigned int
|
||||||
|
#define __FLT_MAX__ 3.4028234663852886e+38F
|
||||||
|
#define __USACCUM_FBIT__ 8
|
||||||
|
#define __INT32_TYPE__ long int
|
||||||
|
#define __SIZEOF_DOUBLE__ 8
|
||||||
|
#define __FLT_MIN_10_EXP__ (-37)
|
||||||
|
#define __UFRACT_EPSILON__ 0x1P-16UR
|
||||||
|
#define __INTMAX_TYPE__ long long int
|
||||||
|
#define __DEC128_MAX_EXP__ 6145
|
||||||
|
#define __ATOMIC_CONSUME 1
|
||||||
|
#define __GNUC_MINOR__ 7
|
||||||
|
#define __UINTMAX_MAX__ 18446744073709551615ULL
|
||||||
|
#define __DEC32_MANT_DIG__ 7
|
||||||
|
#define __HA_FBIT__ 7
|
||||||
|
#define __DBL_MAX_10_EXP__ 308
|
||||||
|
#define __LDBL_DENORM_MIN__ 4.9406564584124654e-324L
|
||||||
|
#define __INT16_C(c) c
|
||||||
|
#define __STDC__ 1
|
||||||
|
#define __ARM_ARCH_4T__ 1
|
||||||
|
#define __PTRDIFF_TYPE__ int
|
||||||
|
#define __LLFRACT_MIN__ (-0.5LLR-0.5LLR)
|
||||||
|
#define __ATOMIC_SEQ_CST 5
|
||||||
|
#define __DA_FBIT__ 31
|
||||||
|
#define __UINT32_TYPE__ long unsigned int
|
||||||
|
#define __UINTPTR_TYPE__ unsigned int
|
||||||
|
#define __USA_IBIT__ 16
|
||||||
|
#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD
|
||||||
|
#define __ARM_EABI__ 1
|
||||||
|
#define __DEC128_MANT_DIG__ 34
|
||||||
|
#define __LDBL_MIN_10_EXP__ (-307)
|
||||||
|
#define __SIZEOF_LONG_LONG__ 8
|
||||||
|
#define __ULACCUM_EPSILON__ 0x1P-32ULK
|
||||||
|
#define __SACCUM_IBIT__ 8
|
||||||
|
#define __GCC_ATOMIC_LLONG_LOCK_FREE 1
|
||||||
|
#define __LDBL_DIG__ 15
|
||||||
|
#define __FLT_DECIMAL_DIG__ 9
|
||||||
|
#define __UINT_FAST16_MAX__ 4294967295U
|
||||||
|
#define __GNUC_GNU_INLINE__ 1
|
||||||
|
#define __GCC_ATOMIC_SHORT_LOCK_FREE 1
|
||||||
|
#define __ULLFRACT_MAX__ 0XFFFFFFFFFFFFFFFFP-64ULLR
|
||||||
|
#define __UINT_FAST8_TYPE__ unsigned int
|
||||||
|
#define __USFRACT_EPSILON__ 0x1P-8UHR
|
||||||
|
#define __ULACCUM_FBIT__ 32
|
||||||
|
#define __QQ_IBIT__ 0
|
||||||
|
#define __ATOMIC_ACQ_REL 4
|
||||||
|
#define __ATOMIC_RELEASE 3
|
|
@ -0,0 +1,336 @@
|
||||||
|
#define __DBL_MIN_EXP__ (-1021)
|
||||||
|
#define __HQ_FBIT__ 15
|
||||||
|
#define __UINT_LEAST16_MAX__ 65535
|
||||||
|
#define __ATOMIC_ACQUIRE 2
|
||||||
|
#define __SFRACT_IBIT__ 0
|
||||||
|
#define __FLT_MIN__ 1.1754943508222875e-38F
|
||||||
|
#define __UFRACT_MAX__ 0XFFFFP-16UR
|
||||||
|
#define __UINT_LEAST8_TYPE__ unsigned char
|
||||||
|
#define __DQ_FBIT__ 63
|
||||||
|
#define __INTMAX_C(c) c ## LL
|
||||||
|
#define __ULFRACT_FBIT__ 32
|
||||||
|
#define __SACCUM_EPSILON__ 0x1P-7HK
|
||||||
|
#define __CHAR_BIT__ 8
|
||||||
|
#define __USQ_IBIT__ 0
|
||||||
|
#define __UINT8_MAX__ 255
|
||||||
|
#define __ACCUM_FBIT__ 15
|
||||||
|
#define __WINT_MAX__ 4294967295U
|
||||||
|
#define __USFRACT_FBIT__ 8
|
||||||
|
#define __ORDER_LITTLE_ENDIAN__ 1234
|
||||||
|
#define __SIZE_MAX__ 4294967295U
|
||||||
|
#define __WCHAR_MAX__ 4294967295U
|
||||||
|
#define __LACCUM_IBIT__ 32
|
||||||
|
#define __DBL_DENORM_MIN__ double(4.9406564584124654e-324L)
|
||||||
|
#define __GCC_ATOMIC_CHAR_LOCK_FREE 1
|
||||||
|
#define __FLT_EVAL_METHOD__ 0
|
||||||
|
#define __LLACCUM_MAX__ 0X7FFFFFFFFFFFFFFFP-31LLK
|
||||||
|
#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 1
|
||||||
|
#define __FRACT_FBIT__ 15
|
||||||
|
#define __UINT_FAST64_MAX__ 18446744073709551615ULL
|
||||||
|
#define __SIG_ATOMIC_TYPE__ int
|
||||||
|
#define __UACCUM_FBIT__ 16
|
||||||
|
#define __DBL_MIN_10_EXP__ (-307)
|
||||||
|
#define __FINITE_MATH_ONLY__ 0
|
||||||
|
#define __ARMEL__ 1
|
||||||
|
#define __LFRACT_IBIT__ 0
|
||||||
|
#define __GNUC_PATCHLEVEL__ 4
|
||||||
|
#define __LFRACT_MAX__ 0X7FFFFFFFP-31LR
|
||||||
|
#define __UINT_FAST8_MAX__ 4294967295U
|
||||||
|
#define __DEC64_MAX_EXP__ 385
|
||||||
|
#define __INT8_C(c) c
|
||||||
|
#define __UINT_LEAST64_MAX__ 18446744073709551615ULL
|
||||||
|
#define __SA_FBIT__ 15
|
||||||
|
#define __SHRT_MAX__ 32767
|
||||||
|
#define __LDBL_MAX__ 1.7976931348623157e+308L
|
||||||
|
#define __FRACT_MAX__ 0X7FFFP-15R
|
||||||
|
#define __UFRACT_FBIT__ 16
|
||||||
|
#define __UFRACT_MIN__ 0.0UR
|
||||||
|
#define __UINT_LEAST8_MAX__ 255
|
||||||
|
#define __GCC_ATOMIC_BOOL_LOCK_FREE 1
|
||||||
|
#define __UINTMAX_TYPE__ long long unsigned int
|
||||||
|
#define __LLFRACT_EPSILON__ 0x1P-63LLR
|
||||||
|
#define __DEC32_EPSILON__ 1E-6DF
|
||||||
|
#define __CHAR_UNSIGNED__ 1
|
||||||
|
#define __UINT32_MAX__ 4294967295UL
|
||||||
|
#define __ULFRACT_MAX__ 0XFFFFFFFFP-32ULR
|
||||||
|
#define __TA_IBIT__ 64
|
||||||
|
#define __LDBL_MAX_EXP__ 1024
|
||||||
|
#define __WINT_MIN__ 0U
|
||||||
|
#define __ULLFRACT_MIN__ 0.0ULLR
|
||||||
|
#define __SCHAR_MAX__ 127
|
||||||
|
#define __WCHAR_MIN__ 0U
|
||||||
|
#define __INT64_C(c) c ## LL
|
||||||
|
#define __DBL_DIG__ 15
|
||||||
|
#define __GCC_ATOMIC_POINTER_LOCK_FREE 1
|
||||||
|
#define __LLACCUM_MIN__ (-0X1P31LLK-0X1P31LLK)
|
||||||
|
#define __SIZEOF_INT__ 4
|
||||||
|
#define __SIZEOF_POINTER__ 4
|
||||||
|
#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 1
|
||||||
|
#define __USACCUM_IBIT__ 8
|
||||||
|
#define __USER_LABEL_PREFIX__
|
||||||
|
#define __STDC_HOSTED__ 1
|
||||||
|
#define __LDBL_HAS_INFINITY__ 1
|
||||||
|
#define __LFRACT_MIN__ (-0.5LR-0.5LR)
|
||||||
|
#define __HA_IBIT__ 8
|
||||||
|
#define __TQ_IBIT__ 0
|
||||||
|
#define __FLT_EPSILON__ 1.1920928955078125e-7F
|
||||||
|
#define __APCS_32__ 1
|
||||||
|
#define __GXX_WEAK__ 1
|
||||||
|
#define __USFRACT_IBIT__ 0
|
||||||
|
#define __LDBL_MIN__ 2.2250738585072014e-308L
|
||||||
|
#define __FRACT_MIN__ (-0.5R-0.5R)
|
||||||
|
#define __DEC32_MAX__ 9.999999E96DF
|
||||||
|
#define __DA_IBIT__ 32
|
||||||
|
#define __INT32_MAX__ 2147483647L
|
||||||
|
#define __UQQ_FBIT__ 8
|
||||||
|
#define __SIZEOF_LONG__ 4
|
||||||
|
#define __UACCUM_MAX__ 0XFFFFFFFFP-16UK
|
||||||
|
#define __UINT16_C(c) c
|
||||||
|
#define __DECIMAL_DIG__ 17
|
||||||
|
#define __LFRACT_EPSILON__ 0x1P-31LR
|
||||||
|
#define __ULFRACT_MIN__ 0.0ULR
|
||||||
|
#define __LDBL_HAS_QUIET_NAN__ 1
|
||||||
|
#define __ULACCUM_IBIT__ 32
|
||||||
|
#define __UACCUM_EPSILON__ 0x1P-16UK
|
||||||
|
#define __GNUC__ 4
|
||||||
|
#define __ULLACCUM_MAX__ 0XFFFFFFFFFFFFFFFFP-32ULLK
|
||||||
|
#define __HQ_IBIT__ 0
|
||||||
|
#define __FLT_HAS_DENORM__ 1
|
||||||
|
#define __SIZEOF_LONG_DOUBLE__ 8
|
||||||
|
#define __BIGGEST_ALIGNMENT__ 8
|
||||||
|
#define __DQ_IBIT__ 0
|
||||||
|
#define __DBL_MAX__ double(1.7976931348623157e+308L)
|
||||||
|
#define __ULFRACT_IBIT__ 0
|
||||||
|
#define __INT_FAST32_MAX__ 2147483647
|
||||||
|
#define __DBL_HAS_INFINITY__ 1
|
||||||
|
#define __INT64_MAX__ 9223372036854775807LL
|
||||||
|
#define __ACCUM_IBIT__ 16
|
||||||
|
#define __DEC32_MIN_EXP__ (-94)
|
||||||
|
#define __THUMB_INTERWORK__ 1
|
||||||
|
#define __LACCUM_MAX__ 0X7FFFFFFFFFFFFFFFP-31LK
|
||||||
|
#define __INT_FAST16_TYPE__ int
|
||||||
|
#define __LDBL_HAS_DENORM__ 1
|
||||||
|
#define __cplusplus 199711L
|
||||||
|
#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL
|
||||||
|
#define __INT_LEAST32_MAX__ 2147483647L
|
||||||
|
#define __ARM_PCS 1
|
||||||
|
#define __DEC32_MIN__ 1E-95DF
|
||||||
|
#define __ACCUM_MAX__ 0X7FFFFFFFP-15K
|
||||||
|
#define __DEPRECATED 1
|
||||||
|
#define __DBL_MAX_EXP__ 1024
|
||||||
|
#define __USACCUM_EPSILON__ 0x1P-8UHK
|
||||||
|
#define __DEC128_EPSILON__ 1E-33DL
|
||||||
|
#define __SFRACT_MAX__ 0X7FP-7HR
|
||||||
|
#define __FRACT_IBIT__ 0
|
||||||
|
#define __PTRDIFF_MAX__ 2147483647
|
||||||
|
#define __UACCUM_MIN__ 0.0UK
|
||||||
|
#define __UACCUM_IBIT__ 16
|
||||||
|
#define __GNUG__ 4
|
||||||
|
#define __LONG_LONG_MAX__ 9223372036854775807LL
|
||||||
|
#define __SIZEOF_SIZE_T__ 4
|
||||||
|
#define __ULACCUM_MAX__ 0XFFFFFFFFFFFFFFFFP-32ULK
|
||||||
|
#define __SIZEOF_WINT_T__ 4
|
||||||
|
#define __SA_IBIT__ 16
|
||||||
|
#define __ULLACCUM_MIN__ 0.0ULLK
|
||||||
|
#define __GXX_ABI_VERSION 1002
|
||||||
|
#define __UTA_FBIT__ 64
|
||||||
|
#define __SOFTFP__ 1
|
||||||
|
#define __FLT_MIN_EXP__ (-125)
|
||||||
|
#define __USFRACT_MAX__ 0XFFP-8UHR
|
||||||
|
#define __UFRACT_IBIT__ 0
|
||||||
|
#define __INT_FAST64_TYPE__ long long int
|
||||||
|
#define __DBL_MIN__ double(2.2250738585072014e-308L)
|
||||||
|
#define __FLT_MIN_10_EXP__ (-37)
|
||||||
|
#define __LACCUM_MIN__ (-0X1P31LK-0X1P31LK)
|
||||||
|
#define __ULLACCUM_FBIT__ 32
|
||||||
|
#define __GXX_TYPEINFO_EQUALITY_INLINE 0
|
||||||
|
#define __ULLFRACT_EPSILON__ 0x1P-64ULLR
|
||||||
|
#define __USES_INITFINI__ 1
|
||||||
|
#define __DEC128_MIN__ 1E-6143DL
|
||||||
|
#define __REGISTER_PREFIX__
|
||||||
|
#define __UINT16_MAX__ 65535
|
||||||
|
#define __DBL_HAS_DENORM__ 1
|
||||||
|
#define __ACCUM_MIN__ (-0X1P15K-0X1P15K)
|
||||||
|
#define __SQ_IBIT__ 0
|
||||||
|
#define __UINT8_TYPE__ unsigned char
|
||||||
|
#define __UHA_FBIT__ 8
|
||||||
|
#define __NO_INLINE__ 1
|
||||||
|
#define __SFRACT_MIN__ (-0.5HR-0.5HR)
|
||||||
|
#define __UTQ_FBIT__ 128
|
||||||
|
#define __FLT_MANT_DIG__ 24
|
||||||
|
#define __VERSION__ "4.7.4 20130913 (release) [ARM/embedded-4_7-branch revision 202601]"
|
||||||
|
#define __UINT64_C(c) c ## ULL
|
||||||
|
#define __ULLFRACT_FBIT__ 64
|
||||||
|
#define __FRACT_EPSILON__ 0x1P-15R
|
||||||
|
#define __ULACCUM_MIN__ 0.0ULK
|
||||||
|
#define __UDA_FBIT__ 32
|
||||||
|
#define __LLACCUM_EPSILON__ 0x1P-31LLK
|
||||||
|
#define __GCC_ATOMIC_INT_LOCK_FREE 1
|
||||||
|
#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__
|
||||||
|
#define __USFRACT_MIN__ 0.0UHR
|
||||||
|
#define __ULLACCUM_IBIT__ 32
|
||||||
|
#define __UQQ_IBIT__ 0
|
||||||
|
#define __INT32_C(c) c ## L
|
||||||
|
#define __DEC64_EPSILON__ 1E-15DD
|
||||||
|
#define __ORDER_PDP_ENDIAN__ 3412
|
||||||
|
#define __DEC128_MIN_EXP__ (-6142)
|
||||||
|
#define __UHQ_FBIT__ 16
|
||||||
|
#define __LLACCUM_FBIT__ 31
|
||||||
|
#define __INT_FAST32_TYPE__ int
|
||||||
|
#define __UINT_LEAST16_TYPE__ short unsigned int
|
||||||
|
#define __INT16_MAX__ 32767
|
||||||
|
#define __SIZE_TYPE__ unsigned int
|
||||||
|
#define __UINT64_MAX__ 18446744073709551615ULL
|
||||||
|
#define __UDQ_FBIT__ 64
|
||||||
|
#define __INT8_TYPE__ signed char
|
||||||
|
#define __ELF__ 1
|
||||||
|
#define __ULFRACT_EPSILON__ 0x1P-32ULR
|
||||||
|
#define __LLFRACT_FBIT__ 63
|
||||||
|
#define __FLT_RADIX__ 2
|
||||||
|
#define __INT_LEAST16_TYPE__ short int
|
||||||
|
#define __LDBL_EPSILON__ 2.2204460492503131e-16L
|
||||||
|
#define __UINTMAX_C(c) c ## ULL
|
||||||
|
#define __SACCUM_MAX__ 0X7FFFP-7HK
|
||||||
|
#define __SIG_ATOMIC_MAX__ 2147483647
|
||||||
|
#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 1
|
||||||
|
#define __VFP_FP__ 1
|
||||||
|
#define __SIZEOF_PTRDIFF_T__ 4
|
||||||
|
#define __LACCUM_EPSILON__ 0x1P-31LK
|
||||||
|
#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF
|
||||||
|
#define __INT_FAST16_MAX__ 2147483647
|
||||||
|
#define __UINT_FAST32_MAX__ 4294967295U
|
||||||
|
#define __UINT_LEAST64_TYPE__ long long unsigned int
|
||||||
|
#define __USACCUM_MAX__ 0XFFFFP-8UHK
|
||||||
|
#define __SFRACT_EPSILON__ 0x1P-7HR
|
||||||
|
#define __FLT_HAS_QUIET_NAN__ 1
|
||||||
|
#define __FLT_MAX_10_EXP__ 38
|
||||||
|
#define __LONG_MAX__ 2147483647L
|
||||||
|
#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL
|
||||||
|
#define __FLT_HAS_INFINITY__ 1
|
||||||
|
#define __USA_FBIT__ 16
|
||||||
|
#define __UINT_FAST16_TYPE__ unsigned int
|
||||||
|
#define __DEC64_MAX__ 9.999999999999999E384DD
|
||||||
|
#define __CHAR16_TYPE__ short unsigned int
|
||||||
|
#define __PRAGMA_REDEFINE_EXTNAME 1
|
||||||
|
#define __INT_LEAST16_MAX__ 32767
|
||||||
|
#define __DEC64_MANT_DIG__ 16
|
||||||
|
#define __UINT_LEAST32_MAX__ 4294967295UL
|
||||||
|
#define __SACCUM_FBIT__ 7
|
||||||
|
#define __GCC_ATOMIC_LONG_LOCK_FREE 1
|
||||||
|
#define __INT_LEAST64_TYPE__ long long int
|
||||||
|
#define __INT16_TYPE__ short int
|
||||||
|
#define __INT_LEAST8_TYPE__ signed char
|
||||||
|
#define __SQ_FBIT__ 31
|
||||||
|
#define __DEC32_MAX_EXP__ 97
|
||||||
|
#define __INT_FAST8_MAX__ 2147483647
|
||||||
|
#define __INTPTR_MAX__ 2147483647
|
||||||
|
#define __QQ_FBIT__ 7
|
||||||
|
#define __UTA_IBIT__ 64
|
||||||
|
#define __EXCEPTIONS 1
|
||||||
|
#define __LDBL_MANT_DIG__ 53
|
||||||
|
#define __SFRACT_FBIT__ 7
|
||||||
|
#define __SACCUM_MIN__ (-0X1P7HK-0X1P7HK)
|
||||||
|
#define __DBL_HAS_QUIET_NAN__ 1
|
||||||
|
#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1)
|
||||||
|
#define __INTPTR_TYPE__ int
|
||||||
|
#define __UINT16_TYPE__ short unsigned int
|
||||||
|
#define __WCHAR_TYPE__ unsigned int
|
||||||
|
#define __SIZEOF_FLOAT__ 4
|
||||||
|
#define __USQ_FBIT__ 32
|
||||||
|
#define __UINTPTR_MAX__ 4294967295U
|
||||||
|
#define __DEC64_MIN_EXP__ (-382)
|
||||||
|
#define __INT_FAST64_MAX__ 9223372036854775807LL
|
||||||
|
#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1
|
||||||
|
#define __FLT_DIG__ 6
|
||||||
|
#define __UINT_FAST64_TYPE__ long long unsigned int
|
||||||
|
#define __INT_MAX__ 2147483647
|
||||||
|
#define __LACCUM_FBIT__ 31
|
||||||
|
#define __USACCUM_MIN__ 0.0UHK
|
||||||
|
#define __UHA_IBIT__ 8
|
||||||
|
#define __INT64_TYPE__ long long int
|
||||||
|
#define __FLT_MAX_EXP__ 128
|
||||||
|
#define __UTQ_IBIT__ 0
|
||||||
|
#define __DBL_MANT_DIG__ 53
|
||||||
|
#define __INT_LEAST64_MAX__ 9223372036854775807LL
|
||||||
|
#define __DEC64_MIN__ 1E-383DD
|
||||||
|
#define __WINT_TYPE__ unsigned int
|
||||||
|
#define __UINT_LEAST32_TYPE__ long unsigned int
|
||||||
|
#define __SIZEOF_SHORT__ 2
|
||||||
|
#define __ULLFRACT_IBIT__ 0
|
||||||
|
#define __LDBL_MIN_EXP__ (-1021)
|
||||||
|
#define __arm__ 1
|
||||||
|
#define __UDA_IBIT__ 32
|
||||||
|
#define __INT_LEAST8_MAX__ 127
|
||||||
|
#define __LFRACT_FBIT__ 31
|
||||||
|
#define __WCHAR_UNSIGNED__ 1
|
||||||
|
#define __LDBL_MAX_10_EXP__ 308
|
||||||
|
#define __ATOMIC_RELAXED 0
|
||||||
|
#define __DBL_EPSILON__ double(2.2204460492503131e-16L)
|
||||||
|
#define __UINT8_C(c) c
|
||||||
|
#define __INT_LEAST32_TYPE__ long int
|
||||||
|
#define __SIZEOF_WCHAR_T__ 4
|
||||||
|
#define __UINT64_TYPE__ long long unsigned int
|
||||||
|
#define __LLFRACT_MAX__ 0X7FFFFFFFFFFFFFFFP-63LLR
|
||||||
|
#define __TQ_FBIT__ 127
|
||||||
|
#define __INT_FAST8_TYPE__ int
|
||||||
|
#define __ULLACCUM_EPSILON__ 0x1P-32ULLK
|
||||||
|
#define __UHQ_IBIT__ 0
|
||||||
|
#define __LLACCUM_IBIT__ 32
|
||||||
|
#define __DBL_DECIMAL_DIG__ 17
|
||||||
|
#define __DEC_EVAL_METHOD__ 2
|
||||||
|
#define __TA_FBIT__ 63
|
||||||
|
#define __UDQ_IBIT__ 0
|
||||||
|
#define __ORDER_BIG_ENDIAN__ 4321
|
||||||
|
#define __ACCUM_EPSILON__ 0x1P-15K
|
||||||
|
#define __UINT32_C(c) c ## UL
|
||||||
|
#define __INTMAX_MAX__ 9223372036854775807LL
|
||||||
|
#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
|
||||||
|
#define __FLT_DENORM_MIN__ 1.4012984643248171e-45F
|
||||||
|
#define __LLFRACT_IBIT__ 0
|
||||||
|
#define __INT8_MAX__ 127
|
||||||
|
#define __UINT_FAST32_TYPE__ unsigned int
|
||||||
|
#define __CHAR32_TYPE__ long unsigned int
|
||||||
|
#define __FLT_MAX__ 3.4028234663852886e+38F
|
||||||
|
#define __USACCUM_FBIT__ 8
|
||||||
|
#define __INT32_TYPE__ long int
|
||||||
|
#define __SIZEOF_DOUBLE__ 8
|
||||||
|
#define __UFRACT_EPSILON__ 0x1P-16UR
|
||||||
|
#define __INTMAX_TYPE__ long long int
|
||||||
|
#define __DEC128_MAX_EXP__ 6145
|
||||||
|
#define __ATOMIC_CONSUME 1
|
||||||
|
#define __GNUC_MINOR__ 7
|
||||||
|
#define __UINTMAX_MAX__ 18446744073709551615ULL
|
||||||
|
#define __DEC32_MANT_DIG__ 7
|
||||||
|
#define __HA_FBIT__ 7
|
||||||
|
#define __DBL_MAX_10_EXP__ 308
|
||||||
|
#define __LDBL_DENORM_MIN__ 4.9406564584124654e-324L
|
||||||
|
#define __INT16_C(c) c
|
||||||
|
#define __STDC__ 1
|
||||||
|
#define __ARM_ARCH_4T__ 1
|
||||||
|
#define __PTRDIFF_TYPE__ int
|
||||||
|
#define __LLFRACT_MIN__ (-0.5LLR-0.5LLR)
|
||||||
|
#define __ATOMIC_SEQ_CST 5
|
||||||
|
#define __DA_FBIT__ 31
|
||||||
|
#define __UINT32_TYPE__ long unsigned int
|
||||||
|
#define __UINTPTR_TYPE__ unsigned int
|
||||||
|
#define __USA_IBIT__ 16
|
||||||
|
#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD
|
||||||
|
#define __ARM_EABI__ 1
|
||||||
|
#define __DEC128_MANT_DIG__ 34
|
||||||
|
#define __LDBL_MIN_10_EXP__ (-307)
|
||||||
|
#define __SIZEOF_LONG_LONG__ 8
|
||||||
|
#define __ULACCUM_EPSILON__ 0x1P-32ULK
|
||||||
|
#define __SACCUM_IBIT__ 8
|
||||||
|
#define __GCC_ATOMIC_LLONG_LOCK_FREE 1
|
||||||
|
#define __LDBL_DIG__ 15
|
||||||
|
#define __FLT_DECIMAL_DIG__ 9
|
||||||
|
#define __UINT_FAST16_MAX__ 4294967295U
|
||||||
|
#define __GNUC_GNU_INLINE__ 1
|
||||||
|
#define __GCC_ATOMIC_SHORT_LOCK_FREE 1
|
||||||
|
#define __ULLFRACT_MAX__ 0XFFFFFFFFFFFFFFFFP-64ULLR
|
||||||
|
#define __UINT_FAST8_TYPE__ unsigned int
|
||||||
|
#define __USFRACT_EPSILON__ 0x1P-8UHR
|
||||||
|
#define __ULACCUM_FBIT__ 32
|
||||||
|
#define __QQ_IBIT__ 0
|
||||||
|
#define __ATOMIC_ACQ_REL 4
|
||||||
|
#define __ATOMIC_RELEASE 3
|
|
@ -0,0 +1 @@
|
||||||
|
-ss2 -si4 -sl4 -sll8 -sf4 -sd8 -sld8 -sp4 -sw2
|
|
@ -0,0 +1,42 @@
|
||||||
|
/* MISRA checks are not performed in header files marked as libraries or
|
||||||
|
vendor-provided files or belonging to other subsystems.*/
|
||||||
|
-elib(*)
|
||||||
|
+libclass(angle,ansi)
|
||||||
|
+libh(core_cm4.h)
|
||||||
|
+libh(stm32f4xx.h)
|
||||||
|
+libh(*LLD.h)
|
||||||
|
|
||||||
|
/* Removing *advisory* directives and rules that would negatively impact
|
||||||
|
code clarity or are very common.*/
|
||||||
|
-e970 /* Dir-4.6 */
|
||||||
|
-e9026 /* Dir-4.9 */
|
||||||
|
-e818 /* Rule 8.13 */
|
||||||
|
-e9078 /* Rule-11.4 */
|
||||||
|
-e9079 /* Rule-11.5 */
|
||||||
|
-e904 /* Rule-15.5 */
|
||||||
|
-e9044 /* Rule-17.8 */
|
||||||
|
-e9024 /* Rule-20.10 */
|
||||||
|
|
||||||
|
/* Waiver Directive 4.10, PCLint is confused by the guard used in the CMSIS
|
||||||
|
header files, the guard is present, suppressing the noise.*/
|
||||||
|
-e451
|
||||||
|
|
||||||
|
/* Waiver Rule 3.1, the sequence "//" is mandated by standard license
|
||||||
|
headers included on top of all source files. The sequence is part of the
|
||||||
|
license URL and cannot be removed.*/
|
||||||
|
-e9059
|
||||||
|
|
||||||
|
/* Waiver Rule 11.6, cast from integer to pointer is very commonly used
|
||||||
|
when accessing peripherals where the numeric address of the registers
|
||||||
|
block is cast to a structure pointer.*/
|
||||||
|
-e923
|
||||||
|
|
||||||
|
/* Waiver Rule 16.3, missing break into case. It is a common occurrence and
|
||||||
|
thoroughly checked.*/
|
||||||
|
-e9090
|
||||||
|
-e616
|
||||||
|
-e825
|
||||||
|
|
||||||
|
/* Waiver Rule 21.1, this is an operating system, its identifiers are
|
||||||
|
equivalent in importance to compiler symbols.*/
|
||||||
|
-e9071
|
|
@ -74,7 +74,7 @@
|
||||||
assembler source files. We verify that the info matches instead.*/
|
assembler source files. We verify that the info matches instead.*/
|
||||||
#include "stm32f3xx.h"
|
#include "stm32f3xx.h"
|
||||||
|
|
||||||
#if !CORTEX_HAS_FPU != !__FPU_PRESENT
|
#if CORTEX_HAS_FPU != __FPU_PRESENT
|
||||||
#error "CMSIS __FPU_PRESENT mismatch"
|
#error "CMSIS __FPU_PRESENT mismatch"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@
|
||||||
assembler source files. We verify that the info matches instead.*/
|
assembler source files. We verify that the info matches instead.*/
|
||||||
#include "stm32f4xx.h"
|
#include "stm32f4xx.h"
|
||||||
|
|
||||||
#if !CORTEX_HAS_FPU != !__FPU_PRESENT
|
#if CORTEX_HAS_FPU != __FPU_PRESENT
|
||||||
#error "CMSIS __FPU_PRESENT mismatch"
|
#error "CMSIS __FPU_PRESENT mismatch"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
#ifndef _CHBSEM_H_
|
#ifndef _CHBSEM_H_
|
||||||
#define _CHBSEM_H_
|
#define _CHBSEM_H_
|
||||||
|
|
||||||
#if CH_CFG_USE_SEMAPHORES || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_SEMAPHORES == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module constants. */
|
/* Module constants. */
|
||||||
|
@ -123,7 +123,7 @@ typedef struct {
|
||||||
*/
|
*/
|
||||||
static inline void chBSemObjectInit(binary_semaphore_t *bsp, bool taken) {
|
static inline void chBSemObjectInit(binary_semaphore_t *bsp, bool taken) {
|
||||||
|
|
||||||
chSemObjectInit(&bsp->bs_sem, taken ? 0 : 1);
|
chSemObjectInit(&bsp->bs_sem, taken ? (cnt_t)0 : (cnt_t)1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -233,7 +233,7 @@ static inline void chBSemResetI(binary_semaphore_t *bsp, bool taken) {
|
||||||
|
|
||||||
chDbgCheckClassI();
|
chDbgCheckClassI();
|
||||||
|
|
||||||
chSemResetI(&bsp->bs_sem, taken ? 0 : 1);
|
chSemResetI(&bsp->bs_sem, taken ? (cnt_t)0 : (cnt_t)1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -252,7 +252,7 @@ static inline void chBSemResetI(binary_semaphore_t *bsp, bool taken) {
|
||||||
*/
|
*/
|
||||||
static inline void chBSemReset(binary_semaphore_t *bsp, bool taken) {
|
static inline void chBSemReset(binary_semaphore_t *bsp, bool taken) {
|
||||||
|
|
||||||
chSemReset(&bsp->bs_sem, taken ? 0 : 1);
|
chSemReset(&bsp->bs_sem, taken ? (cnt_t)0 : (cnt_t)1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -301,10 +301,10 @@ static inline bool chBSemGetStateI(binary_semaphore_t *bsp) {
|
||||||
|
|
||||||
chDbgCheckClassI();
|
chDbgCheckClassI();
|
||||||
|
|
||||||
return bsp->bs_sem.s_cnt > 0 ? false : true;
|
return (bsp->bs_sem.s_cnt > 0) ? false : true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CH_CFG_USE_SEMAPHORES */
|
#endif /* CH_CFG_USE_SEMAPHORES == TRUE */
|
||||||
|
|
||||||
#endif /* _CHBSEM_H_ */
|
#endif /* _CHBSEM_H_ */
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#ifndef _CHCOND_H_
|
#ifndef _CHCOND_H_
|
||||||
#define _CHCOND_H_
|
#define _CHCOND_H_
|
||||||
|
|
||||||
#if CH_CFG_USE_CONDVARS || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_CONDVARS == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module constants. */
|
/* Module constants. */
|
||||||
|
@ -45,7 +45,7 @@
|
||||||
/* Derived constants and error checks. */
|
/* Derived constants and error checks. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#if !CH_CFG_USE_MUTEXES
|
#if CH_CFG_USE_MUTEXES == FALSE
|
||||||
#error "CH_CFG_USE_CONDVARS requires CH_CFG_USE_MUTEXES"
|
#error "CH_CFG_USE_CONDVARS requires CH_CFG_USE_MUTEXES"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ extern "C" {
|
||||||
void chCondBroadcastI(condition_variable_t *cp);
|
void chCondBroadcastI(condition_variable_t *cp);
|
||||||
msg_t chCondWait(condition_variable_t *cp);
|
msg_t chCondWait(condition_variable_t *cp);
|
||||||
msg_t chCondWaitS(condition_variable_t *cp);
|
msg_t chCondWaitS(condition_variable_t *cp);
|
||||||
#if CH_CFG_USE_CONDVARS_TIMEOUT
|
#if CH_CFG_USE_CONDVARS_TIMEOUT == TRUE
|
||||||
msg_t chCondWaitTimeout(condition_variable_t *cp, systime_t time);
|
msg_t chCondWaitTimeout(condition_variable_t *cp, systime_t time);
|
||||||
msg_t chCondWaitTimeoutS(condition_variable_t *cp, systime_t time);
|
msg_t chCondWaitTimeoutS(condition_variable_t *cp, systime_t time);
|
||||||
#endif
|
#endif
|
||||||
|
@ -109,7 +109,7 @@ extern "C" {
|
||||||
/* Module inline functions. */
|
/* Module inline functions. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#endif /* CH_CFG_USE_CONDVARS */
|
#endif /* CH_CFG_USE_CONDVARS == TRUE */
|
||||||
|
|
||||||
#endif /* _CHCOND_H_ */
|
#endif /* _CHCOND_H_ */
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@
|
||||||
/* Module data structures and types. */
|
/* Module data structures and types. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#if CH_DBG_ENABLE_TRACE || defined(__DOXYGEN__)
|
#if (CH_DBG_ENABLE_TRACE == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Trace buffer record.
|
* @brief Trace buffer record.
|
||||||
*/
|
*/
|
||||||
|
@ -120,14 +120,14 @@ typedef struct {
|
||||||
/* Module macros. */
|
/* Module macros. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#if CH_DBG_SYSTEM_STATE_CHECK
|
#if CH_DBG_SYSTEM_STATE_CHECK == TRUE
|
||||||
#define _dbg_enter_lock() (ch.dbg.lock_cnt = 1)
|
#define _dbg_enter_lock() (ch.dbg.lock_cnt = 1)
|
||||||
#define _dbg_leave_lock() (ch.dbg.lock_cnt = 0)
|
#define _dbg_leave_lock() (ch.dbg.lock_cnt = 0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* When the state checker feature is disabled then the following functions
|
/* When the state checker feature is disabled then the following functions
|
||||||
are replaced by an empty macro.*/
|
are replaced by an empty macro.*/
|
||||||
#if !CH_DBG_SYSTEM_STATE_CHECK
|
#if CH_DBG_SYSTEM_STATE_CHECK == FALSE
|
||||||
#define _dbg_enter_lock()
|
#define _dbg_enter_lock()
|
||||||
#define _dbg_leave_lock()
|
#define _dbg_leave_lock()
|
||||||
#define _dbg_check_disable()
|
#define _dbg_check_disable()
|
||||||
|
@ -145,7 +145,7 @@ typedef struct {
|
||||||
|
|
||||||
/* When the trace feature is disabled this function is replaced by an empty
|
/* When the trace feature is disabled this function is replaced by an empty
|
||||||
macro.*/
|
macro.*/
|
||||||
#if !CH_DBG_ENABLE_TRACE
|
#if CH_DBG_ENABLE_TRACE == FALSE
|
||||||
#define _dbg_trace(otp)
|
#define _dbg_trace(otp)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -164,11 +164,15 @@ typedef struct {
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
#if !defined(chDbgCheck)
|
#if !defined(chDbgCheck)
|
||||||
|
#if CH_DBG_ENABLE_CHECKS
|
||||||
#define chDbgCheck(c) do { \
|
#define chDbgCheck(c) do { \
|
||||||
if (CH_DBG_ENABLE_CHECKS && !(c)) { \
|
if (!(c)) { \
|
||||||
chSysHalt(__func__); \
|
chSysHalt(__func__); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (false)
|
||||||
|
#else
|
||||||
|
#define chDbgCheck(c)
|
||||||
|
#endif
|
||||||
#endif /* !defined(chDbgCheck) */
|
#endif /* !defined(chDbgCheck) */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -186,11 +190,15 @@ typedef struct {
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
#if !defined(chDbgAssert)
|
#if !defined(chDbgAssert)
|
||||||
|
#if CH_DBG_ENABLE_ASSERTS == TRUE
|
||||||
#define chDbgAssert(c, r) do { \
|
#define chDbgAssert(c, r) do { \
|
||||||
if (CH_DBG_ENABLE_ASSERTS && !(c)) { \
|
if (!(c)) { \
|
||||||
chSysHalt(__func__); \
|
chSysHalt(__func__); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (false)
|
||||||
|
#else
|
||||||
|
#define chDbgAssert(c, r)
|
||||||
|
#endif
|
||||||
#endif /* !defined(chDbgAssert) */
|
#endif /* !defined(chDbgAssert) */
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -201,7 +209,7 @@ typedef struct {
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
#if CH_DBG_SYSTEM_STATE_CHECK
|
#if CH_DBG_SYSTEM_STATE_CHECK == TRUE
|
||||||
void _dbg_check_disable(void);
|
void _dbg_check_disable(void);
|
||||||
void _dbg_check_suspend(void);
|
void _dbg_check_suspend(void);
|
||||||
void _dbg_check_enable(void);
|
void _dbg_check_enable(void);
|
||||||
|
@ -214,7 +222,7 @@ extern "C" {
|
||||||
void chDbgCheckClassI(void);
|
void chDbgCheckClassI(void);
|
||||||
void chDbgCheckClassS(void);
|
void chDbgCheckClassS(void);
|
||||||
#endif
|
#endif
|
||||||
#if CH_DBG_ENABLE_TRACE || defined(__DOXYGEN__)
|
#if (CH_DBG_ENABLE_TRACE == TRUE) || defined(__DOXYGEN__)
|
||||||
void _dbg_trace_init(void);
|
void _dbg_trace_init(void);
|
||||||
void _dbg_trace(thread_t *otp);
|
void _dbg_trace(thread_t *otp);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#ifndef _CHDYNAMIC_H_
|
#ifndef _CHDYNAMIC_H_
|
||||||
#define _CHDYNAMIC_H_
|
#define _CHDYNAMIC_H_
|
||||||
|
|
||||||
#if CH_CFG_USE_DYNAMIC || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_DYNAMIC == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module constants. */
|
/* Module constants. */
|
||||||
|
@ -45,11 +45,11 @@
|
||||||
/*
|
/*
|
||||||
* Module dependencies check.
|
* Module dependencies check.
|
||||||
*/
|
*/
|
||||||
#if CH_CFG_USE_DYNAMIC && !CH_CFG_USE_WAITEXIT
|
#if CH_CFG_USE_WAITEXIT == FALSE
|
||||||
#error "CH_CFG_USE_DYNAMIC requires CH_CFG_USE_WAITEXIT"
|
#error "CH_CFG_USE_DYNAMIC requires CH_CFG_USE_WAITEXIT"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CH_CFG_USE_DYNAMIC && !CH_CFG_USE_HEAP && !CH_CFG_USE_MEMPOOLS
|
#if (CH_CFG_USE_HEAP == FALSE) && (CH_CFG_USE_MEMPOOLS == FALSE)
|
||||||
#error "CH_CFG_USE_DYNAMIC requires CH_CFG_USE_HEAP and/or CH_CFG_USE_MEMPOOLS"
|
#error "CH_CFG_USE_DYNAMIC requires CH_CFG_USE_HEAP and/or CH_CFG_USE_MEMPOOLS"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -73,11 +73,11 @@ extern "C" {
|
||||||
#endif
|
#endif
|
||||||
thread_t *chThdAddRef(thread_t *tp);
|
thread_t *chThdAddRef(thread_t *tp);
|
||||||
void chThdRelease(thread_t *tp);
|
void chThdRelease(thread_t *tp);
|
||||||
#if CH_CFG_USE_HEAP
|
#if CH_CFG_USE_HEAP == TRUE
|
||||||
thread_t *chThdCreateFromHeap(memory_heap_t *heapp, size_t size,
|
thread_t *chThdCreateFromHeap(memory_heap_t *heapp, size_t size,
|
||||||
tprio_t prio, tfunc_t pf, void *arg);
|
tprio_t prio, tfunc_t pf, void *arg);
|
||||||
#endif
|
#endif
|
||||||
#if CH_CFG_USE_MEMPOOLS
|
#if CH_CFG_USE_MEMPOOLS == TRUE
|
||||||
thread_t *chThdCreateFromMemoryPool(memory_pool_t *mp, tprio_t prio,
|
thread_t *chThdCreateFromMemoryPool(memory_pool_t *mp, tprio_t prio,
|
||||||
tfunc_t pf, void *arg);
|
tfunc_t pf, void *arg);
|
||||||
#endif
|
#endif
|
||||||
|
@ -89,7 +89,7 @@ extern "C" {
|
||||||
/* Module inline functions. */
|
/* Module inline functions. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#endif /* CH_CFG_USE_DYNAMIC */
|
#endif /* CH_CFG_USE_DYNAMIC == TRUE */
|
||||||
|
|
||||||
#endif /* _CHDYNAMIC_H_ */
|
#endif /* _CHDYNAMIC_H_ */
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#ifndef _CHEVENTS_H_
|
#ifndef _CHEVENTS_H_
|
||||||
#define _CHEVENTS_H_
|
#define _CHEVENTS_H_
|
||||||
|
|
||||||
#if CH_CFG_USE_EVENTS || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_EVENTS == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module constants. */
|
/* Module constants. */
|
||||||
|
@ -80,7 +80,7 @@ typedef struct event_source {
|
||||||
/**
|
/**
|
||||||
* @brief Event Handler callback function.
|
* @brief Event Handler callback function.
|
||||||
*/
|
*/
|
||||||
typedef void (*evhandler_t)(eventid_t);
|
typedef void (*evhandler_t)(eventid_t id);
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module macros. */
|
/* Module macros. */
|
||||||
|
@ -94,7 +94,7 @@ typedef void (*evhandler_t)(eventid_t);
|
||||||
/**
|
/**
|
||||||
* @brief Returns an event mask from an event identifier.
|
* @brief Returns an event mask from an event identifier.
|
||||||
*/
|
*/
|
||||||
#define EVENT_MASK(eid) ((eventmask_t)(1 << (eid)))
|
#define EVENT_MASK(eid) ((eventmask_t)1 << (eventmask_t)(eid))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Data part of a static event source initializer.
|
* @brief Data part of a static event source initializer.
|
||||||
|
@ -134,12 +134,12 @@ extern "C" {
|
||||||
void chEvtBroadcastFlags(event_source_t *esp, eventflags_t flags);
|
void chEvtBroadcastFlags(event_source_t *esp, eventflags_t flags);
|
||||||
void chEvtBroadcastFlagsI(event_source_t *esp, eventflags_t flags);
|
void chEvtBroadcastFlagsI(event_source_t *esp, eventflags_t flags);
|
||||||
void chEvtDispatch(const evhandler_t *handlers, eventmask_t events);
|
void chEvtDispatch(const evhandler_t *handlers, eventmask_t events);
|
||||||
#if CH_CFG_OPTIMIZE_SPEED || !CH_CFG_USE_EVENTS_TIMEOUT
|
#if (CH_CFG_OPTIMIZE_SPEED == TRUE) || (CH_CFG_USE_EVENTS_TIMEOUT == FALSE)
|
||||||
eventmask_t chEvtWaitOne(eventmask_t events);
|
eventmask_t chEvtWaitOne(eventmask_t events);
|
||||||
eventmask_t chEvtWaitAny(eventmask_t events);
|
eventmask_t chEvtWaitAny(eventmask_t events);
|
||||||
eventmask_t chEvtWaitAll(eventmask_t events);
|
eventmask_t chEvtWaitAll(eventmask_t events);
|
||||||
#endif
|
#endif
|
||||||
#if CH_CFG_USE_EVENTS_TIMEOUT
|
#if CH_CFG_USE_EVENTS_TIMEOUT == TRUE
|
||||||
eventmask_t chEvtWaitOneTimeout(eventmask_t events, systime_t time);
|
eventmask_t chEvtWaitOneTimeout(eventmask_t events, systime_t time);
|
||||||
eventmask_t chEvtWaitAnyTimeout(eventmask_t events, systime_t time);
|
eventmask_t chEvtWaitAnyTimeout(eventmask_t events, systime_t time);
|
||||||
eventmask_t chEvtWaitAllTimeout(eventmask_t events, systime_t time);
|
eventmask_t chEvtWaitAllTimeout(eventmask_t events, systime_t time);
|
||||||
|
@ -148,7 +148,7 @@ extern "C" {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !CH_CFG_OPTIMIZE_SPEED && CH_CFG_USE_EVENTS_TIMEOUT
|
#if (CH_CFG_OPTIMIZE_SPEED == FALSE) && (CH_CFG_USE_EVENTS_TIMEOUT == TRUE)
|
||||||
#define chEvtWaitOne(mask) chEvtWaitOneTimeout(mask, TIME_INFINITE)
|
#define chEvtWaitOne(mask) chEvtWaitOneTimeout(mask, TIME_INFINITE)
|
||||||
#define chEvtWaitAny(mask) chEvtWaitAnyTimeout(mask, TIME_INFINITE)
|
#define chEvtWaitAny(mask) chEvtWaitAnyTimeout(mask, TIME_INFINITE)
|
||||||
#define chEvtWaitAll(mask) chEvtWaitAllTimeout(mask, TIME_INFINITE)
|
#define chEvtWaitAll(mask) chEvtWaitAllTimeout(mask, TIME_INFINITE)
|
||||||
|
@ -169,7 +169,9 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
static inline void chEvtObjectInit(event_source_t *esp) {
|
static inline void chEvtObjectInit(event_source_t *esp) {
|
||||||
|
|
||||||
esp->es_next = (event_listener_t *)(void *)esp;
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
|
esp->es_next = (event_listener_t *)esp;
|
||||||
|
/*lint -restore*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -223,7 +225,9 @@ static inline void chEvtRegister(event_source_t *esp,
|
||||||
*/
|
*/
|
||||||
static inline bool chEvtIsListeningI(event_source_t *esp) {
|
static inline bool chEvtIsListeningI(event_source_t *esp) {
|
||||||
|
|
||||||
return (bool)((void *)esp != (void *)esp->es_next);
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
|
return (bool)(esp != (event_source_t *)esp->es_next);
|
||||||
|
/*lint -restore*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -256,7 +260,7 @@ static inline void chEvtBroadcastI(event_source_t *esp) {
|
||||||
chEvtBroadcastFlagsI(esp, 0);
|
chEvtBroadcastFlagsI(esp, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CH_CFG_USE_EVENTS */
|
#endif /* CH_CFG_USE_EVENTS == TRUE */
|
||||||
|
|
||||||
#endif /* _CHEVENTS_H_ */
|
#endif /* _CHEVENTS_H_ */
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#ifndef _CHHEAP_H_
|
#ifndef _CHHEAP_H_
|
||||||
#define _CHHEAP_H_
|
#define _CHHEAP_H_
|
||||||
|
|
||||||
#if CH_CFG_USE_HEAP || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_HEAP == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module constants. */
|
/* Module constants. */
|
||||||
|
@ -42,11 +42,11 @@
|
||||||
/* Derived constants and error checks. */
|
/* Derived constants and error checks. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#if !CH_CFG_USE_MEMCORE
|
#if CH_CFG_USE_MEMCORE == FALSE
|
||||||
#error "CH_CFG_USE_HEAP requires CH_CFG_USE_MEMCORE"
|
#error "CH_CFG_USE_HEAP requires CH_CFG_USE_MEMCORE"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !CH_CFG_USE_MUTEXES && !CH_CFG_USE_SEMAPHORES
|
#if (CH_CFG_USE_MUTEXES == FALSE) && (CH_CFG_USE_SEMAPHORES == FALSE)
|
||||||
#error "CH_CFG_USE_HEAP requires CH_CFG_USE_MUTEXES and/or CH_CFG_USE_SEMAPHORES"
|
#error "CH_CFG_USE_HEAP requires CH_CFG_USE_MUTEXES and/or CH_CFG_USE_SEMAPHORES"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ struct memory_heap {
|
||||||
memgetfunc_t h_provider; /**< @brief Memory blocks provider for
|
memgetfunc_t h_provider; /**< @brief Memory blocks provider for
|
||||||
this heap. */
|
this heap. */
|
||||||
union heap_header h_free; /**< @brief Free blocks list header. */
|
union heap_header h_free; /**< @brief Free blocks list header. */
|
||||||
#if CH_CFG_USE_MUTEXES
|
#if CH_CFG_USE_MUTEXES == TRUE
|
||||||
mutex_t h_mtx; /**< @brief Heap access mutex. */
|
mutex_t h_mtx; /**< @brief Heap access mutex. */
|
||||||
#else
|
#else
|
||||||
semaphore_t h_sem; /**< @brief Heap access semaphore. */
|
semaphore_t h_sem; /**< @brief Heap access semaphore. */
|
||||||
|
@ -111,7 +111,7 @@ extern "C" {
|
||||||
/* Module inline functions. */
|
/* Module inline functions. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#endif /* CH_CFG_USE_HEAP */
|
#endif /* CH_CFG_USE_HEAP == TRUE */
|
||||||
|
|
||||||
#endif /* _CHHEAP_H_ */
|
#endif /* _CHHEAP_H_ */
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#ifndef _CHMBOXES_H_
|
#ifndef _CHMBOXES_H_
|
||||||
#define _CHMBOXES_H_
|
#define _CHMBOXES_H_
|
||||||
|
|
||||||
#if CH_CFG_USE_MAILBOXES || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_MAILBOXES == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module constants. */
|
/* Module constants. */
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
/* Derived constants and error checks. */
|
/* Derived constants and error checks. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#if !CH_CFG_USE_SEMAPHORES
|
#if CH_CFG_USE_SEMAPHORES == FALSE
|
||||||
#error "CH_CFG_USE_MAILBOXES requires CH_CFG_USE_SEMAPHORES"
|
#error "CH_CFG_USE_MAILBOXES requires CH_CFG_USE_SEMAPHORES"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -137,7 +137,10 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
static inline size_t chMBGetSizeI(mailbox_t *mbp) {
|
static inline size_t chMBGetSizeI(mailbox_t *mbp) {
|
||||||
|
|
||||||
|
/*lint -save -e946 -e947 -e9033 [18.2, 18.3, 10.8] Perfectly safe pointers
|
||||||
|
arithmetic.*/
|
||||||
return (size_t)(mbp->mb_top - mbp->mb_buffer);
|
return (size_t)(mbp->mb_top - mbp->mb_buffer);
|
||||||
|
/*lint -restore*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -197,7 +200,7 @@ static inline msg_t chMBPeekI(mailbox_t *mbp) {
|
||||||
return *mbp->mb_rdptr;
|
return *mbp->mb_rdptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CH_CFG_USE_MAILBOXES */
|
#endif /* CH_CFG_USE_MAILBOXES == TRUE */
|
||||||
|
|
||||||
#endif /* _CHMBOXES_H_ */
|
#endif /* _CHMBOXES_H_ */
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#ifndef _CHMEMCORE_H_
|
#ifndef _CHMEMCORE_H_
|
||||||
#define _CHMEMCORE_H_
|
#define _CHMEMCORE_H_
|
||||||
|
|
||||||
#if CH_CFG_USE_MEMCORE || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_MEMCORE == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module constants. */
|
/* Module constants. */
|
||||||
|
@ -68,7 +68,7 @@ typedef void *(*memgetfunc_t)(size_t size);
|
||||||
/**
|
/**
|
||||||
* @brief Alignment mask constant.
|
* @brief Alignment mask constant.
|
||||||
*/
|
*/
|
||||||
#define MEM_ALIGN_MASK (MEM_ALIGN_SIZE - 1)
|
#define MEM_ALIGN_MASK (MEM_ALIGN_SIZE - 1U)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Alignment helper macro.
|
* @brief Alignment helper macro.
|
||||||
|
@ -84,7 +84,7 @@ typedef void *(*memgetfunc_t)(size_t size);
|
||||||
* @brief Returns whatever a pointer or memory size is aligned to
|
* @brief Returns whatever a pointer or memory size is aligned to
|
||||||
* the type @p align_t.
|
* the type @p align_t.
|
||||||
*/
|
*/
|
||||||
#define MEM_IS_ALIGNED(p) (((size_t)(p) & MEM_ALIGN_MASK) == 0)
|
#define MEM_IS_ALIGNED(p) (((size_t)(p) & MEM_ALIGN_MASK) == 0U)
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
@ -106,7 +106,7 @@ extern "C" {
|
||||||
/* Module inline functions. */
|
/* Module inline functions. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#endif /* CH_CFG_USE_MEMCORE */
|
#endif /* CH_CFG_USE_MEMCORE == TRUE */
|
||||||
|
|
||||||
#endif /* _CHMEMCORE_H_ */
|
#endif /* _CHMEMCORE_H_ */
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#ifndef _CHMEMPOOLS_H_
|
#ifndef _CHMEMPOOLS_H_
|
||||||
#define _CHMEMPOOLS_H_
|
#define _CHMEMPOOLS_H_
|
||||||
|
|
||||||
#if CH_CFG_USE_MEMPOOLS || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_MEMPOOLS == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module constants. */
|
/* Module constants. */
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
/* Derived constants and error checks. */
|
/* Derived constants and error checks. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#if !CH_CFG_USE_MEMCORE
|
#if CH_CFG_USE_MEMCORE == FALSE
|
||||||
#error "CH_CFG_USE_MEMPOOLS requires CH_CFG_USE_MEMCORE"
|
#error "CH_CFG_USE_MEMPOOLS requires CH_CFG_USE_MEMCORE"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -161,7 +161,7 @@ static inline void chPoolAddI(memory_pool_t *mp, void *objp) {
|
||||||
chPoolFreeI(mp, objp);
|
chPoolFreeI(mp, objp);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CH_CFG_USE_MEMPOOLS */
|
#endif /* CH_CFG_USE_MEMPOOLS == TRUE */
|
||||||
|
|
||||||
#endif /* _CHMEMPOOLS_H_ */
|
#endif /* _CHMEMPOOLS_H_ */
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#ifndef _CHMSG_H_
|
#ifndef _CHMSG_H_
|
||||||
#define _CHMSG_H_
|
#define _CHMSG_H_
|
||||||
|
|
||||||
#if CH_CFG_USE_MESSAGES || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_MESSAGES == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module constants. */
|
/* Module constants. */
|
||||||
|
@ -80,7 +80,9 @@ static inline bool chMsgIsPendingI(thread_t *tp) {
|
||||||
|
|
||||||
chDbgCheckClassI();
|
chDbgCheckClassI();
|
||||||
|
|
||||||
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
return (bool)(tp->p_msgqueue.p_next != (thread_t *)&tp->p_msgqueue);
|
return (bool)(tp->p_msgqueue.p_next != (thread_t *)&tp->p_msgqueue);
|
||||||
|
/*lint -restore*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -115,7 +117,7 @@ static inline void chMsgReleaseS(thread_t *tp, msg_t msg) {
|
||||||
chSchWakeupS(tp, msg);
|
chSchWakeupS(tp, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CH_CFG_USE_MESSAGES */
|
#endif /* CH_CFG_USE_MESSAGES == TRUE */
|
||||||
|
|
||||||
#endif /* _CHMSG_H_ */
|
#endif /* _CHMSG_H_ */
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#ifndef _CHMTX_H_
|
#ifndef _CHMTX_H_
|
||||||
#define _CHMTX_H_
|
#define _CHMTX_H_
|
||||||
|
|
||||||
#if CH_CFG_USE_MUTEXES || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_MUTEXES == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module constants. */
|
/* Module constants. */
|
||||||
|
@ -61,7 +61,7 @@ struct mutex {
|
||||||
@p NULL. */
|
@p NULL. */
|
||||||
mutex_t *m_next; /**< @brief Next @p mutex_t into an
|
mutex_t *m_next; /**< @brief Next @p mutex_t into an
|
||||||
owner-list or @p NULL. */
|
owner-list or @p NULL. */
|
||||||
#if CH_CFG_USE_MUTEXES_RECURSIVE || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_MUTEXES_RECURSIVE == TRUE) || defined(__DOXYGEN__)
|
||||||
cnt_t m_cnt; /**< @brief Mutex recursion counter. */
|
cnt_t m_cnt; /**< @brief Mutex recursion counter. */
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
@ -77,7 +77,7 @@ struct mutex {
|
||||||
*
|
*
|
||||||
* @param[in] name the name of the mutex variable
|
* @param[in] name the name of the mutex variable
|
||||||
*/
|
*/
|
||||||
#if CH_CFG_USE_MUTEXES_RECURSIVE || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_MUTEXES_RECURSIVE == TRUE) || defined(__DOXYGEN__)
|
||||||
#define _MUTEX_DATA(name) {_THREADS_QUEUE_DATA(name.m_queue), NULL, NULL, 0}
|
#define _MUTEX_DATA(name) {_THREADS_QUEUE_DATA(name.m_queue), NULL, NULL, 0}
|
||||||
#else
|
#else
|
||||||
#define _MUTEX_DATA(name) {_THREADS_QUEUE_DATA(name.m_queue), NULL, NULL}
|
#define _MUTEX_DATA(name) {_THREADS_QUEUE_DATA(name.m_queue), NULL, NULL}
|
||||||
|
@ -146,7 +146,7 @@ static inline mutex_t *chMtxGetNextMutexS(void) {
|
||||||
return chThdGetSelfX()->p_mtxlist;
|
return chThdGetSelfX()->p_mtxlist;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CH_CFG_USE_MUTEXES */
|
#endif /* CH_CFG_USE_MUTEXES == TRUE */
|
||||||
|
|
||||||
#endif /* _CHMTX_H_ */
|
#endif /* _CHMTX_H_ */
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#ifndef _CHQUEUES_H_
|
#ifndef _CHQUEUES_H_
|
||||||
#define _CHQUEUES_H_
|
#define _CHQUEUES_H_
|
||||||
|
|
||||||
#if CH_CFG_USE_QUEUES || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_QUEUES == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module constants. */
|
/* Module constants. */
|
||||||
|
@ -198,9 +198,9 @@ typedef io_queue_t output_queue_t;
|
||||||
* @param[in] qp pointer to a @p io_queue_t structure.
|
* @param[in] qp pointer to a @p io_queue_t structure.
|
||||||
* @return The buffer size.
|
* @return The buffer size.
|
||||||
*
|
*
|
||||||
* @iclass
|
* @notapi
|
||||||
*/
|
*/
|
||||||
#define chQSizeI(qp) ((size_t)((qp)->q_top - (qp)->q_buffer))
|
#define QSIZE(qp) ((size_t)((qp)->q_top - (qp)->q_buffer))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Queue space.
|
* @brief Queue space.
|
||||||
|
@ -284,7 +284,10 @@ static inline size_t chIQGetEmptyI(input_queue_t *iqp) {
|
||||||
|
|
||||||
chDbgCheckClassI();
|
chDbgCheckClassI();
|
||||||
|
|
||||||
return (size_t)(chQSizeI(iqp) - chQSpaceI(iqp));
|
/*lint -save -e946 -e947 -e9033 [18.2, 18.3, 10.8] Perfectly safe pointers
|
||||||
|
arithmetic in QSIZE().*/
|
||||||
|
return (size_t)(QSIZE(iqp) - chQSpaceI(iqp));
|
||||||
|
/*lint -restore*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -301,7 +304,7 @@ static inline bool chIQIsEmptyI(input_queue_t *iqp) {
|
||||||
|
|
||||||
chDbgCheckClassI();
|
chDbgCheckClassI();
|
||||||
|
|
||||||
return (bool)(chQSpaceI(iqp) <= 0);
|
return (bool)(chQSpaceI(iqp) <= 0U);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -318,7 +321,7 @@ static inline bool chIQIsFullI(input_queue_t *iqp) {
|
||||||
|
|
||||||
chDbgCheckClassI();
|
chDbgCheckClassI();
|
||||||
|
|
||||||
return (bool)((iqp->q_wrptr == iqp->q_rdptr) && (iqp->q_counter != 0));
|
return (bool)((iqp->q_wrptr == iqp->q_rdptr) && (iqp->q_counter != 0U));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -351,7 +354,10 @@ static inline size_t chOQGetFullI(output_queue_t *oqp) {
|
||||||
|
|
||||||
chDbgCheckClassI();
|
chDbgCheckClassI();
|
||||||
|
|
||||||
return (size_t)(chQSizeI(oqp) - chQSpaceI(oqp));
|
/*lint -save -e946 -e947 -e9033 [18.2, 18.3, 10.8] Perfectly safe pointers
|
||||||
|
arithmetic in QSIZE().*/
|
||||||
|
return (size_t)(QSIZE(oqp) - chQSpaceI(oqp));
|
||||||
|
/*lint -restore*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -384,7 +390,7 @@ static inline bool chOQIsEmptyI(output_queue_t *oqp) {
|
||||||
|
|
||||||
chDbgCheckClassI();
|
chDbgCheckClassI();
|
||||||
|
|
||||||
return (bool)((oqp->q_wrptr == oqp->q_rdptr) && (oqp->q_counter != 0));
|
return (bool)((oqp->q_wrptr == oqp->q_rdptr) && (oqp->q_counter != 0U));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -401,7 +407,7 @@ static inline bool chOQIsFullI(output_queue_t *oqp) {
|
||||||
|
|
||||||
chDbgCheckClassI();
|
chDbgCheckClassI();
|
||||||
|
|
||||||
return (bool)(chQSpaceI(oqp) <= 0);
|
return (bool)(chQSpaceI(oqp) <= 0U);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -423,7 +429,7 @@ static inline msg_t chOQPut(output_queue_t *oqp, uint8_t b) {
|
||||||
return chOQPutTimeout(oqp, b, TIME_INFINITE);
|
return chOQPutTimeout(oqp, b, TIME_INFINITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CH_CFG_USE_QUEUES */
|
#endif /* CH_CFG_USE_QUEUES == TRUE */
|
||||||
|
|
||||||
#endif /* _CHQUEUES_H_ */
|
#endif /* _CHQUEUES_H_ */
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#ifndef _CHREGISTRY_H_
|
#ifndef _CHREGISTRY_H_
|
||||||
#define _CHREGISTRY_H_
|
#define _CHREGISTRY_H_
|
||||||
|
|
||||||
#if CH_CFG_USE_REGISTRY || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_REGISTRY == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module constants. */
|
/* Module constants. */
|
||||||
|
@ -95,7 +95,7 @@ typedef struct {
|
||||||
#define chRegSetThreadName(p)
|
#define chRegSetThreadName(p)
|
||||||
#endif /* !CH_CFG_USE_REGISTRY */
|
#endif /* !CH_CFG_USE_REGISTRY */
|
||||||
|
|
||||||
#if CH_CFG_USE_REGISTRY || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_REGISTRY == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Removes a thread from the registry list.
|
* @brief Removes a thread from the registry list.
|
||||||
* @note This macro is not meant for use in application code.
|
* @note This macro is not meant for use in application code.
|
||||||
|
@ -153,7 +153,7 @@ static inline const char *chRegGetThreadNameI(thread_t *tp) {
|
||||||
|
|
||||||
chDbgCheckClassI();
|
chDbgCheckClassI();
|
||||||
|
|
||||||
#if CH_CFG_USE_REGISTRY
|
#if CH_CFG_USE_REGISTRY == TRUE
|
||||||
return tp->p_name;
|
return tp->p_name;
|
||||||
#else
|
#else
|
||||||
(void)tp;
|
(void)tp;
|
||||||
|
@ -161,7 +161,7 @@ static inline const char *chRegGetThreadNameI(thread_t *tp) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CH_CFG_USE_REGISTRY */
|
#endif /* CH_CFG_USE_REGISTRY == TRUE */
|
||||||
|
|
||||||
#endif /* _CHREGISTRY_H_ */
|
#endif /* _CHREGISTRY_H_ */
|
||||||
|
|
||||||
|
|
|
@ -47,37 +47,37 @@
|
||||||
* @name Priority constants
|
* @name Priority constants
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
#define NOPRIO 0 /**< @brief Ready list header priority. */
|
#define NOPRIO 0U /**< @brief Ready list header priority. */
|
||||||
#define IDLEPRIO 1 /**< @brief Idle thread priority. */
|
#define IDLEPRIO 1U /**< @brief Idle thread priority. */
|
||||||
#define LOWPRIO 2 /**< @brief Lowest user priority. */
|
#define LOWPRIO 2U /**< @brief Lowest user priority. */
|
||||||
#define NORMALPRIO 64 /**< @brief Normal user priority. */
|
#define NORMALPRIO 64U /**< @brief Normal user priority. */
|
||||||
#define HIGHPRIO 127 /**< @brief Highest user priority. */
|
#define HIGHPRIO 127U /**< @brief Highest user priority. */
|
||||||
#define ABSPRIO 255 /**< @brief Greatest possible priority. */
|
#define ABSPRIO 255U /**< @brief Greatest possible priority. */
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @name Thread states
|
* @name Thread states
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
#define CH_STATE_READY 0 /**< @brief Waiting on the ready list. */
|
#define CH_STATE_READY 0U /**< @brief Waiting on the ready list. */
|
||||||
#define CH_STATE_CURRENT 1 /**< @brief Currently running. */
|
#define CH_STATE_CURRENT 1U /**< @brief Currently running. */
|
||||||
#define CH_STATE_WTSTART 2 /**< @brief Created but not started. */
|
#define CH_STATE_WTSTART 2U /**< @brief Created but not started. */
|
||||||
#define CH_STATE_SUSPENDED 3 /**< @brief Suspended state. */
|
#define CH_STATE_SUSPENDED 3U /**< @brief Suspended state. */
|
||||||
#define CH_STATE_QUEUED 4 /**< @brief Waiting on an I/O queue. */
|
#define CH_STATE_QUEUED 4U /**< @brief Waiting on an I/O queue. */
|
||||||
#define CH_STATE_WTSEM 5 /**< @brief Waiting on a semaphore. */
|
#define CH_STATE_WTSEM 5U /**< @brief Waiting on a semaphore. */
|
||||||
#define CH_STATE_WTMTX 6 /**< @brief Waiting on a mutex. */
|
#define CH_STATE_WTMTX 6U /**< @brief Waiting on a mutex. */
|
||||||
#define CH_STATE_WTCOND 7 /**< @brief Waiting on a condition
|
#define CH_STATE_WTCOND 7U /**< @brief Waiting on a condition
|
||||||
variable. */
|
variable. */
|
||||||
#define CH_STATE_SLEEPING 8 /**< @brief Waiting in @p chThdSleep()
|
#define CH_STATE_SLEEPING 8U /**< @brief Waiting in @p chThdSleep()
|
||||||
or @p chThdSleepUntil(). */
|
or @p chThdSleepUntil(). */
|
||||||
#define CH_STATE_WTEXIT 9 /**< @brief Waiting in @p chThdWait(). */
|
#define CH_STATE_WTEXIT 9U /**< @brief Waiting in @p chThdWait(). */
|
||||||
#define CH_STATE_WTOREVT 10 /**< @brief Waiting for an event. */
|
#define CH_STATE_WTOREVT 10U /**< @brief Waiting for an event. */
|
||||||
#define CH_STATE_WTANDEVT 11 /**< @brief Waiting for several events. */
|
#define CH_STATE_WTANDEVT 11U /**< @brief Waiting for several events. */
|
||||||
#define CH_STATE_SNDMSGQ 12 /**< @brief Sending a message, in queue.*/
|
#define CH_STATE_SNDMSGQ 12U /**< @brief Sending a message, in queue.*/
|
||||||
#define CH_STATE_SNDMSG 13 /**< @brief Sent a message, waiting
|
#define CH_STATE_SNDMSG 13U /**< @brief Sent a message, waiting
|
||||||
answer. */
|
answer. */
|
||||||
#define CH_STATE_WTMSG 14 /**< @brief Waiting for a message. */
|
#define CH_STATE_WTMSG 14U /**< @brief Waiting for a message. */
|
||||||
#define CH_STATE_FINAL 15 /**< @brief Thread terminated. */
|
#define CH_STATE_FINAL 15U /**< @brief Thread terminated. */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Thread states as array of strings.
|
* @brief Thread states as array of strings.
|
||||||
|
@ -94,13 +94,13 @@
|
||||||
* @name Thread flags and attributes
|
* @name Thread flags and attributes
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
#define CH_FLAG_MODE_MASK 3 /**< @brief Thread memory mode mask. */
|
#define CH_FLAG_MODE_MASK 3U /**< @brief Thread memory mode mask. */
|
||||||
#define CH_FLAG_MODE_STATIC 0 /**< @brief Static thread. */
|
#define CH_FLAG_MODE_STATIC 0U /**< @brief Static thread. */
|
||||||
#define CH_FLAG_MODE_HEAP 1 /**< @brief Thread allocated from a
|
#define CH_FLAG_MODE_HEAP 1U /**< @brief Thread allocated from a
|
||||||
Memory Heap. */
|
Memory Heap. */
|
||||||
#define CH_FLAG_MODE_MEMPOOL 2 /**< @brief Thread allocated from a
|
#define CH_FLAG_MODE_MEMPOOL 2U /**< @brief Thread allocated from a
|
||||||
Memory Pool. */
|
Memory Pool. */
|
||||||
#define CH_FLAG_TERMINATE 4 /**< @brief Termination requested flag. */
|
#define CH_FLAG_TERMINATE 4U /**< @brief Termination requested flag. */
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -194,18 +194,18 @@ struct ch_thread {
|
||||||
/* End of the fields shared with the threads_queue_t structure.*/
|
/* End of the fields shared with the threads_queue_t structure.*/
|
||||||
tprio_t p_prio; /**< @brief Thread priority. */
|
tprio_t p_prio; /**< @brief Thread priority. */
|
||||||
struct context p_ctx; /**< @brief Processor context. */
|
struct context p_ctx; /**< @brief Processor context. */
|
||||||
#if CH_CFG_USE_REGISTRY || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_REGISTRY == TRUE) || defined(__DOXYGEN__)
|
||||||
thread_t *p_newer; /**< @brief Newer registry element. */
|
thread_t *p_newer; /**< @brief Newer registry element. */
|
||||||
thread_t *p_older; /**< @brief Older registry element. */
|
thread_t *p_older; /**< @brief Older registry element. */
|
||||||
#endif
|
#endif
|
||||||
/* End of the fields shared with the ReadyList structure. */
|
/* End of the fields shared with the ReadyList structure. */
|
||||||
#if CH_CFG_USE_REGISTRY || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_REGISTRY == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Thread name or @p NULL.
|
* @brief Thread name or @p NULL.
|
||||||
*/
|
*/
|
||||||
const char *p_name;
|
const char *p_name;
|
||||||
#endif
|
#endif
|
||||||
#if CH_DBG_ENABLE_STACK_CHECK || defined(__DOXYGEN__)
|
#if (CH_DBG_ENABLE_STACK_CHECK == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Thread stack boundary.
|
* @brief Thread stack boundary.
|
||||||
*/
|
*/
|
||||||
|
@ -219,7 +219,7 @@ struct ch_thread {
|
||||||
* @brief Various thread flags.
|
* @brief Various thread flags.
|
||||||
*/
|
*/
|
||||||
tmode_t p_flags;
|
tmode_t p_flags;
|
||||||
#if CH_CFG_USE_DYNAMIC || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_DYNAMIC == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief References to this thread.
|
* @brief References to this thread.
|
||||||
*/
|
*/
|
||||||
|
@ -231,7 +231,7 @@ struct ch_thread {
|
||||||
#if (CH_CFG_TIME_QUANTUM > 0) || defined(__DOXYGEN__)
|
#if (CH_CFG_TIME_QUANTUM > 0) || defined(__DOXYGEN__)
|
||||||
tslices_t p_preempt;
|
tslices_t p_preempt;
|
||||||
#endif
|
#endif
|
||||||
#if CH_DBG_THREADS_PROFILING || defined(__DOXYGEN__)
|
#if (CH_DBG_THREADS_PROFILING == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Thread consumed time in ticks.
|
* @brief Thread consumed time in ticks.
|
||||||
* @note This field can overflow.
|
* @note This field can overflow.
|
||||||
|
@ -265,7 +265,7 @@ struct ch_thread {
|
||||||
* states.
|
* states.
|
||||||
*/
|
*/
|
||||||
void *wtobjp;
|
void *wtobjp;
|
||||||
#if CH_CFG_USE_EVENTS || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_EVENTS == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Enabled events mask.
|
* @brief Enabled events mask.
|
||||||
* @note This field is only valid while the thread is in the
|
* @note This field is only valid while the thread is in the
|
||||||
|
@ -274,13 +274,13 @@ struct ch_thread {
|
||||||
eventmask_t ewmask;
|
eventmask_t ewmask;
|
||||||
#endif
|
#endif
|
||||||
} p_u;
|
} p_u;
|
||||||
#if CH_CFG_USE_WAITEXIT || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_WAITEXIT == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Termination waiting list.
|
* @brief Termination waiting list.
|
||||||
*/
|
*/
|
||||||
threads_list_t p_waiting;
|
threads_list_t p_waiting;
|
||||||
#endif
|
#endif
|
||||||
#if CH_CFG_USE_MESSAGES || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_MESSAGES == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Messages queue.
|
* @brief Messages queue.
|
||||||
*/
|
*/
|
||||||
|
@ -290,13 +290,13 @@ struct ch_thread {
|
||||||
*/
|
*/
|
||||||
msg_t p_msg;
|
msg_t p_msg;
|
||||||
#endif
|
#endif
|
||||||
#if CH_CFG_USE_EVENTS || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_EVENTS == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Pending events mask.
|
* @brief Pending events mask.
|
||||||
*/
|
*/
|
||||||
eventmask_t p_epending;
|
eventmask_t p_epending;
|
||||||
#endif
|
#endif
|
||||||
#if CH_CFG_USE_MUTEXES || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_MUTEXES == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief List of the mutexes owned by this thread.
|
* @brief List of the mutexes owned by this thread.
|
||||||
* @note The list is terminated by a @p NULL in this field.
|
* @note The list is terminated by a @p NULL in this field.
|
||||||
|
@ -307,13 +307,14 @@ struct ch_thread {
|
||||||
*/
|
*/
|
||||||
tprio_t p_realprio;
|
tprio_t p_realprio;
|
||||||
#endif
|
#endif
|
||||||
#if (CH_CFG_USE_DYNAMIC && CH_CFG_USE_MEMPOOLS) || defined(__DOXYGEN__)
|
#if ((CH_CFG_USE_DYNAMIC == TRUE) && (CH_CFG_USE_MEMPOOLS == TRUE)) || \
|
||||||
|
defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Memory Pool where the thread workspace is returned.
|
* @brief Memory Pool where the thread workspace is returned.
|
||||||
*/
|
*/
|
||||||
void *p_mpool;
|
void *p_mpool;
|
||||||
#endif
|
#endif
|
||||||
#if CH_DBG_STATISTICS || defined(__DOXYGEN__)
|
#if (CH_DBG_STATISTICS == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Thread statistics.
|
* @brief Thread statistics.
|
||||||
*/
|
*/
|
||||||
|
@ -352,10 +353,10 @@ struct ch_virtual_timers_list {
|
||||||
virtual_timer_t *vt_prev; /**< @brief Last timer in the delta
|
virtual_timer_t *vt_prev; /**< @brief Last timer in the delta
|
||||||
list. */
|
list. */
|
||||||
systime_t vt_delta; /**< @brief Must be initialized to -1. */
|
systime_t vt_delta; /**< @brief Must be initialized to -1. */
|
||||||
#if CH_CFG_ST_TIMEDELTA == 0 || defined(__DOXYGEN__)
|
#if (CH_CFG_ST_TIMEDELTA == 0) || defined(__DOXYGEN__)
|
||||||
volatile systime_t vt_systime; /**< @brief System Time counter. */
|
volatile systime_t vt_systime; /**< @brief System Time counter. */
|
||||||
#endif
|
#endif
|
||||||
#if CH_CFG_ST_TIMEDELTA > 0 || defined(__DOXYGEN__)
|
#if (CH_CFG_ST_TIMEDELTA > 0) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief System time of the last tick event.
|
* @brief System time of the last tick event.
|
||||||
*/
|
*/
|
||||||
|
@ -373,7 +374,7 @@ struct ch_ready_list {
|
||||||
initialized to zero. */
|
initialized to zero. */
|
||||||
struct context r_ctx; /**< @brief Not used, present because
|
struct context r_ctx; /**< @brief Not used, present because
|
||||||
offsets. */
|
offsets. */
|
||||||
#if CH_CFG_USE_REGISTRY || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_REGISTRY == TRUE) || defined(__DOXYGEN__)
|
||||||
thread_t *r_newer; /**< @brief Newer registry element. */
|
thread_t *r_newer; /**< @brief Newer registry element. */
|
||||||
thread_t *r_older; /**< @brief Older registry element. */
|
thread_t *r_older; /**< @brief Older registry element. */
|
||||||
#endif
|
#endif
|
||||||
|
@ -394,7 +395,7 @@ struct ch_system_debug {
|
||||||
* field itself is declared volatile.
|
* field itself is declared volatile.
|
||||||
*/
|
*/
|
||||||
const char * volatile panic_msg;
|
const char * volatile panic_msg;
|
||||||
#if CH_DBG_SYSTEM_STATE_CHECK || defined(__DOXYGEN__)
|
#if (CH_DBG_SYSTEM_STATE_CHECK == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief ISR nesting level.
|
* @brief ISR nesting level.
|
||||||
*/
|
*/
|
||||||
|
@ -404,7 +405,7 @@ struct ch_system_debug {
|
||||||
*/
|
*/
|
||||||
cnt_t lock_cnt;
|
cnt_t lock_cnt;
|
||||||
#endif
|
#endif
|
||||||
#if CH_DBG_ENABLE_TRACE || defined(__DOXYGEN__)
|
#if (CH_DBG_ENABLE_TRACE == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Public trace buffer.
|
* @brief Public trace buffer.
|
||||||
*/
|
*/
|
||||||
|
@ -434,19 +435,19 @@ struct ch_system {
|
||||||
* @brief Main thread descriptor.
|
* @brief Main thread descriptor.
|
||||||
*/
|
*/
|
||||||
thread_t mainthread;
|
thread_t mainthread;
|
||||||
#if CH_CFG_USE_TM || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_TM == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Time measurement calibration data.
|
* @brief Time measurement calibration data.
|
||||||
*/
|
*/
|
||||||
tm_calibration_t tm;
|
tm_calibration_t tm;
|
||||||
#endif
|
#endif
|
||||||
#if CH_DBG_STATISTICS || defined(__DOXYGEN__)
|
#if (CH_DBG_STATISTICS == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Global kernel statistics.
|
* @brief Global kernel statistics.
|
||||||
*/
|
*/
|
||||||
kernel_stats_t kernel_stats;
|
kernel_stats_t kernel_stats;
|
||||||
#endif
|
#endif
|
||||||
#if !CH_CFG_NO_IDLE_THREAD
|
#if CH_CFG_NO_IDLE_THREAD == FALSE
|
||||||
/**
|
/**
|
||||||
* @brief Idle thread working area.
|
* @brief Idle thread working area.
|
||||||
*/
|
*/
|
||||||
|
@ -501,13 +502,13 @@ extern "C" {
|
||||||
thread_t *chSchReadyI(thread_t *tp);
|
thread_t *chSchReadyI(thread_t *tp);
|
||||||
void chSchGoSleepS(tstate_t newstate);
|
void chSchGoSleepS(tstate_t newstate);
|
||||||
msg_t chSchGoSleepTimeoutS(tstate_t newstate, systime_t time);
|
msg_t chSchGoSleepTimeoutS(tstate_t newstate, systime_t time);
|
||||||
void chSchWakeupS(thread_t *tp, msg_t msg);
|
void chSchWakeupS(thread_t *ntp, msg_t msg);
|
||||||
void chSchRescheduleS(void);
|
void chSchRescheduleS(void);
|
||||||
bool chSchIsPreemptionRequired(void);
|
bool chSchIsPreemptionRequired(void);
|
||||||
void chSchDoRescheduleBehind(void);
|
void chSchDoRescheduleBehind(void);
|
||||||
void chSchDoRescheduleAhead(void);
|
void chSchDoRescheduleAhead(void);
|
||||||
void chSchDoReschedule(void);
|
void chSchDoReschedule(void);
|
||||||
#if !CH_CFG_OPTIMIZE_SPEED
|
#if CH_CFG_OPTIMIZE_SPEED == FALSE
|
||||||
void queue_prio_insert(thread_t *tp, threads_queue_t *tqp);
|
void queue_prio_insert(thread_t *tp, threads_queue_t *tqp);
|
||||||
void queue_insert(thread_t *tp, threads_queue_t *tqp);
|
void queue_insert(thread_t *tp, threads_queue_t *tqp);
|
||||||
thread_t *queue_fifo_remove(threads_queue_t *tqp);
|
thread_t *queue_fifo_remove(threads_queue_t *tqp);
|
||||||
|
@ -515,7 +516,7 @@ extern "C" {
|
||||||
thread_t *queue_dequeue(thread_t *tp);
|
thread_t *queue_dequeue(thread_t *tp);
|
||||||
void list_insert(thread_t *tp, threads_list_t *tlp);
|
void list_insert(thread_t *tp, threads_list_t *tlp);
|
||||||
thread_t *list_remove(threads_list_t *tlp);
|
thread_t *list_remove(threads_list_t *tlp);
|
||||||
#endif /* CH_CFG_OPTIMIZE_SPEED */
|
#endif /* CH_CFG_OPTIMIZE_SPEED == FALSE */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -533,7 +534,9 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
static inline void list_init(threads_list_t *tlp) {
|
static inline void list_init(threads_list_t *tlp) {
|
||||||
|
|
||||||
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
tlp->p_next = (thread_t *)tlp;
|
tlp->p_next = (thread_t *)tlp;
|
||||||
|
/*lint -restore*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -546,7 +549,9 @@ static inline void list_init(threads_list_t *tlp) {
|
||||||
*/
|
*/
|
||||||
static inline bool list_isempty(threads_list_t *tlp) {
|
static inline bool list_isempty(threads_list_t *tlp) {
|
||||||
|
|
||||||
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
return (bool)(tlp->p_next == (thread_t *)tlp);
|
return (bool)(tlp->p_next == (thread_t *)tlp);
|
||||||
|
/*lint -restore*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -559,7 +564,9 @@ static inline bool list_isempty(threads_list_t *tlp) {
|
||||||
*/
|
*/
|
||||||
static inline bool list_notempty(threads_list_t *tlp) {
|
static inline bool list_notempty(threads_list_t *tlp) {
|
||||||
|
|
||||||
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
return (bool)(tlp->p_next != (thread_t *)tlp);
|
return (bool)(tlp->p_next != (thread_t *)tlp);
|
||||||
|
/*lint -restore*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -571,7 +578,10 @@ static inline bool list_notempty(threads_list_t *tlp) {
|
||||||
*/
|
*/
|
||||||
static inline void queue_init(threads_queue_t *tqp) {
|
static inline void queue_init(threads_queue_t *tqp) {
|
||||||
|
|
||||||
tqp->p_next = tqp->p_prev = (thread_t *)tqp;
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
|
tqp->p_next = (thread_t *)tqp;
|
||||||
|
tqp->p_prev = (thread_t *)tqp;
|
||||||
|
/*lint -restore*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -584,7 +594,9 @@ static inline void queue_init(threads_queue_t *tqp) {
|
||||||
*/
|
*/
|
||||||
static inline bool queue_isempty(threads_queue_t *tqp) {
|
static inline bool queue_isempty(threads_queue_t *tqp) {
|
||||||
|
|
||||||
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
return (bool)(tqp->p_next == (thread_t *)tqp);
|
return (bool)(tqp->p_next == (thread_t *)tqp);
|
||||||
|
/*lint -restore*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -597,12 +609,14 @@ static inline bool queue_isempty(threads_queue_t *tqp) {
|
||||||
*/
|
*/
|
||||||
static inline bool queue_notempty(threads_queue_t *tqp) {
|
static inline bool queue_notempty(threads_queue_t *tqp) {
|
||||||
|
|
||||||
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
return (bool)(tqp->p_next != (thread_t *)tqp);
|
return (bool)(tqp->p_next != (thread_t *)tqp);
|
||||||
|
/*lint -restore*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the performance code path has been chosen then all the following
|
/* If the performance code path has been chosen then all the following
|
||||||
functions are inlined into the various kernel modules.*/
|
functions are inlined into the various kernel modules.*/
|
||||||
#if CH_CFG_OPTIMIZE_SPEED
|
#if CH_CFG_OPTIMIZE_SPEED == TRUE
|
||||||
static inline void list_insert(thread_t *tp, threads_list_t *tlp) {
|
static inline void list_insert(thread_t *tp, threads_list_t *tlp) {
|
||||||
|
|
||||||
tp->p_next = tlp->p_next;
|
tp->p_next = tlp->p_next;
|
||||||
|
@ -619,26 +633,35 @@ static inline thread_t *list_remove(threads_list_t *tlp) {
|
||||||
|
|
||||||
static inline void queue_prio_insert(thread_t *tp, threads_queue_t *tqp) {
|
static inline void queue_prio_insert(thread_t *tp, threads_queue_t *tqp) {
|
||||||
|
|
||||||
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
thread_t *cp = (thread_t *)tqp;
|
thread_t *cp = (thread_t *)tqp;
|
||||||
do {
|
do {
|
||||||
cp = cp->p_next;
|
cp = cp->p_next;
|
||||||
} while ((cp != (thread_t *)tqp) && (cp->p_prio >= tp->p_prio));
|
} while ((cp != (thread_t *)tqp) && (cp->p_prio >= tp->p_prio));
|
||||||
|
/*lint -restore*/
|
||||||
tp->p_next = cp;
|
tp->p_next = cp;
|
||||||
tp->p_prev = cp->p_prev;
|
tp->p_prev = cp->p_prev;
|
||||||
tp->p_prev->p_next = cp->p_prev = tp;
|
tp->p_prev->p_next = tp;
|
||||||
|
cp->p_prev = tp;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void queue_insert(thread_t *tp, threads_queue_t *tqp) {
|
static inline void queue_insert(thread_t *tp, threads_queue_t *tqp) {
|
||||||
|
|
||||||
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
tp->p_next = (thread_t *)tqp;
|
tp->p_next = (thread_t *)tqp;
|
||||||
|
/*lint -restore*/
|
||||||
tp->p_prev = tqp->p_prev;
|
tp->p_prev = tqp->p_prev;
|
||||||
tp->p_prev->p_next = tqp->p_prev = tp;
|
tp->p_prev->p_next = tp;
|
||||||
|
tqp->p_prev = tp;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline thread_t *queue_fifo_remove(threads_queue_t *tqp) {
|
static inline thread_t *queue_fifo_remove(threads_queue_t *tqp) {
|
||||||
thread_t *tp = tqp->p_next;
|
thread_t *tp = tqp->p_next;
|
||||||
|
|
||||||
(tqp->p_next = tp->p_next)->p_prev = (thread_t *)tqp;
|
tqp->p_next = tp->p_next;
|
||||||
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
|
tqp->p_next->p_prev = (thread_t *)tqp;
|
||||||
|
/*lint -restore*/
|
||||||
|
|
||||||
return tp;
|
return tp;
|
||||||
}
|
}
|
||||||
|
@ -646,7 +669,10 @@ static inline thread_t *queue_fifo_remove(threads_queue_t *tqp) {
|
||||||
static inline thread_t *queue_lifo_remove(threads_queue_t *tqp) {
|
static inline thread_t *queue_lifo_remove(threads_queue_t *tqp) {
|
||||||
thread_t *tp = tqp->p_prev;
|
thread_t *tp = tqp->p_prev;
|
||||||
|
|
||||||
(tqp->p_prev = tp->p_prev)->p_next = (thread_t *)tqp;
|
tqp->p_prev = tp->p_prev;
|
||||||
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
|
tqp->p_prev->p_next = (thread_t *)tqp;
|
||||||
|
/*lint -restore*/
|
||||||
|
|
||||||
return tp;
|
return tp;
|
||||||
}
|
}
|
||||||
|
@ -658,7 +684,7 @@ static inline thread_t *queue_dequeue(thread_t *tp) {
|
||||||
|
|
||||||
return tp;
|
return tp;
|
||||||
}
|
}
|
||||||
#endif /* CH_CFG_OPTIMIZE_SPEED */
|
#endif /* CH_CFG_OPTIMIZE_SPEED == TRUE */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Determines if the current thread must reschedule.
|
* @brief Determines if the current thread must reschedule.
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#ifndef _CHSEM_H_
|
#ifndef _CHSEM_H_
|
||||||
#define _CHSEM_H_
|
#define _CHSEM_H_
|
||||||
|
|
||||||
#if CH_CFG_USE_SEMAPHORES || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_SEMAPHORES == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module constants. */
|
/* Module constants. */
|
||||||
|
@ -153,7 +153,7 @@ static inline cnt_t chSemGetCounterI(semaphore_t *sp) {
|
||||||
return sp->s_cnt;
|
return sp->s_cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CH_CFG_USE_SEMAPHORES */
|
#endif /* CH_CFG_USE_SEMAPHORES == TRUE */
|
||||||
|
|
||||||
#endif /* _CHSEM_H_ */
|
#endif /* _CHSEM_H_ */
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#ifndef _CHSTATS_H_
|
#ifndef _CHSTATS_H_
|
||||||
#define _CHSTATS_H_
|
#define _CHSTATS_H_
|
||||||
|
|
||||||
#if CH_DBG_STATISTICS || defined(__DOXYGEN__)
|
#if (CH_DBG_STATISTICS == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module constants. */
|
/* Module constants. */
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
/* Module pre-compile time settings. */
|
/* Module pre-compile time settings. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#if !CH_CFG_USE_TM
|
#if CH_CFG_USE_TM == FALSE
|
||||||
#error "CH_DBG_STATISTICS requires CH_CFG_USE_TM"
|
#error "CH_DBG_STATISTICS requires CH_CFG_USE_TM"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ extern "C" {
|
||||||
/* Module inline functions. */
|
/* Module inline functions. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#else /* !CH_DBG_STATISTICS */
|
#else /* CH_DBG_STATISTICS == FALSE */
|
||||||
|
|
||||||
/* Stub functions for when the statistics module is disabled. */
|
/* Stub functions for when the statistics module is disabled. */
|
||||||
#define _stats_increase_irq()
|
#define _stats_increase_irq()
|
||||||
|
@ -98,7 +98,7 @@ extern "C" {
|
||||||
#define _stats_start_measure_crit_isr()
|
#define _stats_start_measure_crit_isr()
|
||||||
#define _stats_stop_measure_crit_isr()
|
#define _stats_stop_measure_crit_isr()
|
||||||
|
|
||||||
#endif /* !CH_DBG_STATISTICS */
|
#endif /* CH_DBG_STATISTICS == FALSE */
|
||||||
|
|
||||||
#endif /* _CHSTATS_H_ */
|
#endif /* _CHSTATS_H_ */
|
||||||
|
|
||||||
|
|
|
@ -197,7 +197,7 @@
|
||||||
*
|
*
|
||||||
* @xclass
|
* @xclass
|
||||||
*/
|
*/
|
||||||
#if PORT_SUPPORTS_RT || defined(__DOXYGEN__)
|
#if (PORT_SUPPORTS_RT == TRUE) || defined(__DOXYGEN__)
|
||||||
#define chSysGetRealtimeCounterX() (rtcnt_t)port_rt_get_counter_value()
|
#define chSysGetRealtimeCounterX() (rtcnt_t)port_rt_get_counter_value()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -388,7 +388,7 @@ static inline void chSysUnconditionalUnlock(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !CH_CFG_NO_IDLE_THREAD || defined(__DOXYGEN__)
|
#if (CH_CFG_NO_IDLE_THREAD == FALSE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Returns a pointer to the idle thread.
|
* @brief Returns a pointer to the idle thread.
|
||||||
* @pre In order to use this function the option @p CH_CFG_NO_IDLE_THREAD
|
* @pre In order to use this function the option @p CH_CFG_NO_IDLE_THREAD
|
||||||
|
@ -405,7 +405,7 @@ static inline thread_t *chSysGetIdleThreadX(void) {
|
||||||
|
|
||||||
return ch.rlist.r_queue.p_prev;
|
return ch.rlist.r_queue.p_prev;
|
||||||
}
|
}
|
||||||
#endif /* !CH_CFG_NO_IDLE_THREAD */
|
#endif /* CH_CFG_NO_IDLE_THREAD == FALSE */
|
||||||
|
|
||||||
#endif /* _CHSYS_H_ */
|
#endif /* _CHSYS_H_ */
|
||||||
|
|
||||||
|
|
|
@ -84,7 +84,7 @@ typedef struct ch_ready_list ready_list_t;
|
||||||
/**
|
/**
|
||||||
* @brief Type of a Virtual Timer callback function.
|
* @brief Type of a Virtual Timer callback function.
|
||||||
*/
|
*/
|
||||||
typedef void (*vtfunc_t)(void *);
|
typedef void (*vtfunc_t)(void *p);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Type of a Virtual Timer structure.
|
* @brief Type of a Virtual Timer structure.
|
||||||
|
|
|
@ -52,7 +52,7 @@ typedef thread_t * thread_reference_t;
|
||||||
/**
|
/**
|
||||||
* @brief Thread function.
|
* @brief Thread function.
|
||||||
*/
|
*/
|
||||||
typedef msg_t (*tfunc_t)(void *);
|
typedef msg_t (*tfunc_t)(void *p);
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module macros. */
|
/* Module macros. */
|
||||||
|
@ -132,7 +132,7 @@ typedef msg_t (*tfunc_t)(void *);
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
thread_t *_thread_init(thread_t *tp, tprio_t prio);
|
thread_t *_thread_init(thread_t *tp, tprio_t prio);
|
||||||
#if CH_DBG_FILL_THREADS
|
#if CH_DBG_FILL_THREADS == TRUE
|
||||||
void _thread_memfill(uint8_t *startp, uint8_t *endp, uint8_t v);
|
void _thread_memfill(uint8_t *startp, uint8_t *endp, uint8_t v);
|
||||||
#endif
|
#endif
|
||||||
thread_t *chThdCreateI(void *wsp, size_t size,
|
thread_t *chThdCreateI(void *wsp, size_t size,
|
||||||
|
@ -156,7 +156,7 @@ extern "C" {
|
||||||
void chThdYield(void);
|
void chThdYield(void);
|
||||||
void chThdExit(msg_t msg);
|
void chThdExit(msg_t msg);
|
||||||
void chThdExitS(msg_t msg);
|
void chThdExitS(msg_t msg);
|
||||||
#if CH_CFG_USE_WAITEXIT
|
#if CH_CFG_USE_WAITEXIT == TRUE
|
||||||
msg_t chThdWait(thread_t *tp);
|
msg_t chThdWait(thread_t *tp);
|
||||||
#endif
|
#endif
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -202,7 +202,7 @@ static inline tprio_t chThdGetPriorityX(void) {
|
||||||
*
|
*
|
||||||
* @xclass
|
* @xclass
|
||||||
*/
|
*/
|
||||||
#if CH_DBG_THREADS_PROFILING || defined(__DOXYGEN__)
|
#if (CH_DBG_THREADS_PROFILING == TRUE) || defined(__DOXYGEN__)
|
||||||
static inline systime_t chThdGetTicksX(thread_t *tp) {
|
static inline systime_t chThdGetTicksX(thread_t *tp) {
|
||||||
|
|
||||||
return tp->p_time;
|
return tp->p_time;
|
||||||
|
@ -233,7 +233,7 @@ static inline bool chThdTerminatedX(thread_t *tp) {
|
||||||
*/
|
*/
|
||||||
static inline bool chThdShouldTerminateX(void) {
|
static inline bool chThdShouldTerminateX(void) {
|
||||||
|
|
||||||
return (bool)((chThdGetSelfX()->p_flags & CH_FLAG_TERMINATE) != 0);
|
return (bool)((chThdGetSelfX()->p_flags & CH_FLAG_TERMINATE) != 0U);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -268,7 +268,7 @@ static inline void chThdSleepS(systime_t time) {
|
||||||
|
|
||||||
chDbgCheck(time != TIME_IMMEDIATE);
|
chDbgCheck(time != TIME_IMMEDIATE);
|
||||||
|
|
||||||
chSchGoSleepTimeoutS(CH_STATE_SLEEPING, time);
|
(void) chSchGoSleepTimeoutS(CH_STATE_SLEEPING, time);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -322,7 +322,7 @@ static inline void chThdDoDequeueNextI(threads_queue_t *tqp, msg_t msg) {
|
||||||
chDbgAssert(tp->p_state == CH_STATE_QUEUED, "invalid state");
|
chDbgAssert(tp->p_state == CH_STATE_QUEUED, "invalid state");
|
||||||
|
|
||||||
tp->p_u.rdymsg = msg;
|
tp->p_u.rdymsg = msg;
|
||||||
chSchReadyI(tp);
|
(void) chSchReadyI(tp);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* _CHTHREADS_H_ */
|
#endif /* _CHTHREADS_H_ */
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#ifndef _CHTM_H_
|
#ifndef _CHTM_H_
|
||||||
#define _CHTM_H_
|
#define _CHTM_H_
|
||||||
|
|
||||||
#if CH_CFG_USE_TM || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_TM == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module constants. */
|
/* Module constants. */
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
/* Derived constants and error checks. */
|
/* Derived constants and error checks. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#if !PORT_SUPPORTS_RT
|
#if PORT_SUPPORTS_RT == FALSE
|
||||||
#error "CH_CFG_USE_TM requires PORT_SUPPORTS_RT"
|
#error "CH_CFG_USE_TM requires PORT_SUPPORTS_RT"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ extern "C" {
|
||||||
/* Module inline functions. */
|
/* Module inline functions. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#endif /* CH_CFG_USE_TM */
|
#endif /* CH_CFG_USE_TM == TRUE */
|
||||||
|
|
||||||
#endif /* _CHTM_H_ */
|
#endif /* _CHTM_H_ */
|
||||||
|
|
||||||
|
|
|
@ -78,7 +78,7 @@
|
||||||
#error "CH_CFG_TIME_QUANTUM not supported in tickless mode"
|
#error "CH_CFG_TIME_QUANTUM not supported in tickless mode"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (CH_CFG_ST_TIMEDELTA > 0) && CH_DBG_THREADS_PROFILING
|
#if (CH_CFG_ST_TIMEDELTA > 0) && (CH_DBG_THREADS_PROFILING == TRUE)
|
||||||
#error "CH_DBG_THREADS_PROFILING not supported in tickless mode"
|
#error "CH_DBG_THREADS_PROFILING not supported in tickless mode"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -283,7 +283,7 @@ static inline bool chVTIsTimeWithinX(systime_t time,
|
||||||
systime_t start,
|
systime_t start,
|
||||||
systime_t end) {
|
systime_t end) {
|
||||||
|
|
||||||
return (bool)(time - start < end - start);
|
return (bool)((time - start) < (end - start));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -476,7 +476,8 @@ static inline void chVTDoTickI(void) {
|
||||||
|
|
||||||
/* The next element is outside the current time window, the loop
|
/* The next element is outside the current time window, the loop
|
||||||
is stopped here.*/
|
is stopped here.*/
|
||||||
if ((vtp = ch.vtlist.vt_next)->vt_delta > delta) {
|
vtp = ch.vtlist.vt_next;
|
||||||
|
if (vtp->vt_delta > delta) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -485,17 +486,21 @@ static inline void chVTDoTickI(void) {
|
||||||
ch.vtlist.vt_lasttime += vtp->vt_delta;
|
ch.vtlist.vt_lasttime += vtp->vt_delta;
|
||||||
|
|
||||||
/* The timer is removed from the list and marked as non-armed.*/
|
/* The timer is removed from the list and marked as non-armed.*/
|
||||||
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
vtp->vt_next->vt_prev = (virtual_timer_t *)&ch.vtlist;
|
vtp->vt_next->vt_prev = (virtual_timer_t *)&ch.vtlist;
|
||||||
|
/*lint -restore*/
|
||||||
ch.vtlist.vt_next = vtp->vt_next;
|
ch.vtlist.vt_next = vtp->vt_next;
|
||||||
fn = vtp->vt_func;
|
fn = vtp->vt_func;
|
||||||
vtp->vt_func = (vtfunc_t)NULL;
|
vtp->vt_func = NULL;
|
||||||
|
|
||||||
/* The callback is invoked outside the kernel critical zone.*/
|
/* The callback is invoked outside the kernel critical zone.*/
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
fn(vtp->vt_par);
|
fn(vtp->vt_par);
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
}
|
}
|
||||||
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
if (&ch.vtlist == (virtual_timers_list_t *)ch.vtlist.vt_next) {
|
if (&ch.vtlist == (virtual_timers_list_t *)ch.vtlist.vt_next) {
|
||||||
|
/*lint -restore*/
|
||||||
/* The list is empty, no tick event needed so the alarm timer
|
/* The list is empty, no tick event needed so the alarm timer
|
||||||
is stopped.*/
|
is stopped.*/
|
||||||
port_timer_stop_alarm();
|
port_timer_stop_alarm();
|
||||||
|
@ -503,11 +508,11 @@ static inline void chVTDoTickI(void) {
|
||||||
else {
|
else {
|
||||||
/* Updating the alarm to the next deadline, deadline that must not be
|
/* Updating the alarm to the next deadline, deadline that must not be
|
||||||
closer in time than the minimum time delta.*/
|
closer in time than the minimum time delta.*/
|
||||||
if (vtp->vt_delta >= CH_CFG_ST_TIMEDELTA) {
|
if (vtp->vt_delta >= (systime_t)CH_CFG_ST_TIMEDELTA) {
|
||||||
port_timer_set_alarm(now + vtp->vt_delta);
|
port_timer_set_alarm(now + vtp->vt_delta);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
port_timer_set_alarm(now + CH_CFG_ST_TIMEDELTA);
|
port_timer_set_alarm(now + (systime_t)CH_CFG_ST_TIMEDELTA);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* CH_CFG_ST_TIMEDELTA > 0 */
|
#endif /* CH_CFG_ST_TIMEDELTA > 0 */
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
* @brief Generic 'true' boolean constant.
|
* @brief Generic 'true' boolean constant.
|
||||||
*/
|
*/
|
||||||
#if !defined(TRUE) || defined(__DOXYGEN__)
|
#if !defined(TRUE) || defined(__DOXYGEN__)
|
||||||
#define TRUE (!FALSE)
|
#define TRUE 1
|
||||||
#endif
|
#endif
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
|
@ -179,7 +179,7 @@ struct context {
|
||||||
/**
|
/**
|
||||||
* @brief Total priority levels.
|
* @brief Total priority levels.
|
||||||
*/
|
*/
|
||||||
#define CORTEX_PRIORITY_LEVELS (1 << CORTEX_PRIORITY_BITS)
|
#define CORTEX_PRIORITY_LEVELS (1U << CORTEX_PRIORITY_BITS)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Minimum priority level.
|
* @brief Minimum priority level.
|
||||||
|
@ -192,7 +192,7 @@ struct context {
|
||||||
* @brief Maximum priority level.
|
* @brief Maximum priority level.
|
||||||
* @details The maximum allowed priority level is always zero.
|
* @details The maximum allowed priority level is always zero.
|
||||||
*/
|
*/
|
||||||
#define CORTEX_MAXIMUM_PRIORITY 0
|
#define CORTEX_MAXIMUM_PRIORITY 0U
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Priority level verification macro.
|
* @brief Priority level verification macro.
|
||||||
|
@ -210,7 +210,7 @@ struct context {
|
||||||
* @brief Priority level to priority mask conversion macro.
|
* @brief Priority level to priority mask conversion macro.
|
||||||
*/
|
*/
|
||||||
#define CORTEX_PRIO_MASK(n) \
|
#define CORTEX_PRIO_MASK(n) \
|
||||||
((n) << (8 - CORTEX_PRIORITY_BITS))
|
((n) << (8U - (unsigned)CORTEX_PRIORITY_BITS))
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* External declarations. */
|
/* External declarations. */
|
||||||
|
@ -231,11 +231,11 @@ struct context {
|
||||||
#if !defined(_FROM_ASM_)
|
#if !defined(_FROM_ASM_)
|
||||||
|
|
||||||
#if CH_CFG_ST_TIMEDELTA > 0
|
#if CH_CFG_ST_TIMEDELTA > 0
|
||||||
#if !PORT_USE_ALT_TIMER
|
#if PORT_USE_ALT_TIMER == FALSE
|
||||||
#include "chcore_timer.h"
|
#include "chcore_timer.h"
|
||||||
#else /* PORT_USE_ALT_TIMER */
|
#else /* PORT_USE_ALT_TIMER != FALSE */
|
||||||
#include "chcore_timer_alt.h"
|
#include "chcore_timer_alt.h"
|
||||||
#endif /* PORT_USE_ALT_TIMER */
|
#endif /* PORT_USE_ALT_TIMER != FALSE */
|
||||||
#endif /* CH_CFG_ST_TIMEDELTA > 0 */
|
#endif /* CH_CFG_ST_TIMEDELTA > 0 */
|
||||||
|
|
||||||
#endif /* !defined(_FROM_ASM_) */
|
#endif /* !defined(_FROM_ASM_) */
|
||||||
|
|
|
@ -32,42 +32,6 @@
|
||||||
/* Module constants. */
|
/* Module constants. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
/**
|
|
||||||
* @name Architecture and Compiler
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#if (CORTEX_MODEL == CORTEX_M0) || defined(__DOXYGEN__)
|
|
||||||
/**
|
|
||||||
* @brief Macro defining the specific ARM architecture.
|
|
||||||
*/
|
|
||||||
#define PORT_ARCHITECTURE_ARM_v6M
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Name of the implemented architecture.
|
|
||||||
*/
|
|
||||||
#define PORT_ARCHITECTURE_NAME "ARMv6-M"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Name of the architecture variant.
|
|
||||||
*/
|
|
||||||
#define PORT_CORE_VARIANT_NAME "Cortex-M0"
|
|
||||||
|
|
||||||
#elif (CORTEX_MODEL == CORTEX_M0PLUS)
|
|
||||||
#define PORT_ARCHITECTURE_ARM_v6M
|
|
||||||
#define PORT_ARCHITECTURE_NAME "ARMv6-M"
|
|
||||||
#define PORT_CORE_VARIANT_NAME "Cortex-M0+"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Port-specific information string.
|
|
||||||
*/
|
|
||||||
#if !CORTEX_ALTERNATE_SWITCH || defined(__DOXYGEN__)
|
|
||||||
#define PORT_INFO "Preemption through NMI"
|
|
||||||
#else
|
|
||||||
#define PORT_INFO "Preemption through PendSV"
|
|
||||||
#endif
|
|
||||||
/** @} */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This port does not support a realtime counter.
|
* @brief This port does not support a realtime counter.
|
||||||
*/
|
*/
|
||||||
|
@ -131,6 +95,42 @@
|
||||||
/* Derived constants and error checks. */
|
/* Derived constants and error checks. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name Architecture and Compiler
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#if (CORTEX_MODEL == CORTEX_M0) || defined(__DOXYGEN__)
|
||||||
|
/**
|
||||||
|
* @brief Macro defining the specific ARM architecture.
|
||||||
|
*/
|
||||||
|
#define PORT_ARCHITECTURE_ARM_v6M
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Name of the implemented architecture.
|
||||||
|
*/
|
||||||
|
#define PORT_ARCHITECTURE_NAME "ARMv6-M"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Name of the architecture variant.
|
||||||
|
*/
|
||||||
|
#define PORT_CORE_VARIANT_NAME "Cortex-M0"
|
||||||
|
|
||||||
|
#elif (CORTEX_MODEL == CORTEX_M0PLUS)
|
||||||
|
#define PORT_ARCHITECTURE_ARM_v6M
|
||||||
|
#define PORT_ARCHITECTURE_NAME "ARMv6-M"
|
||||||
|
#define PORT_CORE_VARIANT_NAME "Cortex-M0+"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Port-specific information string.
|
||||||
|
*/
|
||||||
|
#if !CORTEX_ALTERNATE_SWITCH || defined(__DOXYGEN__)
|
||||||
|
#define PORT_INFO "Preemption through NMI"
|
||||||
|
#else
|
||||||
|
#define PORT_INFO "Preemption through PendSV"
|
||||||
|
#endif
|
||||||
|
/** @} */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Maximum usable priority for normal ISRs.
|
* @brief Maximum usable priority for normal ISRs.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -32,46 +32,6 @@
|
||||||
/* Module constants. */
|
/* Module constants. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
/**
|
|
||||||
* @name Architecture and Compiler
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#if (CORTEX_MODEL == CORTEX_M3) || defined(__DOXYGEN__)
|
|
||||||
/**
|
|
||||||
* @brief Macro defining the specific ARM architecture.
|
|
||||||
*/
|
|
||||||
#define PORT_ARCHITECTURE_ARM_v7M
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Name of the implemented architecture.
|
|
||||||
*/
|
|
||||||
#define PORT_ARCHITECTURE_NAME "ARMv7-M"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Name of the architecture variant.
|
|
||||||
*/
|
|
||||||
#define PORT_CORE_VARIANT_NAME "Cortex-M3"
|
|
||||||
|
|
||||||
#elif (CORTEX_MODEL == CORTEX_M4)
|
|
||||||
#define PORT_ARCHITECTURE_ARM_v7ME
|
|
||||||
#define PORT_ARCHITECTURE_NAME "ARMv7-ME"
|
|
||||||
#if CORTEX_USE_FPU
|
|
||||||
#define PORT_CORE_VARIANT_NAME "Cortex-M4F"
|
|
||||||
#else
|
|
||||||
#define PORT_CORE_VARIANT_NAME "Cortex-M4"
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Port-specific information string.
|
|
||||||
*/
|
|
||||||
#if !CORTEX_SIMPLIFIED_PRIORITY || defined(__DOXYGEN__)
|
|
||||||
#define PORT_INFO "Advanced kernel mode"
|
|
||||||
#else
|
|
||||||
#define PORT_INFO "Compact kernel mode"
|
|
||||||
#endif
|
|
||||||
/** @} */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This port supports a realtime counter.
|
* @brief This port supports a realtime counter.
|
||||||
*/
|
*/
|
||||||
|
@ -80,7 +40,7 @@
|
||||||
/**
|
/**
|
||||||
* @brief Disabled value for BASEPRI register.
|
* @brief Disabled value for BASEPRI register.
|
||||||
*/
|
*/
|
||||||
#define CORTEX_BASEPRI_DISABLED 0
|
#define CORTEX_BASEPRI_DISABLED 0U
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module pre-compile time settings. */
|
/* Module pre-compile time settings. */
|
||||||
|
@ -149,7 +109,7 @@
|
||||||
* priority level.
|
* priority level.
|
||||||
*/
|
*/
|
||||||
#if !defined(CORTEX_PRIORITY_SVCALL)
|
#if !defined(CORTEX_PRIORITY_SVCALL)
|
||||||
#define CORTEX_PRIORITY_SVCALL (CORTEX_MAXIMUM_PRIORITY + 1)
|
#define CORTEX_PRIORITY_SVCALL (CORTEX_MAXIMUM_PRIORITY + 1U)
|
||||||
#elif !CORTEX_IS_VALID_PRIORITY(CORTEX_PRIORITY_SVCALL)
|
#elif !CORTEX_IS_VALID_PRIORITY(CORTEX_PRIORITY_SVCALL)
|
||||||
/* If it is externally redefined then better perform a validity check on it.*/
|
/* If it is externally redefined then better perform a validity check on it.*/
|
||||||
#error "invalid priority level specified for CORTEX_PRIORITY_SVCALL"
|
#error "invalid priority level specified for CORTEX_PRIORITY_SVCALL"
|
||||||
|
@ -159,7 +119,7 @@
|
||||||
* @brief NVIC VTOR initialization expression.
|
* @brief NVIC VTOR initialization expression.
|
||||||
*/
|
*/
|
||||||
#if !defined(CORTEX_VTOR_INIT) || defined(__DOXYGEN__)
|
#if !defined(CORTEX_VTOR_INIT) || defined(__DOXYGEN__)
|
||||||
#define CORTEX_VTOR_INIT 0x00000000
|
#define CORTEX_VTOR_INIT 0x00000000U
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -175,11 +135,51 @@
|
||||||
/* Derived constants and error checks. */
|
/* Derived constants and error checks. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#if !CORTEX_SIMPLIFIED_PRIORITY || defined(__DOXYGEN__)
|
/**
|
||||||
|
* @name Architecture and Compiler
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#if (CORTEX_MODEL == CORTEX_M3) || defined(__DOXYGEN__)
|
||||||
|
/**
|
||||||
|
* @brief Macro defining the specific ARM architecture.
|
||||||
|
*/
|
||||||
|
#define PORT_ARCHITECTURE_ARM_v7M
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Name of the implemented architecture.
|
||||||
|
*/
|
||||||
|
#define PORT_ARCHITECTURE_NAME "ARMv7-M"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Name of the architecture variant.
|
||||||
|
*/
|
||||||
|
#define PORT_CORE_VARIANT_NAME "Cortex-M3"
|
||||||
|
|
||||||
|
#elif (CORTEX_MODEL == CORTEX_M4)
|
||||||
|
#define PORT_ARCHITECTURE_ARM_v7ME
|
||||||
|
#define PORT_ARCHITECTURE_NAME "ARMv7-ME"
|
||||||
|
#if CORTEX_USE_FPU
|
||||||
|
#define PORT_CORE_VARIANT_NAME "Cortex-M4F"
|
||||||
|
#else
|
||||||
|
#define PORT_CORE_VARIANT_NAME "Cortex-M4"
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Port-specific information string.
|
||||||
|
*/
|
||||||
|
#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) || defined(__DOXYGEN__)
|
||||||
|
#define PORT_INFO "Advanced kernel mode"
|
||||||
|
#else
|
||||||
|
#define PORT_INFO "Compact kernel mode"
|
||||||
|
#endif
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Maximum usable priority for normal ISRs.
|
* @brief Maximum usable priority for normal ISRs.
|
||||||
*/
|
*/
|
||||||
#define CORTEX_MAX_KERNEL_PRIORITY (CORTEX_PRIORITY_SVCALL + 1)
|
#define CORTEX_MAX_KERNEL_PRIORITY (CORTEX_PRIORITY_SVCALL + 1U)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief BASEPRI level within kernel lock.
|
* @brief BASEPRI level within kernel lock.
|
||||||
|
@ -188,7 +188,7 @@
|
||||||
CORTEX_PRIO_MASK(CORTEX_MAX_KERNEL_PRIORITY)
|
CORTEX_PRIO_MASK(CORTEX_MAX_KERNEL_PRIORITY)
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define CORTEX_MAX_KERNEL_PRIORITY 0
|
#define CORTEX_MAX_KERNEL_PRIORITY 0U
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -336,7 +336,7 @@ struct port_intctx {
|
||||||
* @param[in] ntp the thread to be switched in
|
* @param[in] ntp the thread to be switched in
|
||||||
* @param[in] otp the thread to be switched out
|
* @param[in] otp the thread to be switched out
|
||||||
*/
|
*/
|
||||||
#if !CH_DBG_ENABLE_STACK_CHECK || defined(__DOXYGEN__)
|
#if (CH_DBG_ENABLE_STACK_CHECK == FALSE) || defined(__DOXYGEN__)
|
||||||
#define port_switch(ntp, otp) _port_switch(ntp, otp)
|
#define port_switch(ntp, otp) _port_switch(ntp, otp)
|
||||||
#else
|
#else
|
||||||
#define port_switch(ntp, otp) { \
|
#define port_switch(ntp, otp) { \
|
||||||
|
@ -383,7 +383,7 @@ static inline void port_init(void) {
|
||||||
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
|
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
|
||||||
|
|
||||||
/* Initialization of the system vectors used by the port.*/
|
/* Initialization of the system vectors used by the port.*/
|
||||||
#if !CORTEX_SIMPLIFIED_PRIORITY
|
#if CORTEX_SIMPLIFIED_PRIORITY == FALSE
|
||||||
NVIC_SetPriority(SVCall_IRQn, CORTEX_PRIORITY_SVCALL);
|
NVIC_SetPriority(SVCall_IRQn, CORTEX_PRIORITY_SVCALL);
|
||||||
#endif
|
#endif
|
||||||
NVIC_SetPriority(PendSV_IRQn, CORTEX_PRIORITY_PENDSV);
|
NVIC_SetPriority(PendSV_IRQn, CORTEX_PRIORITY_PENDSV);
|
||||||
|
@ -397,7 +397,7 @@ static inline void port_init(void) {
|
||||||
static inline syssts_t port_get_irq_status(void) {
|
static inline syssts_t port_get_irq_status(void) {
|
||||||
uint32_t sts;
|
uint32_t sts;
|
||||||
|
|
||||||
#if !CORTEX_SIMPLIFIED_PRIORITY
|
#if CORTEX_SIMPLIFIED_PRIORITY == FALSE
|
||||||
sts = __get_BASEPRI();
|
sts = __get_BASEPRI();
|
||||||
#else /* CORTEX_SIMPLIFIED_PRIORITY */
|
#else /* CORTEX_SIMPLIFIED_PRIORITY */
|
||||||
sts = __get_PRIMASK();
|
sts = __get_PRIMASK();
|
||||||
|
@ -416,7 +416,7 @@ static inline syssts_t port_get_irq_status(void) {
|
||||||
*/
|
*/
|
||||||
static inline bool port_irq_enabled(syssts_t sts) {
|
static inline bool port_irq_enabled(syssts_t sts) {
|
||||||
|
|
||||||
#if !CORTEX_SIMPLIFIED_PRIORITY
|
#if CORTEX_SIMPLIFIED_PRIORITY == FALSE
|
||||||
return sts == CORTEX_BASEPRI_DISABLED;
|
return sts == CORTEX_BASEPRI_DISABLED;
|
||||||
#else /* CORTEX_SIMPLIFIED_PRIORITY */
|
#else /* CORTEX_SIMPLIFIED_PRIORITY */
|
||||||
return (sts & 1) == 0;
|
return (sts & 1) == 0;
|
||||||
|
@ -432,7 +432,7 @@ static inline bool port_irq_enabled(syssts_t sts) {
|
||||||
*/
|
*/
|
||||||
static inline bool port_is_isr_context(void) {
|
static inline bool port_is_isr_context(void) {
|
||||||
|
|
||||||
return (bool)((__get_IPSR() & 0x1FF) != 0);
|
return (bool)((__get_IPSR() & 0x1FFU) != 0U);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -442,7 +442,7 @@ static inline bool port_is_isr_context(void) {
|
||||||
*/
|
*/
|
||||||
static inline void port_lock(void) {
|
static inline void port_lock(void) {
|
||||||
|
|
||||||
#if !CORTEX_SIMPLIFIED_PRIORITY
|
#if CORTEX_SIMPLIFIED_PRIORITY == FALSE
|
||||||
__set_BASEPRI(CORTEX_BASEPRI_KERNEL);
|
__set_BASEPRI(CORTEX_BASEPRI_KERNEL);
|
||||||
#else /* CORTEX_SIMPLIFIED_PRIORITY */
|
#else /* CORTEX_SIMPLIFIED_PRIORITY */
|
||||||
__disable_irq();
|
__disable_irq();
|
||||||
|
@ -456,7 +456,7 @@ static inline void port_lock(void) {
|
||||||
*/
|
*/
|
||||||
static inline void port_unlock(void) {
|
static inline void port_unlock(void) {
|
||||||
|
|
||||||
#if !CORTEX_SIMPLIFIED_PRIORITY
|
#if CORTEX_SIMPLIFIED_PRIORITY == FALSE
|
||||||
__set_BASEPRI(CORTEX_BASEPRI_DISABLED);
|
__set_BASEPRI(CORTEX_BASEPRI_DISABLED);
|
||||||
#else /* CORTEX_SIMPLIFIED_PRIORITY */
|
#else /* CORTEX_SIMPLIFIED_PRIORITY */
|
||||||
__enable_irq();
|
__enable_irq();
|
||||||
|
@ -502,7 +502,7 @@ static inline void port_disable(void) {
|
||||||
*/
|
*/
|
||||||
static inline void port_suspend(void) {
|
static inline void port_suspend(void) {
|
||||||
|
|
||||||
#if !CORTEX_SIMPLIFIED_PRIORITY || defined(__DOXYGEN__)
|
#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) || defined(__DOXYGEN__)
|
||||||
__set_BASEPRI(CORTEX_BASEPRI_KERNEL);
|
__set_BASEPRI(CORTEX_BASEPRI_KERNEL);
|
||||||
__enable_irq();
|
__enable_irq();
|
||||||
#else
|
#else
|
||||||
|
@ -516,7 +516,7 @@ static inline void port_suspend(void) {
|
||||||
*/
|
*/
|
||||||
static inline void port_enable(void) {
|
static inline void port_enable(void) {
|
||||||
|
|
||||||
#if !CORTEX_SIMPLIFIED_PRIORITY || defined(__DOXYGEN__)
|
#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) || defined(__DOXYGEN__)
|
||||||
__set_BASEPRI(CORTEX_BASEPRI_DISABLED);
|
__set_BASEPRI(CORTEX_BASEPRI_DISABLED);
|
||||||
#endif
|
#endif
|
||||||
__enable_irq();
|
__enable_irq();
|
||||||
|
@ -532,7 +532,7 @@ static inline void port_enable(void) {
|
||||||
*/
|
*/
|
||||||
static inline void port_wait_for_interrupt(void) {
|
static inline void port_wait_for_interrupt(void) {
|
||||||
|
|
||||||
#if CORTEX_ENABLE_WFI_IDLE
|
#if CORTEX_ENABLE_WFI_IDLE == TRUE
|
||||||
__WFI();
|
__WFI();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,13 +40,14 @@
|
||||||
*/
|
*/
|
||||||
#if !defined(FALSE) || defined(__DOXYGEN__)
|
#if !defined(FALSE) || defined(__DOXYGEN__)
|
||||||
#define FALSE 0
|
#define FALSE 0
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Generic 'true' boolean constant.
|
* @brief Generic 'true' boolean constant.
|
||||||
*/
|
*/
|
||||||
#if !defined(TRUE) || defined(__DOXYGEN__)
|
#if !defined(TRUE) || defined(__DOXYGEN__)
|
||||||
#define TRUE (!FALSE)
|
#define TRUE 1
|
||||||
#endif
|
#endif
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
* @brief Generic 'true' boolean constant.
|
* @brief Generic 'true' boolean constant.
|
||||||
*/
|
*/
|
||||||
#if !defined(TRUE) || defined(__DOXYGEN__)
|
#if !defined(TRUE) || defined(__DOXYGEN__)
|
||||||
#define TRUE (!FALSE)
|
#define TRUE 1
|
||||||
#endif
|
#endif
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
* @brief Generic 'true' boolean constant.
|
* @brief Generic 'true' boolean constant.
|
||||||
*/
|
*/
|
||||||
#if !defined(TRUE) || defined(__DOXYGEN__)
|
#if !defined(TRUE) || defined(__DOXYGEN__)
|
||||||
#define TRUE (!FALSE)
|
#define TRUE 1
|
||||||
#endif
|
#endif
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
|
@ -105,7 +105,7 @@
|
||||||
/* Module exported functions. */
|
/* Module exported functions. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#if CH_DBG_SYSTEM_STATE_CHECK || defined(__DOXYGEN__)
|
#if (CH_DBG_SYSTEM_STATE_CHECK == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Guard code for @p chSysDisable().
|
* @brief Guard code for @p chSysDisable().
|
||||||
*
|
*
|
||||||
|
@ -254,9 +254,9 @@ void chDbgCheckClassS(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CH_DBG_SYSTEM_STATE_CHECK */
|
#endif /* CH_DBG_SYSTEM_STATE_CHECK == TRUE */
|
||||||
|
|
||||||
#if CH_DBG_ENABLE_TRACE || defined(__DOXYGEN__)
|
#if (CH_DBG_ENABLE_TRACE == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Trace circular buffer subsystem initialization.
|
* @brief Trace circular buffer subsystem initialization.
|
||||||
* @note Internal use only.
|
* @note Internal use only.
|
||||||
|
|
|
@ -68,9 +68,10 @@
|
||||||
thread_t *chThdAddRef(thread_t *tp) {
|
thread_t *chThdAddRef(thread_t *tp) {
|
||||||
|
|
||||||
chSysLock();
|
chSysLock();
|
||||||
chDbgAssert(tp->p_refs < 255, "too many references");
|
chDbgAssert(tp->p_refs < 255U, "too many references");
|
||||||
tp->p_refs++;
|
tp->p_refs++;
|
||||||
chSysUnlock();
|
chSysUnlock();
|
||||||
|
|
||||||
return tp;
|
return tp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,7 +99,7 @@ void chThdRelease(thread_t *tp) {
|
||||||
/* If the references counter reaches zero and the thread is in its
|
/* If the references counter reaches zero and the thread is in its
|
||||||
terminated state then the memory can be returned to the proper
|
terminated state then the memory can be returned to the proper
|
||||||
allocator. Of course static threads are not affected.*/
|
allocator. Of course static threads are not affected.*/
|
||||||
if ((refs == 0) && (tp->p_state == CH_STATE_FINAL)) {
|
if ((refs == 0U) && (tp->p_state == CH_STATE_FINAL)) {
|
||||||
switch (tp->p_flags & CH_FLAG_MODE_MASK) {
|
switch (tp->p_flags & CH_FLAG_MODE_MASK) {
|
||||||
#if CH_CFG_USE_HEAP
|
#if CH_CFG_USE_HEAP
|
||||||
case CH_FLAG_MODE_HEAP:
|
case CH_FLAG_MODE_HEAP:
|
||||||
|
|
|
@ -295,7 +295,7 @@ void chOQResetI(output_queue_t *oqp) {
|
||||||
chDbgCheckClassI();
|
chDbgCheckClassI();
|
||||||
|
|
||||||
oqp->q_rdptr = oqp->q_wrptr = oqp->q_buffer;
|
oqp->q_rdptr = oqp->q_wrptr = oqp->q_buffer;
|
||||||
oqp->q_counter = chQSizeI(oqp);
|
oqp->q_counter = QSIZE(oqp);
|
||||||
chThdDequeueAllI(&oqp->q_waiting, Q_RESET);
|
chThdDequeueAllI(&oqp->q_waiting, Q_RESET);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -75,12 +75,12 @@
|
||||||
* OS signature in ROM plus debug-related information.
|
* OS signature in ROM plus debug-related information.
|
||||||
*/
|
*/
|
||||||
ROMCONST chdebug_t ch_debug = {
|
ROMCONST chdebug_t ch_debug = {
|
||||||
"main",
|
{'m', 'a', 'i', 'n'},
|
||||||
(uint8_t)0,
|
(uint8_t)0,
|
||||||
(uint8_t)sizeof (chdebug_t),
|
(uint8_t)sizeof (chdebug_t),
|
||||||
(uint16_t)((CH_KERNEL_MAJOR << 11) |
|
(uint16_t)((CH_KERNEL_MAJOR << 11) |
|
||||||
(CH_KERNEL_MINOR << 6) |
|
(CH_KERNEL_MINOR << 6) |
|
||||||
(CH_KERNEL_PATCH) << 0),
|
(CH_KERNEL_PATCH << 0)),
|
||||||
(uint8_t)sizeof (void *),
|
(uint8_t)sizeof (void *),
|
||||||
(uint8_t)sizeof (systime_t),
|
(uint8_t)sizeof (systime_t),
|
||||||
(uint8_t)sizeof (thread_t),
|
(uint8_t)sizeof (thread_t),
|
||||||
|
|
|
@ -66,12 +66,15 @@ void _scheduler_init(void) {
|
||||||
|
|
||||||
queue_init(&ch.rlist.r_queue);
|
queue_init(&ch.rlist.r_queue);
|
||||||
ch.rlist.r_prio = NOPRIO;
|
ch.rlist.r_prio = NOPRIO;
|
||||||
#if CH_CFG_USE_REGISTRY
|
#if CH_CFG_USE_REGISTRY == TRUE
|
||||||
ch.rlist.r_newer = ch.rlist.r_older = (thread_t *)&ch.rlist;
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
|
ch.rlist.r_newer = (thread_t *)&ch.rlist;
|
||||||
|
ch.rlist.r_older = (thread_t *)&ch.rlist;
|
||||||
|
/*lint -restore*/
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !CH_CFG_OPTIMIZE_SPEED || defined(__DOXYGEN__)
|
#if (CH_CFG_OPTIMIZE_SPEED == FALSE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Inserts a thread into a priority ordered queue.
|
* @brief Inserts a thread into a priority ordered queue.
|
||||||
* @note The insertion is done by scanning the list from the highest
|
* @note The insertion is done by scanning the list from the highest
|
||||||
|
@ -224,14 +227,17 @@ thread_t *chSchReadyI(thread_t *tp) {
|
||||||
"invalid state");
|
"invalid state");
|
||||||
|
|
||||||
tp->p_state = CH_STATE_READY;
|
tp->p_state = CH_STATE_READY;
|
||||||
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
cp = (thread_t *)&ch.rlist.r_queue;
|
cp = (thread_t *)&ch.rlist.r_queue;
|
||||||
|
/*lint -restore*/
|
||||||
do {
|
do {
|
||||||
cp = cp->p_next;
|
cp = cp->p_next;
|
||||||
} while (cp->p_prio >= tp->p_prio);
|
} while (cp->p_prio >= tp->p_prio);
|
||||||
/* Insertion on p_prev.*/
|
/* Insertion on p_prev.*/
|
||||||
tp->p_next = cp;
|
tp->p_next = cp;
|
||||||
tp->p_prev = cp->p_prev;
|
tp->p_prev = cp->p_prev;
|
||||||
tp->p_prev->p_next = cp->p_prev = tp;
|
tp->p_prev->p_next = tp;
|
||||||
|
cp->p_prev = tp;
|
||||||
|
|
||||||
return tp;
|
return tp;
|
||||||
}
|
}
|
||||||
|
@ -250,7 +256,8 @@ void chSchGoSleepS(tstate_t newstate) {
|
||||||
|
|
||||||
chDbgCheckClassS();
|
chDbgCheckClassS();
|
||||||
|
|
||||||
(otp = currp)->p_state = newstate;
|
otp = currp;
|
||||||
|
otp->p_state = newstate;
|
||||||
#if CH_CFG_TIME_QUANTUM > 0
|
#if CH_CFG_TIME_QUANTUM > 0
|
||||||
/* The thread is renouncing its remaining time slices so it will have a new
|
/* The thread is renouncing its remaining time slices so it will have a new
|
||||||
time quantum when it will wakeup.*/
|
time quantum when it will wakeup.*/
|
||||||
|
@ -270,7 +277,9 @@ void chSchGoSleepS(tstate_t newstate) {
|
||||||
* Timeout wakeup callback.
|
* Timeout wakeup callback.
|
||||||
*/
|
*/
|
||||||
static void wakeup(void *p) {
|
static void wakeup(void *p) {
|
||||||
|
/*lint -save -e9087 [11.3] The real type is hidden but correct.*/
|
||||||
thread_t *tp = (thread_t *)p;
|
thread_t *tp = (thread_t *)p;
|
||||||
|
/*lint -restore*/
|
||||||
|
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
switch (tp->p_state) {
|
switch (tp->p_state) {
|
||||||
|
@ -282,20 +291,24 @@ static void wakeup(void *p) {
|
||||||
case CH_STATE_SUSPENDED:
|
case CH_STATE_SUSPENDED:
|
||||||
*(thread_reference_t *)tp->p_u.wtobjp = NULL;
|
*(thread_reference_t *)tp->p_u.wtobjp = NULL;
|
||||||
break;
|
break;
|
||||||
#if CH_CFG_USE_SEMAPHORES
|
#if CH_CFG_USE_SEMAPHORES == TRUE
|
||||||
case CH_STATE_WTSEM:
|
case CH_STATE_WTSEM:
|
||||||
chSemFastSignalI((semaphore_t *)tp->p_u.wtobjp);
|
chSemFastSignalI((semaphore_t *)tp->p_u.wtobjp);
|
||||||
/* Falls into, intentional. */
|
/* Falls into, intentional. */
|
||||||
#endif
|
#endif
|
||||||
#if CH_CFG_USE_CONDVARS && CH_CFG_USE_CONDVARS_TIMEOUT
|
#if (CH_CFG_USE_CONDVARS == TRUE) && (CH_CFG_USE_CONDVARS_TIMEOUT == TRUE)
|
||||||
case CH_STATE_WTCOND:
|
case CH_STATE_WTCOND:
|
||||||
#endif
|
#endif
|
||||||
case CH_STATE_QUEUED:
|
case CH_STATE_QUEUED:
|
||||||
/* States requiring dequeuing.*/
|
/* States requiring dequeuing.*/
|
||||||
queue_dequeue(tp);
|
(void) queue_dequeue(tp);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
chDbgAssert(false, "unexpected state");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
tp->p_u.rdymsg = MSG_TIMEOUT;
|
tp->p_u.rdymsg = MSG_TIMEOUT;
|
||||||
chSchReadyI(tp);
|
(void) chSchReadyI(tp);
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -329,9 +342,10 @@ msg_t chSchGoSleepTimeoutS(tstate_t newstate, systime_t time) {
|
||||||
|
|
||||||
chVTDoSetI(&vt, time, wakeup, currp);
|
chVTDoSetI(&vt, time, wakeup, currp);
|
||||||
chSchGoSleepS(newstate);
|
chSchGoSleepS(newstate);
|
||||||
if (chVTIsArmedI(&vt))
|
if (chVTIsArmedI(&vt)) {
|
||||||
chVTDoResetI(&vt);
|
chVTDoResetI(&vt);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
chSchGoSleepS(newstate);
|
chSchGoSleepS(newstate);
|
||||||
}
|
}
|
||||||
|
@ -369,7 +383,7 @@ void chSchWakeupS(thread_t *ntp, msg_t msg) {
|
||||||
running immediately and the invoking thread goes in the ready
|
running immediately and the invoking thread goes in the ready
|
||||||
list instead.*/
|
list instead.*/
|
||||||
if (ntp->p_prio <= currp->p_prio) {
|
if (ntp->p_prio <= currp->p_prio) {
|
||||||
chSchReadyI(ntp);
|
(void) chSchReadyI(ntp);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
thread_t *otp = chSchReadyI(currp);
|
thread_t *otp = chSchReadyI(currp);
|
||||||
|
@ -455,7 +469,7 @@ void chSchDoRescheduleBehind(void) {
|
||||||
#if CH_CFG_TIME_QUANTUM > 0
|
#if CH_CFG_TIME_QUANTUM > 0
|
||||||
otp->p_preempt = CH_CFG_TIME_QUANTUM;
|
otp->p_preempt = CH_CFG_TIME_QUANTUM;
|
||||||
#endif
|
#endif
|
||||||
chSchReadyI(otp);
|
(void) chSchReadyI(otp);
|
||||||
chSysSwitch(currp, otp);
|
chSysSwitch(currp, otp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -482,14 +496,17 @@ void chSchDoRescheduleAhead(void) {
|
||||||
currp->p_state = CH_STATE_CURRENT;
|
currp->p_state = CH_STATE_CURRENT;
|
||||||
|
|
||||||
otp->p_state = CH_STATE_READY;
|
otp->p_state = CH_STATE_READY;
|
||||||
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
cp = (thread_t *)&ch.rlist.r_queue;
|
cp = (thread_t *)&ch.rlist.r_queue;
|
||||||
|
/*lint -restore*/
|
||||||
do {
|
do {
|
||||||
cp = cp->p_next;
|
cp = cp->p_next;
|
||||||
} while (cp->p_prio > otp->p_prio);
|
} while (cp->p_prio > otp->p_prio);
|
||||||
/* Insertion on p_prev.*/
|
/* Insertion on p_prev.*/
|
||||||
otp->p_next = cp;
|
otp->p_next = cp;
|
||||||
otp->p_prev = cp->p_prev;
|
otp->p_prev = cp->p_prev;
|
||||||
otp->p_prev->p_next = cp->p_prev = otp;
|
otp->p_prev->p_next = otp;
|
||||||
|
cp->p_prev = otp;
|
||||||
|
|
||||||
chSysSwitch(currp, otp);
|
chSysSwitch(currp, otp);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
|
|
||||||
#if CH_DBG_STATISTICS || defined(__DOXYGEN__)
|
#if (CH_DBG_STATISTICS == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module local definitions. */
|
/* Module local definitions. */
|
||||||
|
@ -119,6 +119,6 @@ void _stats_stop_measure_crit_isr(void) {
|
||||||
chTMStopMeasurementX(&ch.kernel_stats.m_crit_isr);
|
chTMStopMeasurementX(&ch.kernel_stats.m_crit_isr);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CH_DBG_STATISTICS */
|
#endif /* CH_DBG_STATISTICS == TRUE */
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
/* Module local functions. */
|
/* Module local functions. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
#if !CH_CFG_NO_IDLE_THREAD || defined(__DOXYGEN__)
|
#if (CH_CFG_NO_IDLE_THREAD == FALSE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief This function implements the idle thread infinite loop.
|
* @brief This function implements the idle thread infinite loop.
|
||||||
* @details The function puts the processor in the lowest power mode capable
|
* @details The function puts the processor in the lowest power mode capable
|
||||||
|
@ -67,11 +67,14 @@ static void _idle_thread(void *p) {
|
||||||
(void)p;
|
(void)p;
|
||||||
chRegSetThreadName("idle");
|
chRegSetThreadName("idle");
|
||||||
while (true) {
|
while (true) {
|
||||||
|
/*lint -save -e522 [2.2] Apparently no side effects because it contains
|
||||||
|
an asm instruction.*/
|
||||||
port_wait_for_interrupt();
|
port_wait_for_interrupt();
|
||||||
|
/*lint -restore*/
|
||||||
CH_CFG_IDLE_LOOP_HOOK();
|
CH_CFG_IDLE_LOOP_HOOK();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* CH_CFG_NO_IDLE_THREAD */
|
#endif /* CH_CFG_NO_IDLE_THREAD == FALSE */
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module exported functions. */
|
/* Module exported functions. */
|
||||||
|
@ -88,30 +91,30 @@ static void _idle_thread(void *p) {
|
||||||
* @special
|
* @special
|
||||||
*/
|
*/
|
||||||
void chSysInit(void) {
|
void chSysInit(void) {
|
||||||
#if CH_DBG_ENABLE_STACK_CHECK
|
#if CH_DBG_ENABLE_STACK_CHECK == TRUE
|
||||||
extern stkalign_t __main_thread_stack_base__;
|
extern stkalign_t __main_thread_stack_base__;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
port_init();
|
port_init();
|
||||||
_scheduler_init();
|
_scheduler_init();
|
||||||
_vt_init();
|
_vt_init();
|
||||||
#if CH_CFG_USE_TM
|
#if CH_CFG_USE_TM == TRUE
|
||||||
_tm_init();
|
_tm_init();
|
||||||
#endif
|
#endif
|
||||||
#if CH_CFG_USE_MEMCORE
|
#if CH_CFG_USE_MEMCORE == TRUE
|
||||||
_core_init();
|
_core_init();
|
||||||
#endif
|
#endif
|
||||||
#if CH_CFG_USE_HEAP
|
#if CH_CFG_USE_HEAP == TRUE
|
||||||
_heap_init();
|
_heap_init();
|
||||||
#endif
|
#endif
|
||||||
#if CH_DBG_STATISTICS
|
#if CH_DBG_STATISTICS == TRUE
|
||||||
_stats_init();
|
_stats_init();
|
||||||
#endif
|
#endif
|
||||||
#if CH_DBG_ENABLE_TRACE
|
#if CH_DBG_ENABLE_TRACE == TRUE
|
||||||
_dbg_trace_init();
|
_dbg_trace_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !CH_CFG_NO_IDLE_THREAD
|
#if CH_CFG_NO_IDLE_THREAD == FALSE
|
||||||
/* Now this instructions flow becomes the main thread.*/
|
/* Now this instructions flow becomes the main thread.*/
|
||||||
setcurrp(_thread_init(&ch.mainthread, NORMALPRIO));
|
setcurrp(_thread_init(&ch.mainthread, NORMALPRIO));
|
||||||
#else
|
#else
|
||||||
|
@ -120,7 +123,7 @@ void chSysInit(void) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
currp->p_state = CH_STATE_CURRENT;
|
currp->p_state = CH_STATE_CURRENT;
|
||||||
#if CH_DBG_ENABLE_STACK_CHECK
|
#if CH_DBG_ENABLE_STACK_CHECK == TRUE
|
||||||
/* This is a special case because the main thread thread_t structure is not
|
/* This is a special case because the main thread thread_t structure is not
|
||||||
adjacent to its stack area.*/
|
adjacent to its stack area.*/
|
||||||
currp->p_stklimit = &__main_thread_stack_base__;
|
currp->p_stklimit = &__main_thread_stack_base__;
|
||||||
|
@ -131,12 +134,15 @@ void chSysInit(void) {
|
||||||
active, else the parameter is ignored.*/
|
active, else the parameter is ignored.*/
|
||||||
chRegSetThreadName((const char *)&ch_debug);
|
chRegSetThreadName((const char *)&ch_debug);
|
||||||
|
|
||||||
#if !CH_CFG_NO_IDLE_THREAD
|
#if CH_CFG_NO_IDLE_THREAD == FALSE
|
||||||
/* This thread has the lowest priority in the system, its role is just to
|
/* This thread has the lowest priority in the system, its role is just to
|
||||||
serve interrupts in its context while keeping the lowest energy saving
|
serve interrupts in its context while keeping the lowest energy saving
|
||||||
mode compatible with the system status.*/
|
mode compatible with the system status.*/
|
||||||
chThdCreateStatic(ch.idle_thread_wa, sizeof(ch.idle_thread_wa), IDLEPRIO,
|
/*lint -save -e9074 -e9087 [11.3, 11.1] The idle thread returns void because
|
||||||
(tfunc_t)_idle_thread, NULL);
|
an optimization.*/
|
||||||
|
(void) chThdCreateStatic(ch.idle_thread_wa, sizeof(ch.idle_thread_wa),
|
||||||
|
IDLEPRIO, (tfunc_t)_idle_thread, NULL);
|
||||||
|
/*lint -restore*/
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,7 +195,7 @@ void chSysTimerHandlerI(void) {
|
||||||
/* Decrement remaining quantum.*/
|
/* Decrement remaining quantum.*/
|
||||||
currp->p_preempt--;
|
currp->p_preempt--;
|
||||||
#endif
|
#endif
|
||||||
#if CH_DBG_THREADS_PROFILING
|
#if CH_DBG_THREADS_PROFILING == TRUE
|
||||||
currp->p_time++;
|
currp->p_time++;
|
||||||
#endif
|
#endif
|
||||||
chVTDoTickI();
|
chVTDoTickI();
|
||||||
|
@ -247,7 +253,7 @@ void chSysRestoreStatusX(syssts_t sts) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if PORT_SUPPORTS_RT || defined(__DOXYGEN__)
|
#if (PORT_SUPPORTS_RT == TRUE) || defined(__DOXYGEN__)
|
||||||
/**
|
/**
|
||||||
* @brief Realtime window test.
|
* @brief Realtime window test.
|
||||||
* @details This function verifies if the current realtime counter value
|
* @details This function verifies if the current realtime counter value
|
||||||
|
@ -268,8 +274,8 @@ void chSysRestoreStatusX(syssts_t sts) {
|
||||||
*/
|
*/
|
||||||
bool chSysIsCounterWithinX(rtcnt_t cnt, rtcnt_t start, rtcnt_t end) {
|
bool chSysIsCounterWithinX(rtcnt_t cnt, rtcnt_t start, rtcnt_t end) {
|
||||||
|
|
||||||
return end > start ? (cnt >= start) && (cnt < end) :
|
return (end > start) ? ((cnt >= start) && (cnt < end)) :
|
||||||
(cnt >= start) || (cnt < end);
|
((cnt >= start) || (cnt < end));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -290,6 +296,6 @@ void chSysPolledDelayX(rtcnt_t cycles) {
|
||||||
while (chSysIsCounterWithinX(chSysGetRealtimeCounterX(), start, end)) {
|
while (chSysIsCounterWithinX(chSysGetRealtimeCounterX(), start, end)) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* PORT_SUPPORTS_RT */
|
#endif /* PORT_SUPPORTS_RT == TRUE */
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
|
@ -571,7 +571,7 @@ void chThdResumeI(thread_reference_t *trp, msg_t msg) {
|
||||||
|
|
||||||
*trp = NULL;
|
*trp = NULL;
|
||||||
tp->p_u.rdymsg = msg;
|
tp->p_u.rdymsg = msg;
|
||||||
chSchReadyI(tp);
|
(void) chSchReadyI(tp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
|
|
||||||
#if CH_CFG_USE_TM || defined(__DOXYGEN__)
|
#if (CH_CFG_USE_TM == TRUE) || defined(__DOXYGEN__)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module local definitions. */
|
/* Module local definitions. */
|
||||||
|
@ -55,14 +55,16 @@ static inline void tm_stop(time_measurement_t *tmp,
|
||||||
rtcnt_t offset) {
|
rtcnt_t offset) {
|
||||||
|
|
||||||
tmp->n++;
|
tmp->n++;
|
||||||
tmp->last = now - tmp->last - offset;
|
tmp->last = (now - tmp->last) - offset;
|
||||||
tmp->cumulative += (rttime_t)tmp->last;
|
tmp->cumulative += (rttime_t)tmp->last;
|
||||||
|
/*lint -save -e9013 [15.7] There is no else because it is not needed.*/
|
||||||
if (tmp->last > tmp->worst) {
|
if (tmp->last > tmp->worst) {
|
||||||
tmp->worst = tmp->last;
|
tmp->worst = tmp->last;
|
||||||
}
|
}
|
||||||
else if (tmp->last < tmp->best) {
|
else if (tmp->last < tmp->best) {
|
||||||
tmp->best = tmp->last;
|
tmp->best = tmp->last;
|
||||||
}
|
}
|
||||||
|
/*lint -restore*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
@ -151,6 +153,6 @@ NOINLINE void chTMChainMeasurementToX(time_measurement_t *tmp1,
|
||||||
tm_stop(tmp1, tmp2->last, 0);
|
tm_stop(tmp1, tmp2->last, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CH_CFG_USE_TM */
|
#endif /* CH_CFG_USE_TM == TRUE */
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
|
@ -60,7 +60,10 @@
|
||||||
*/
|
*/
|
||||||
void _vt_init(void) {
|
void _vt_init(void) {
|
||||||
|
|
||||||
ch.vtlist.vt_next = ch.vtlist.vt_prev = (void *)&ch.vtlist;
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
|
ch.vtlist.vt_next = (virtual_timer_t *)&ch.vtlist;
|
||||||
|
ch.vtlist.vt_prev = (virtual_timer_t *)&ch.vtlist;
|
||||||
|
/*lint -restore*/
|
||||||
ch.vtlist.vt_delta = (systime_t)-1;
|
ch.vtlist.vt_delta = (systime_t)-1;
|
||||||
#if CH_CFG_ST_TIMEDELTA == 0
|
#if CH_CFG_ST_TIMEDELTA == 0
|
||||||
ch.vtlist.vt_systime = 0;
|
ch.vtlist.vt_systime = 0;
|
||||||
|
@ -102,17 +105,19 @@ void chVTDoSetI(virtual_timer_t *vtp, systime_t delay,
|
||||||
vtp->vt_func = vtfunc;
|
vtp->vt_func = vtfunc;
|
||||||
p = ch.vtlist.vt_next;
|
p = ch.vtlist.vt_next;
|
||||||
|
|
||||||
#if CH_CFG_ST_TIMEDELTA > 0 || defined(__DOXYGEN__)
|
#if (CH_CFG_ST_TIMEDELTA > 0) || defined(__DOXYGEN__)
|
||||||
{
|
{
|
||||||
systime_t now = port_timer_get_time();
|
systime_t now = port_timer_get_time();
|
||||||
|
|
||||||
/* If the requested delay is lower than the minimum safe delta then it
|
/* If the requested delay is lower than the minimum safe delta then it
|
||||||
is raised to the minimum safe value.*/
|
is raised to the minimum safe value.*/
|
||||||
if (delay < CH_CFG_ST_TIMEDELTA) {
|
if (delay < (systime_t)CH_CFG_ST_TIMEDELTA) {
|
||||||
delay = CH_CFG_ST_TIMEDELTA;
|
delay = (systime_t)CH_CFG_ST_TIMEDELTA;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
if (&ch.vtlist == (virtual_timers_list_t *)p) {
|
if (&ch.vtlist == (virtual_timers_list_t *)p) {
|
||||||
|
/*lint -restore*/
|
||||||
/* The delta list is empty, the current time becomes the new
|
/* The delta list is empty, the current time becomes the new
|
||||||
delta list base time.*/
|
delta list base time.*/
|
||||||
ch.vtlist.vt_lasttime = now;
|
ch.vtlist.vt_lasttime = now;
|
||||||
|
@ -140,8 +145,10 @@ void chVTDoSetI(virtual_timer_t *vtp, systime_t delay,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The timer is inserted in the delta list.*/
|
/* The timer is inserted in the delta list.*/
|
||||||
vtp->vt_prev = (vtp->vt_next = p)->vt_prev;
|
vtp->vt_next = p;
|
||||||
vtp->vt_prev->vt_next = p->vt_prev = vtp;
|
vtp->vt_prev = vtp->vt_next->vt_prev;
|
||||||
|
vtp->vt_prev->vt_next = vtp;
|
||||||
|
p->vt_prev = vtp;
|
||||||
vtp->vt_delta = delay
|
vtp->vt_delta = delay
|
||||||
|
|
||||||
/* Special case when the timer is in last position in the list, the
|
/* Special case when the timer is in last position in the list, the
|
||||||
|
@ -168,28 +175,30 @@ void chVTDoResetI(virtual_timer_t *vtp) {
|
||||||
vtp->vt_next->vt_delta += vtp->vt_delta;
|
vtp->vt_next->vt_delta += vtp->vt_delta;
|
||||||
vtp->vt_prev->vt_next = vtp->vt_next;
|
vtp->vt_prev->vt_next = vtp->vt_next;
|
||||||
vtp->vt_next->vt_prev = vtp->vt_prev;
|
vtp->vt_next->vt_prev = vtp->vt_prev;
|
||||||
vtp->vt_func = (vtfunc_t)NULL;
|
vtp->vt_func = NULL;
|
||||||
|
|
||||||
/* The above code changes the value in the header when the removed element
|
/* The above code changes the value in the header when the removed element
|
||||||
is the last of the list, restoring it.*/
|
is the last of the list, restoring it.*/
|
||||||
ch.vtlist.vt_delta = (systime_t)-1;
|
ch.vtlist.vt_delta = (systime_t)-1;
|
||||||
|
|
||||||
#if CH_CFG_ST_TIMEDELTA > 0 || defined(__DOXYGEN__)
|
#if (CH_CFG_ST_TIMEDELTA > 0) || defined(__DOXYGEN__)
|
||||||
{
|
{
|
||||||
|
/*lint -save -e9087 -e740 [11.3, 1.3] Cast required by list handling.*/
|
||||||
if (&ch.vtlist == (virtual_timers_list_t *)ch.vtlist.vt_next) {
|
if (&ch.vtlist == (virtual_timers_list_t *)ch.vtlist.vt_next) {
|
||||||
|
/*lint -restore*/
|
||||||
/* Just removed the last element in the list, alarm timer stopped.*/
|
/* Just removed the last element in the list, alarm timer stopped.*/
|
||||||
port_timer_stop_alarm();
|
port_timer_stop_alarm();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* Updating the alarm to the next deadline, deadline that must not be
|
/* Updating the alarm to the next deadline, deadline that must not be
|
||||||
closer in time than the minimum time delta.*/
|
closer in time than the minimum time delta.*/
|
||||||
if (ch.vtlist.vt_next->vt_delta >= CH_CFG_ST_TIMEDELTA) {
|
if (ch.vtlist.vt_next->vt_delta >= (systime_t)CH_CFG_ST_TIMEDELTA) {
|
||||||
port_timer_set_alarm(ch.vtlist.vt_lasttime +
|
port_timer_set_alarm(ch.vtlist.vt_lasttime +
|
||||||
ch.vtlist.vt_next->vt_delta);
|
ch.vtlist.vt_next->vt_delta);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
port_timer_set_alarm(ch.vtlist.vt_lasttime +
|
port_timer_set_alarm(ch.vtlist.vt_lasttime +
|
||||||
CH_CFG_ST_TIMEDELTA);
|
(systime_t)CH_CFG_ST_TIMEDELTA);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue