建立工程,成功创建两个虚拟串口
This commit is contained in:
		
							
								
								
									
										71
									
								
								source/OpenAMP/libmetal/lib/spinlock.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								source/OpenAMP/libmetal/lib/spinlock.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | ||||
| /* | ||||
|  * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. | ||||
|  * | ||||
|  * SPDX-License-Identifier: BSD-3-Clause | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * @file	spinlock.h | ||||
|  * @brief	Spinlock primitives for libmetal. | ||||
|  */ | ||||
|  | ||||
| #ifndef __METAL_SPINLOCK__H__ | ||||
| #define __METAL_SPINLOCK__H__ | ||||
|  | ||||
| #include <metal/atomic.h> | ||||
| #include <metal/cpu.h> | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** \defgroup spinlock Spinlock Interfaces | ||||
|  *  @{ */ | ||||
| struct metal_spinlock { | ||||
| 	union{ | ||||
| 		atomic_int v; | ||||
| 		atomic_flag w; | ||||
| 	}; | ||||
| }; | ||||
|  | ||||
| /** Static metal spinlock initialization. */ | ||||
| #define METAL_SPINLOCK_INIT		{ATOMIC_VAR_INIT(0)} | ||||
|  | ||||
| /** | ||||
|  * @brief	Initialize a libmetal spinlock. | ||||
|  * @param[in]	slock	Spinlock to initialize. | ||||
|  */ | ||||
| static inline void metal_spinlock_init(struct metal_spinlock *slock) | ||||
| { | ||||
| 	atomic_store(&slock->v, 0); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @brief	Acquire a spinlock. | ||||
|  * @param[in]	slock   Spinlock to acquire. | ||||
|  * @see metal_spinlock_release | ||||
|  */ | ||||
| static inline void metal_spinlock_acquire(struct metal_spinlock *slock) | ||||
| { | ||||
| 	while (atomic_flag_test_and_set(&slock->w)) { | ||||
| 		metal_cpu_yield(); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @brief	Release a previously acquired spinlock. | ||||
|  * @param[in]	slock	Spinlock to release. | ||||
|  * @see metal_spinlock_acquire | ||||
|  */ | ||||
| static inline void metal_spinlock_release(struct metal_spinlock *slock) | ||||
| { | ||||
| 	atomic_flag_clear(&slock->w); | ||||
| } | ||||
|  | ||||
| /** @} */ | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif /* __METAL_SPINLOCK__H__ */ | ||||
		Reference in New Issue
	
	Block a user
	 ranchuan
					ranchuan