error: #5: cannot open source input file “core_cmInstr.h“

GD32F103VET6和STM32F103VET6引脚兼容。

GD32F103VET6工程模板需要包含头文件:core_cmInstr.h和core_cmFunc.h,这个和STM32F103还是有区别的,否则会报错,如下:

 error:  #5: cannot open source input file "core_cmInstr.h": No such file or directory

贴出来,以便大家去下载,还要积分,找得还辛苦。

/**************************************************************************//*** @file     core_cmFunc.h* @brief    CMSIS Cortex-M Core Function Access Header File* @version  V3.02* @date     24. May 2012** @note* Copyright (C) 2009-2012 ARM Limited. All rights reserved.** @par* ARM Limited (ARM) is supplying this software for use with Cortex-M* processor based microcontrollers.  This file can be freely distributed* within development tools that are supporting such ARM based processors.** @par* THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED* OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.* ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR* CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.*******************************************************************************/#ifndef __CORE_CMFUNC_H
#define __CORE_CMFUNC_H/* ###########################  Core Function Access  ########################### */
/** \ingroup  CMSIS_Core_FunctionInterface\defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions@{*/#if   defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/
/* ARM armcc specific functions */#if (__ARMCC_VERSION < 400677)#error "Please use ARM Compiler Toolchain V4.0.677 or later!"
#endif/* intrinsic void __enable_irq();     */
/* intrinsic void __disable_irq();    *//** \brief  Get Control RegisterThis function returns the content of the Control Register.\return               Control Register value*/
__STATIC_INLINE uint32_t __get_CONTROL(void)
{register uint32_t __regControl         __ASM("control");return(__regControl);
}/** \brief  Set Control RegisterThis function writes the given value to the Control Register.\param [in]    control  Control Register value to set*/
__STATIC_INLINE void __set_CONTROL(uint32_t control)
{register uint32_t __regControl         __ASM("control");__regControl = control;
}/** \brief  Get IPSR RegisterThis function returns the content of the IPSR Register.\return               IPSR Register value*/
__STATIC_INLINE uint32_t __get_IPSR(void)
{register uint32_t __regIPSR          __ASM("ipsr");return(__regIPSR);
}/** \brief  Get APSR RegisterThis function returns the content of the APSR Register.\return               APSR Register value*/
__STATIC_INLINE uint32_t __get_APSR(void)
{register uint32_t __regAPSR          __ASM("apsr");return(__regAPSR);
}/** \brief  Get xPSR RegisterThis function returns the content of the xPSR Register.\return               xPSR Register value*/
__STATIC_INLINE uint32_t __get_xPSR(void)
{register uint32_t __regXPSR          __ASM("xpsr");return(__regXPSR);
}/** \brief  Get Process Stack PointerThis function returns the current value of the Process Stack Pointer (PSP).\return               PSP Register value*/
__STATIC_INLINE uint32_t __get_PSP(void)
{register uint32_t __regProcessStackPointer  __ASM("psp");return(__regProcessStackPointer);
}/** \brief  Set Process Stack PointerThis function assigns the given value to the Process Stack Pointer (PSP).\param [in]    topOfProcStack  Process Stack Pointer value to set*/
__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack)
{register uint32_t __regProcessStackPointer  __ASM("psp");__regProcessStackPointer = topOfProcStack;
}/** \brief  Get Main Stack PointerThis function returns the current value of the Main Stack Pointer (MSP).\return               MSP Register value*/
__STATIC_INLINE uint32_t __get_MSP(void)
{register uint32_t __regMainStackPointer     __ASM("msp");return(__regMainStackPointer);
}/** \brief  Set Main Stack PointerThis function assigns the given value to the Main Stack Pointer (MSP).\param [in]    topOfMainStack  Main Stack Pointer value to set*/
__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack)
{register uint32_t __regMainStackPointer     __ASM("msp");__regMainStackPointer = topOfMainStack;
}/** \brief  Get Priority MaskThis function returns the current state of the priority mask bit from the Priority Mask Register.\return               Priority Mask value*/
__STATIC_INLINE uint32_t __get_PRIMASK(void)
{register uint32_t __regPriMask         __ASM("primask");return(__regPriMask);
}/** \brief  Set Priority MaskThis function assigns the given value to the Priority Mask Register.\param [in]    priMask  Priority Mask*/
__STATIC_INLINE void __set_PRIMASK(uint32_t priMask)
{register uint32_t __regPriMask         __ASM("primask");__regPriMask = (priMask);
}#if       (__CORTEX_M >= 0x03)/** \brief  Enable FIQThis function enables FIQ interrupts by clearing the F-bit in the CPSR.Can only be executed in Privileged modes.*/
#define __enable_fault_irq                __enable_fiq/** \brief  Disable FIQThis function disables FIQ interrupts by setting the F-bit in the CPSR.Can only be executed in Privileged modes.*/
#define __disable_fault_irq               __disable_fiq/** \brief  Get Base PriorityThis function returns the current value of the Base Priority register.\return               Base Priority register value*/
__STATIC_INLINE uint32_t  __get_BASEPRI(void)
{register uint32_t __regBasePri         __ASM("basepri");return(__regBasePri);
}/** \brief  Set Base PriorityThis function assigns the given value to the Base Priority register.\param [in]    basePri  Base Priority value to set*/
__STATIC_INLINE void __set_BASEPRI(uint32_t basePri)
{register uint32_t __regBasePri         __ASM("basepri");__regBasePri = (basePri & 0xff);
}/** \brief  Get Fault MaskThis function returns the current value of the Fault Mask register.\return               Fault Mask register value*/
__STATIC_INLINE uint32_t __get_FAULTMASK(void)
{register uint32_t __regFaultMask       __ASM("faultmask");return(__regFaultMask);
}/** \brief  Set Fault MaskThis function assigns the given value to the Fault Mask register.\param [in]    faultMask  Fault Mask value to set*/
__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask)
{register uint32_t __regFaultMask       __ASM("faultmask");__regFaultMask = (faultMask & (uint32_t)1);
}#endif /* (__CORTEX_M >= 0x03) */#if       (__CORTEX_M == 0x04)/** \brief  Get FPSCRThis function returns the current value of the Floating Point Status/Control register.\return               Floating Point Status/Control register value*/
__STATIC_INLINE uint32_t __get_FPSCR(void)
{
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)register uint32_t __regfpscr         __ASM("fpscr");return(__regfpscr);
#elsereturn(0);
#endif
}/** \brief  Set FPSCRThis function assigns the given value to the Floating Point Status/Control register.\param [in]    fpscr  Floating Point Status/Control value to set*/
__STATIC_INLINE void __set_FPSCR(uint32_t fpscr)
{
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)register uint32_t __regfpscr         __ASM("fpscr");__regfpscr = (fpscr);
#endif
}#endif /* (__CORTEX_M == 0x04) */#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/
/* IAR iccarm specific functions */#include <cmsis_iar.h>#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/
/* TI CCS specific functions */#include <cmsis_ccs.h>#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/
/* GNU gcc specific functions *//** \brief  Enable IRQ InterruptsThis function enables IRQ interrupts by clearing the I-bit in the CPSR.Can only be executed in Privileged modes.*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void)
{__ASM volatile ("cpsie i" : : : "memory");
}/** \brief  Disable IRQ InterruptsThis function disables IRQ interrupts by setting the I-bit in the CPSR.Can only be executed in Privileged modes.*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void)
{__ASM volatile ("cpsid i" : : : "memory");
}/** \brief  Get Control RegisterThis function returns the content of the Control Register.\return               Control Register value*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_CONTROL(void)
{uint32_t result;__ASM volatile ("MRS %0, control" : "=r" (result) );return(result);
}/** \brief  Set Control RegisterThis function writes the given value to the Control Register.\param [in]    control  Control Register value to set*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_CONTROL(uint32_t control)
{__ASM volatile ("MSR control, %0" : : "r" (control) );
}/** \brief  Get IPSR RegisterThis function returns the content of the IPSR Register.\return               IPSR Register value*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_IPSR(void)
{uint32_t result;__ASM volatile ("MRS %0, ipsr" : "=r" (result) );return(result);
}/** \brief  Get APSR RegisterThis function returns the content of the APSR Register.\return               APSR Register value*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_APSR(void)
{uint32_t result;__ASM volatile ("MRS %0, apsr" : "=r" (result) );return(result);
}/** \brief  Get xPSR RegisterThis function returns the content of the xPSR Register.\return               xPSR Register value*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_xPSR(void)
{uint32_t result;__ASM volatile ("MRS %0, xpsr" : "=r" (result) );return(result);
}/** \brief  Get Process Stack PointerThis function returns the current value of the Process Stack Pointer (PSP).\return               PSP Register value*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PSP(void)
{register uint32_t result;__ASM volatile ("MRS %0, psp\n"  : "=r" (result) );return(result);
}/** \brief  Set Process Stack PointerThis function assigns the given value to the Process Stack Pointer (PSP).\param [in]    topOfProcStack  Process Stack Pointer value to set*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack)
{__ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) );
}/** \brief  Get Main Stack PointerThis function returns the current value of the Main Stack Pointer (MSP).\return               MSP Register value*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_MSP(void)
{register uint32_t result;__ASM volatile ("MRS %0, msp\n" : "=r" (result) );return(result);
}/** \brief  Set Main Stack PointerThis function assigns the given value to the Main Stack Pointer (MSP).\param [in]    topOfMainStack  Main Stack Pointer value to set*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack)
{__ASM volatile ("MSR msp, %0\n" : : "r" (topOfMainStack) );
}/** \brief  Get Priority MaskThis function returns the current state of the priority mask bit from the Priority Mask Register.\return               Priority Mask value*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PRIMASK(void)
{uint32_t result;__ASM volatile ("MRS %0, primask" : "=r" (result) );return(result);
}/** \brief  Set Priority MaskThis function assigns the given value to the Priority Mask Register.\param [in]    priMask  Priority Mask*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask)
{__ASM volatile ("MSR primask, %0" : : "r" (priMask) );
}#if       (__CORTEX_M >= 0x03)/** \brief  Enable FIQThis function enables FIQ interrupts by clearing the F-bit in the CPSR.Can only be executed in Privileged modes.*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_fault_irq(void)
{__ASM volatile ("cpsie f" : : : "memory");
}/** \brief  Disable FIQThis function disables FIQ interrupts by setting the F-bit in the CPSR.Can only be executed in Privileged modes.*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_fault_irq(void)
{__ASM volatile ("cpsid f" : : : "memory");
}/** \brief  Get Base PriorityThis function returns the current value of the Base Priority register.\return               Base Priority register value*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_BASEPRI(void)
{uint32_t result;__ASM volatile ("MRS %0, basepri_max" : "=r" (result) );return(result);
}/** \brief  Set Base PriorityThis function assigns the given value to the Base Priority register.\param [in]    basePri  Base Priority value to set*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI(uint32_t value)
{__ASM volatile ("MSR basepri, %0" : : "r" (value) );
}/** \brief  Get Fault MaskThis function returns the current value of the Fault Mask register.\return               Fault Mask register value*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FAULTMASK(void)
{uint32_t result;__ASM volatile ("MRS %0, faultmask" : "=r" (result) );return(result);
}/** \brief  Set Fault MaskThis function assigns the given value to the Fault Mask register.\param [in]    faultMask  Fault Mask value to set*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask)
{__ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) );
}#endif /* (__CORTEX_M >= 0x03) */#if       (__CORTEX_M == 0x04)/** \brief  Get FPSCRThis function returns the current value of the Floating Point Status/Control register.\return               Floating Point Status/Control register value*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FPSCR(void)
{
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)uint32_t result;__ASM volatile ("VMRS %0, fpscr" : "=r" (result) );return(result);
#elsereturn(0);
#endif
}/** \brief  Set FPSCRThis function assigns the given value to the Floating Point Status/Control register.\param [in]    fpscr  Floating Point Status/Control value to set*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr)
{
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)__ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) );
#endif
}#endif /* (__CORTEX_M == 0x04) */#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/
/* TASKING carm specific functions *//** The CMSIS functions have been implemented as intrinsics in the compiler.* Please use "carm -?i" to get an up to date list of all instrinsics,* Including the CMSIS ones.*/#endif/*@} end of CMSIS_Core_RegAccFunctions */#endif /* __CORE_CMFUNC_H */
/**************************************************************************//*** @file     core_cmInstr.h* @brief    CMSIS Cortex-M Core Instruction Access Header File* @version  V3.02* @date     08. May 2012** @note* Copyright (C) 2009-2012 ARM Limited. All rights reserved.** @par* ARM Limited (ARM) is supplying this software for use with Cortex-M* processor based microcontrollers.  This file can be freely distributed* within development tools that are supporting such ARM based processors.** @par* THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED* OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.* ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR* CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.*******************************************************************************/#ifndef __CORE_CMINSTR_H
#define __CORE_CMINSTR_H/* ##########################  Core Instruction Access  ######################### */
/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction InterfaceAccess to dedicated instructions@{
*/#if   defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/
/* ARM armcc specific functions */#if (__ARMCC_VERSION < 400677)#error "Please use ARM Compiler Toolchain V4.0.677 or later!"
#endif/** \brief  No OperationNo Operation does nothing. This instruction can be used for code alignment purposes.*/
#define __NOP                             __nop/** \brief  Wait For InterruptWait For Interrupt is a hint instruction that suspends executionuntil one of a number of events occurs.*/
#define __WFI                             __wfi/** \brief  Wait For EventWait For Event is a hint instruction that permits the processor to entera low-power state until one of a number of events occurs.*/
#define __WFE                             __wfe/** \brief  Send EventSend Event is a hint instruction. It causes an event to be signaled to the CPU.*/
#define __SEV                             __sev/** \brief  Instruction Synchronization BarrierInstruction Synchronization Barrier flushes the pipeline in the processor,so that all instructions following the ISB are fetched from cache ormemory, after the instruction has been completed.*/
#define __ISB()                           __isb(0xF)/** \brief  Data Synchronization BarrierThis function acts as a special kind of Data Memory Barrier.It completes when all explicit memory accesses before this instruction complete.*/
#define __DSB()                           __dsb(0xF)/** \brief  Data Memory BarrierThis function ensures the apparent order of the explicit memory operations beforeand after the instruction, without ensuring their completion.*/
#define __DMB()                           __dmb(0xF)/** \brief  Reverse byte order (32 bit)This function reverses the byte order in integer value.\param [in]    value  Value to reverse\return               Reversed value*/
#define __REV                             __rev/** \brief  Reverse byte order (16 bit)This function reverses the byte order in two unsigned short values.\param [in]    value  Value to reverse\return               Reversed value*/
#ifndef __NO_EMBEDDED_ASM
__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value)
{rev16 r0, r0bx lr
}
#endif/** \brief  Reverse byte order in signed short valueThis function reverses the byte order in a signed short value with sign extension to integer.\param [in]    value  Value to reverse\return               Reversed value*/
#ifndef __NO_EMBEDDED_ASM
__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int32_t __REVSH(int32_t value)
{revsh r0, r0bx lr
}
#endif/** \brief  Rotate Right in unsigned value (32 bit)This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.\param [in]    value  Value to rotate\param [in]    value  Number of Bits to rotate\return               Rotated value*/
#define __ROR                             __ror#if       (__CORTEX_M >= 0x03)/** \brief  Reverse bit order of valueThis function reverses the bit order of the given value.\param [in]    value  Value to reverse\return               Reversed value*/
#define __RBIT                            __rbit/** \brief  LDR Exclusive (8 bit)This function performs a exclusive LDR command for 8 bit value.\param [in]    ptr  Pointer to data\return             value of type uint8_t at (*ptr)*/
#define __LDREXB(ptr)                     ((uint8_t ) __ldrex(ptr))/** \brief  LDR Exclusive (16 bit)This function performs a exclusive LDR command for 16 bit values.\param [in]    ptr  Pointer to data\return        value of type uint16_t at (*ptr)*/
#define __LDREXH(ptr)                     ((uint16_t) __ldrex(ptr))/** \brief  LDR Exclusive (32 bit)This function performs a exclusive LDR command for 32 bit values.\param [in]    ptr  Pointer to data\return        value of type uint32_t at (*ptr)*/
#define __LDREXW(ptr)                     ((uint32_t ) __ldrex(ptr))/** \brief  STR Exclusive (8 bit)This function performs a exclusive STR command for 8 bit values.\param [in]  value  Value to store\param [in]    ptr  Pointer to location\return          0  Function succeeded\return          1  Function failed*/
#define __STREXB(value, ptr)              __strex(value, ptr)/** \brief  STR Exclusive (16 bit)This function performs a exclusive STR command for 16 bit values.\param [in]  value  Value to store\param [in]    ptr  Pointer to location\return          0  Function succeeded\return          1  Function failed*/
#define __STREXH(value, ptr)              __strex(value, ptr)/** \brief  STR Exclusive (32 bit)This function performs a exclusive STR command for 32 bit values.\param [in]  value  Value to store\param [in]    ptr  Pointer to location\return          0  Function succeeded\return          1  Function failed*/
#define __STREXW(value, ptr)              __strex(value, ptr)/** \brief  Remove the exclusive lockThis function removes the exclusive lock which is created by LDREX.*/
#define __CLREX                           __clrex/** \brief  Signed SaturateThis function saturates a signed value.\param [in]  value  Value to be saturated\param [in]    sat  Bit position to saturate to (1..32)\return             Saturated value*/
#define __SSAT                            __ssat/** \brief  Unsigned SaturateThis function saturates an unsigned value.\param [in]  value  Value to be saturated\param [in]    sat  Bit position to saturate to (0..31)\return             Saturated value*/
#define __USAT                            __usat/** \brief  Count leading zerosThis function counts the number of leading zeros of a data value.\param [in]  value  Value to count the leading zeros\return             number of leading zeros in value*/
#define __CLZ                             __clz#endif /* (__CORTEX_M >= 0x03) */#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/
/* IAR iccarm specific functions */#include <cmsis_iar.h>#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/
/* TI CCS specific functions */#include <cmsis_ccs.h>#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/
/* GNU gcc specific functions *//** \brief  No OperationNo Operation does nothing. This instruction can be used for code alignment purposes.*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __NOP(void)
{__ASM volatile ("nop");
}/** \brief  Wait For InterruptWait For Interrupt is a hint instruction that suspends executionuntil one of a number of events occurs.*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __WFI(void)
{__ASM volatile ("wfi");
}/** \brief  Wait For EventWait For Event is a hint instruction that permits the processor to entera low-power state until one of a number of events occurs.*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __WFE(void)
{__ASM volatile ("wfe");
}/** \brief  Send EventSend Event is a hint instruction. It causes an event to be signaled to the CPU.*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __SEV(void)
{__ASM volatile ("sev");
}/** \brief  Instruction Synchronization BarrierInstruction Synchronization Barrier flushes the pipeline in the processor,so that all instructions following the ISB are fetched from cache ormemory, after the instruction has been completed.*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __ISB(void)
{__ASM volatile ("isb");
}/** \brief  Data Synchronization BarrierThis function acts as a special kind of Data Memory Barrier.It completes when all explicit memory accesses before this instruction complete.*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __DSB(void)
{__ASM volatile ("dsb");
}/** \brief  Data Memory BarrierThis function ensures the apparent order of the explicit memory operations beforeand after the instruction, without ensuring their completion.*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __DMB(void)
{__ASM volatile ("dmb");
}/** \brief  Reverse byte order (32 bit)This function reverses the byte order in integer value.\param [in]    value  Value to reverse\return               Reversed value*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV(uint32_t value)
{uint32_t result;__ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value) );return(result);
}/** \brief  Reverse byte order (16 bit)This function reverses the byte order in two unsigned short values.\param [in]    value  Value to reverse\return               Reversed value*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV16(uint32_t value)
{uint32_t result;__ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) );return(result);
}/** \brief  Reverse byte order in signed short valueThis function reverses the byte order in a signed short value with sign extension to integer.\param [in]    value  Value to reverse\return               Reversed value*/
__attribute__( ( always_inline ) ) __STATIC_INLINE int32_t __REVSH(int32_t value)
{uint32_t result;__ASM volatile ("revsh %0, %1" : "=r" (result) : "r" (value) );return(result);
}/** \brief  Rotate Right in unsigned value (32 bit)This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.\param [in]    value  Value to rotate\param [in]    value  Number of Bits to rotate\return               Rotated value*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2)
{__ASM volatile ("ror %0, %0, %1" : "+r" (op1) : "r" (op2) );return(op1);
}#if       (__CORTEX_M >= 0x03)/** \brief  Reverse bit order of valueThis function reverses the bit order of the given value.\param [in]    value  Value to reverse\return               Reversed value*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __RBIT(uint32_t value)
{uint32_t result;__ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );return(result);
}/** \brief  LDR Exclusive (8 bit)This function performs a exclusive LDR command for 8 bit value.\param [in]    ptr  Pointer to data\return             value of type uint8_t at (*ptr)*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __LDREXB(volatile uint8_t *addr)
{uint8_t result;__ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) );return(result);
}/** \brief  LDR Exclusive (16 bit)This function performs a exclusive LDR command for 16 bit values.\param [in]    ptr  Pointer to data\return        value of type uint16_t at (*ptr)*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint16_t __LDREXH(volatile uint16_t *addr)
{uint16_t result;__ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) );return(result);
}/** \brief  LDR Exclusive (32 bit)This function performs a exclusive LDR command for 32 bit values.\param [in]    ptr  Pointer to data\return        value of type uint32_t at (*ptr)*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __LDREXW(volatile uint32_t *addr)
{uint32_t result;__ASM volatile ("ldrex %0, [%1]" : "=r" (result) : "r" (addr) );return(result);
}/** \brief  STR Exclusive (8 bit)This function performs a exclusive STR command for 8 bit values.\param [in]  value  Value to store\param [in]    ptr  Pointer to location\return          0  Function succeeded\return          1  Function failed*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr)
{uint32_t result;__ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );return(result);
}/** \brief  STR Exclusive (16 bit)This function performs a exclusive STR command for 16 bit values.\param [in]  value  Value to store\param [in]    ptr  Pointer to location\return          0  Function succeeded\return          1  Function failed*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr)
{uint32_t result;__ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );return(result);
}/** \brief  STR Exclusive (32 bit)This function performs a exclusive STR command for 32 bit values.\param [in]  value  Value to store\param [in]    ptr  Pointer to location\return          0  Function succeeded\return          1  Function failed*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr)
{uint32_t result;__ASM volatile ("strex %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );return(result);
}/** \brief  Remove the exclusive lockThis function removes the exclusive lock which is created by LDREX.*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __CLREX(void)
{__ASM volatile ("clrex");
}/** \brief  Signed SaturateThis function saturates a signed value.\param [in]  value  Value to be saturated\param [in]    sat  Bit position to saturate to (1..32)\return             Saturated value*/
#define __SSAT(ARG1,ARG2) \
({                          \uint32_t __RES, __ARG1 = (ARG1); \__ASM ("ssat %0, %1, %2" : "=r" (__RES) :  "I" (ARG2), "r" (__ARG1) ); \__RES; \})/** \brief  Unsigned SaturateThis function saturates an unsigned value.\param [in]  value  Value to be saturated\param [in]    sat  Bit position to saturate to (0..31)\return             Saturated value*/
#define __USAT(ARG1,ARG2) \
({                          \uint32_t __RES, __ARG1 = (ARG1); \__ASM ("usat %0, %1, %2" : "=r" (__RES) :  "I" (ARG2), "r" (__ARG1) ); \__RES; \})/** \brief  Count leading zerosThis function counts the number of leading zeros of a data value.\param [in]  value  Value to count the leading zeros\return             number of leading zeros in value*/
__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __CLZ(uint32_t value)
{uint8_t result;__ASM volatile ("clz %0, %1" : "=r" (result) : "r" (value) );return(result);
}#endif /* (__CORTEX_M >= 0x03) */#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/
/* TASKING carm specific functions *//** The CMSIS functions have been implemented as intrinsics in the compiler.* Please use "carm -?i" to get an up to date list of all intrinsics,* Including the CMSIS ones.*/#endif/*@}*/ /* end of group CMSIS_Core_InstructionInterface */#endif /* __CORE_CMINSTR_H */

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/18895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot之把外部依赖包纳入Spring容器管理的两种方式

前言 在Spring boot项目中&#xff0c;凡是标记有Component、Controller、Service、Configuration、Bean等注解的类&#xff0c;Spring boot都会在容器启动的时候&#xff0c;自动创建bean并纳入到Spring容器中进行管理&#xff0c;这样就可以使用Autowired等注解&#xff0c;…

MQ面试题3

1、讲一讲Kafka与RocketMQ中存储设计的异同&#xff1f; Kafka 中文件的布局是以 Topic/partition &#xff0c;每一个分区一个物理文件夹&#xff0c;在分区文件级别实现文件顺序写&#xff0c;如果一个Kafka集群中拥有成百上千个主题&#xff0c;每一个主题拥有上百个分区&am…

Android AlarmManagerService-设置系统时间无效的问题

现象 使用系统接口设置时间生效,查看rtc也设置成功。但是重启后时间为首次开机的时间. 分析 多次测试后发现,设置时间在第一次开机时系统显示的时间之后,重启后时间设置生效;设置在之前,则会还原成第一次系统开机时显示的时间。 所以怀疑时,系统在开机的时候做了时间有效…

《Vue3+Typescript》一个简单的日历组件实现

这是一个没有套路的前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e; 主页: oliver尹的主页 格言: 跌倒了爬起来就好&#xff5e; 目录 一、…

SQL注入工具介绍——sqlmap

文章目录 一、安装方法二、使用方法三、sqlmap简介四、sqlmap支持的数据库五、检测注入1、基本格式2、跟随302跳转3、cookie注入4、从post数据包中注入 六、注入成功后1、获取数据库基本信息2、从数据库中搜索字段3、读取与写入文件 七、sqlmap详细命令1、Options&#xff08;选…

架构的分类

目录 一、 RUP41 架构 1.1 RUP41架构方法概述 1.2 RUP41架构总体 1.3 RUP41架构方法内容 1.3.1 逻辑视图 1.3.2 开发视图 1.3.3 物理视图 1.3.4 处理视图 1.3.5 场景视图 ​二、 TOGAF9 架构 2.1 TOGAF9 架构概述 2.2 TOGAF9 架构分类 2.2.1 业务架构 2.2.2 数据架…

【1.3】Java微服务:Spring Cloud版本说明

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f49e;当前专栏&#xff1a; 微服务 ✨特色专栏&#xff1a; 知识分享 &#x…

django4.2 day1Django快速入门

1、创建虚拟环境 打开cmd安装virtualenv pip install virtualenvwrapper-winworkon 查看虚拟环境mkvirtualenv 创建新的虚拟环境删除虚拟环境 rmvirtualenv 进入虚拟环境 workon env 2、创建django虚拟环境并安装django 创建虚拟环境mkvirtualenv django4env进入虚拟环境安…

每日一题(822. 翻转卡片游戏)-集合set

题目 822. 翻转卡片游戏 题解思路 简述为&#xff1a;找到桌面卡片中 不重复的最小值&#xff0c;卡片可以来回反转 如果 卡片前面后面的数字相同 则抛弃不用在剩下的卡片中 找到最小值&#xff08;前后可以反转 卡片不分前后&#xff09; 代码 C class Solution { pub…

Spring Boot Starter 剖析与实践 | 京东云技术团队

引言 对于 Java 开发人员来说&#xff0c;Spring 框架几乎是必不可少的。它是一个广泛用于开发企业应用程序的开源轻量级框架。近几年&#xff0c;Spring Boot 在传统 Spring 框架的基础上应运而生&#xff0c;不仅提供了 Spring 的全部功能&#xff0c;还使开发人员更加便捷地…

SpringSecurity自定义认证

Step 1: 创建自定义UserDetails类 自定义一个实现UserDetails接口的类&#xff0c;用于表示用户信息。您可以在这个类中添加自己需要的属性和方法来存储用户信息。 public class CustomUserDetails implements UserDetails {private String email;private boolean enabled;pri…

Redis 简介

文章目录 Redis 简介 Redis 简介 Redis&#xff08;Remote Dictionary Server&#xff09;&#xff0c;远程词典服务器&#xff0c;基于 C/S 架构&#xff0c;是一个基于内存的键值型 NoSQL 数据库&#xff0c;开源&#xff0c;遵守 BSD 协议&#xff0c;Redis 由 C语言 实现。…

JS之new Date(‘yyyy-MM-dd‘)多8小时问题

new Date(‘yyyy-MM-dd’)多8小时问题 原因 //会多8小时的转化 new Date("2023-08-02") //不会多8小时的转化 new Date("2023-8-2")因为月和天为个位数时前面带有0&#xff0c;这时会当你处于格林尼治国际标准时的时区&#xff08;0时区&#xff09;而你…

线上服务出现异常,获取链接超时wait millis 60 000, active 0, maxActive 400, creating 1

背景 最近线上服务出现出现异常&#xff0c;导致整个服务数据库不可用&#xff0c;查看报错信息为&#xff1a;org.springframework.jdbc.CannotGetJdbcConnectionException&#xff1a;wait millis 60 000, active 0, maxActive 400, creating 1" druid版本&#xff1a…

P4145 上帝造题的七分钟 2 / 花神游历各国

上帝造题的七分钟 2 / 花神游历各国 题目背景 XLk 觉得《上帝造题的七分钟》不太过瘾&#xff0c;于是有了第二部。 题目描述 "第一分钟&#xff0c;X 说&#xff0c;要有数列&#xff0c;于是便给定了一个正整数数列。 第二分钟&#xff0c;L 说&#xff0c;要能修改…

《向量数据库指南》——腾讯云向量数据库Tencent Cloud VectorDB产品特性,架构和应用场景

腾讯云向量数据库(Tencent Cloud VectorDB)是一款全托管的自研企业级分布式数据库服务,专用于存储、检索、分析多维向量数据。该数据库支持多种索引类型和相似度计算方法,单索引支持 10 亿级向量规模,可支持百万级 QPS 及毫秒级查询延迟。腾讯云向量数据库不仅能为大模型提…

前端Vue自定义精美商品分类组件category 可用于电商应用分类页面

随着技术的不断发展&#xff0c;传统的开发方式使得系统的复杂度越来越高。在传统开发过程中&#xff0c;一个小小的改动或者一个小功能的增加可能会导致整体逻辑的修改&#xff0c;造成牵一发而动全身的情况。为了解决这个问题&#xff0c;我们采用了组件化的开发模式。通过组…

MySQL踩坑之sql_mode的用法

目录 定义 报错重现 ​编辑 原因分析 sql_mode值说明 查看当前sql_mode 设置sql_mode 定义 什么是sql_mode?玩了这么久的MySQL语句࿰

SpringBoot整合Zookeeper

引入Jar包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>s…