请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TM4C129ENCPDT 大家好、
在将 TI RTOS 项目编译为“_lock.h”和 “_unlock.h”文件时出现错误,这些文件在 exit.c 程序中未找到。在这里,我附加了代码,_lock.h 文件在 TI 编译器中存在,exit.c 程序在 TI ARM 编译器中可用。 在这里、我可以在 GCC 编译器或类似程序中找到 exit.c 文件、我可以在代码中替换 exit.c。
提前感谢您。
Chiranth
TI ARM 编译器提供的 exit、c 文件。
/****************************************************************************/ /* EXIT.C v15.4.0I15142 */ /* */ /* Copyright (c) 1995-2015 Texas Instruments Incorporated */ /* http://www.ti.com/ */ /* */ /* Redistribution and use in source and binary forms, with or without */ /* modification, are permitted provided that the following conditions */ /* are met: */ /* */ /* Redistributions of source code must retain the above copyright */ /* notice, this list of conditions and the following disclaimer. */ /* */ /* Redistributions in binary form must reproduce the above copyright */ /* notice, this list of conditions and the following disclaimer in */ /* the documentation and/or other materials provided with the */ /* distribution. */ /* */ /* Neither the name of Texas Instruments Incorporated nor the names */ /* of its contributors may be used to endorse or promote products */ /* derived from this software without specific prior written */ /* permission. */ /* */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ /* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR */ /* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ /* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ /* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */ /* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, */ /* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY */ /* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */ /* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE */ /* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* */ /****************************************************************************/ #include <stdlib.h> #include <_lock.h> void (*__TI_cleanup_ptr)(void) = NULL; void _DATA_ACCESS (*__TI_dtors_ptr)(int) = NULL; void JumpToBootLoader(void); /****************************************************************************/ /* */ /* LOADER_EXIT - */ /* */ /* SET C$$EXIT LABEL SO THE DEBUGGER KNOWS WHEN THE C++ PROGRAM HAS */ /* COMPLETED. THIS CAN BE REMOVED IF THE DEBUGGER IS NOT USED. */ /* */ /****************************************************************************/ static void loader_exit(void) { #if defined(EMBED_CIO_BP) __asm(" .global C$$EXITE"); #if defined(__32bis__) __asm("C$$EXITE:.word 0xDEFED0FE"); #else __asm(" .align 4"); #if defined(__big_endian__) __asm("C$$EXITE:.half 0xDEFE"); #else __asm("C$$EXITE:.half 0xD0FE"); #endif /* __big_endian__ */ #endif /* __32bis__ */ #else /* !EMBED_CIO_BP */ __asm(" .global C$$EXITE"); __asm("C$$EXITE: nop"); #endif } /****************************************************************************/ /* EXIT() - NORMAL PROGRAM TERMINATION. */ /****************************************************************************/ extern void exit(int status) { /*-------------------------------------------------------------------*/ /* MUST LOCK WHEN ACCESSING GLOBALS, like __TI_dtors_ptr, */ /* __TI_cleanup_ptr */ /*-------------------------------------------------------------------*/ _lock(); /*-------------------------------------------------------------------*/ /* BOTH ATEXIT FUNCTIONS AND STATIC OBJECT DESTRUCTORS ARE */ /* REGISTERED IN A LINK LIST TO BE PROCESSED BY THE FUNCTION POINTED */ /* TO BY __TI_dtors_ptr. PROCESS THEM NOW. */ /*-------------------------------------------------------------------*/ if (__TI_dtors_ptr) (*__TI_dtors_ptr)(status); #if defined(_C_IN_NS) /*-------------------------------------------------------------------*/ /* _C_IN_NS IS A FLAG WE SET ONLY IN DINKUMWARE HEADERS. SO US IT TO */ /* TELL IF IT IS IN DINKUMWARE. */ /* FOR DINKUMWARE LIBRARY, CALL CLOSEALL() TO CLOSE ALL IO STREAMS. */ /* CLOSEALL() is a DINKUMWARE FUNCTION DEFINED IN FCLOSE.C TO CLOSE */ /* ALL OPENED IOSTREAMS. */ /*-------------------------------------------------------------------*/ closeall(); #else /*-------------------------------------------------------------------*/ /* IF FILES ARE POSSIBLY OPEN, __TI_cleanup_ptr() WILL BE SETUP TO */ /* CLOSE THEM. */ /*-------------------------------------------------------------------*/ if (__TI_cleanup_ptr) (*__TI_cleanup_ptr)(); #endif _unlock(); abort(); } /****************************************************************************/ /* ABORT - ABNORMAL PROGRAM TERMINATION. CURRENTLY JUST HALTS EXECUTION. */ /****************************************************************************/ void abort(void) { JumpToBootLoader(); loader_exit(); for (;;); /* SPINS FOREVER */ }
由 exit.c 文件调用的_lock.h 文件
/*****************************************************************************/ /* _lock.h v5.2.9 */ /* */ /* Copyright (c) 2000-2017 Texas Instruments Incorporated */ /* http://www.ti.com/ */ /* */ /* Redistribution and use in source and binary forms, with or without */ /* modification, are permitted provided that the following conditions */ /* are met: */ /* */ /* Redistributions of source code must retain the above copyright */ /* notice, this list of conditions and the following disclaimer. */ /* */ /* Redistributions in binary form must reproduce the above copyright */ /* notice, this list of conditions and the following disclaimer in */ /* the documentation and/or other materials provided with the */ /* distribution. */ /* */ /* Neither the name of Texas Instruments Incorporated nor the names */ /* of its contributors may be used to endorse or promote products */ /* derived from this software without specific prior written */ /* permission. */ /* */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ /* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR */ /* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ /* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ /* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */ /* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, */ /* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY */ /* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */ /* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE */ /* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* */ /*****************************************************************************/ #ifndef __LOCK_H #define __LOCK_H #include <linkage.h> #ifdef __cplusplus extern "C" { #endif #pragma diag_push /* _nop(), _lock(), and _unlock() all accept zero or more optional arguments, which must remain as empty rather than (void) parameter lists to avoid breaking the API */ #pragma CHECK_MISRA("-16.5") _CODE_ACCESS void _nop(); extern _DATA_ACCESS void ( *_lock)(); extern _DATA_ACCESS void (*_unlock)(); _CODE_ACCESS void _register_lock (void ( *lock)()); _CODE_ACCESS void _register_unlock(void (*unlock)()); #pragma diag_pop #define SYSTEM_WIDE_LOCK_REGISTERED (_lock != _nop) #define SYSTEM_WIDE_UNLOCK_REGISTERED (_unlock != _nop) #ifdef __cplusplus } /* extern "C" */ #endif #endif /* __LOCK_H */
由_lock.h 文件调用的 linkage.h 文件
/*****************************************************************************/ /* linkage.h v5.2.9 */ /* */ /* Copyright (c) 1998-2017 Texas Instruments Incorporated */ /* http://www.ti.com/ */ /* */ /* Redistribution and use in source and binary forms, with or without */ /* modification, are permitted provided that the following conditions */ /* are met: */ /* */ /* Redistributions of source code must retain the above copyright */ /* notice, this list of conditions and the following disclaimer. */ /* */ /* Redistributions in binary form must reproduce the above copyright */ /* notice, this list of conditions and the following disclaimer in */ /* the documentation and/or other materials provided with the */ /* distribution. */ /* */ /* Neither the name of Texas Instruments Incorporated nor the names */ /* of its contributors may be used to endorse or promote products */ /* derived from this software without specific prior written */ /* permission. */ /* */ /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ /* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ /* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR */ /* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ /* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ /* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */ /* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, */ /* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY */ /* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */ /* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE */ /* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* */ /*****************************************************************************/ #ifndef _LINKAGE #define _LINKAGE #pragma diag_push #pragma CHECK_MISRA("-19.4") /* macros required for implementation */ /* No modifiers are needed to access code or data */ #define _CODE_ACCESS #define _DATA_ACCESS #define _DATA_ACCESS_NEAR /*--------------------------------------------------------------------------*/ /* Define _IDECL ==> how inline functions are declared */ /*--------------------------------------------------------------------------*/ #ifdef _INLINE #define _IDECL static __inline #define _IDEFN static __inline #define __INLINE static __inline #else #define _IDECL extern _CODE_ACCESS #define _IDEFN _CODE_ACCESS #define __INLINE __EXTERN #endif #pragma diag_pop #endif /* ifndef _LINKAGE */