178 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			178 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/****************************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
							 | 
						||
| 
								 | 
							
								be copied by any method or incorporated into another program without
							 | 
						||
| 
								 | 
							
								the express written consent of Aerospace C.Power. This Information or any portion
							 | 
						||
| 
								 | 
							
								thereof remains the property of Aerospace C.Power. The Information contained herein
							 | 
						||
| 
								 | 
							
								is believed to be accurate and Aerospace C.Power assumes no responsibility or
							 | 
						||
| 
								 | 
							
								liability for its use in any way and conveys no license or title under
							 | 
						||
| 
								 | 
							
								any patent or copyright and makes no representation or warranty that this
							 | 
						||
| 
								 | 
							
								Information is free from patent or copyright infringement.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								****************************************************************************/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef OS_SHIM_MEM_API_H
							 | 
						||
| 
								 | 
							
								#define OS_SHIM_MEM_API_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* os shim includes */
							 | 
						||
| 
								 | 
							
								#include "os_types_api.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* common includes */
							 | 
						||
| 
								 | 
							
								#include "iot_config_api.h"
							 | 
						||
| 
								 | 
							
								#include "iot_module_api.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** \defgroup OS_APIs PLC OS APIs
							 | 
						||
| 
								 | 
							
								  * @brief WQ30x1 PLC OS APIs
							 | 
						||
| 
								 | 
							
								  */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief MALLOC Tags
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								#define MALLOC_CAP_INVALID  0x0000
							 | 
						||
| 
								 | 
							
								#define MALLOC_CAP_SYS      0x0001
							 | 
						||
| 
								 | 
							
								#define MALLOC_CAP_AI_R     0x0002
							 | 
						||
| 
								 | 
							
								#define MALLOC_CAP_AI_W     0x0004
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @addtogroup OS_APIs
							 | 
						||
| 
								 | 
							
								  * @{
							 | 
						||
| 
								 | 
							
								  */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** \defgroup OS_MEM_APIs PLC OS MEM APIs
							 | 
						||
| 
								 | 
							
								  * @brief PLC OS MEM
							 | 
						||
| 
								 | 
							
								  *
							 | 
						||
| 
								 | 
							
								  * OS MEMORY helper function for customer application
							 | 
						||
| 
								 | 
							
								  */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/** @addtogroup OS_MEM_APIs
							 | 
						||
| 
								 | 
							
								  * @{
							 | 
						||
| 
								 | 
							
								  */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief os_mem_cpy() - copy memory from one location to another, similar to
							 | 
						||
| 
								 | 
							
								 * memcpy in standard c. Calling this function with overlapping source and
							 | 
						||
| 
								 | 
							
								 * destination memory location will result in unpredictable result.
							 | 
						||
| 
								 | 
							
								 * @param dst:              pointer to destination memory location
							 | 
						||
| 
								 | 
							
								 * @param src:              pointer to source memory location
							 | 
						||
| 
								 | 
							
								 * @param len:              number of bytes to copy
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void os_mem_cpy(void *dst, const void *src, uint32_t len);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @breif os_mem_move() - move memory from one location to another, similar as
							 | 
						||
| 
								 | 
							
								 * os_mem_cpy except that this function take care of source and destination
							 | 
						||
| 
								 | 
							
								 * memory location overlapped case.
							 | 
						||
| 
								 | 
							
								 * @param dst:              pointer to destination memory location
							 | 
						||
| 
								 | 
							
								 * @param src:              pointer to source memory location
							 | 
						||
| 
								 | 
							
								 * @param len:              number of bytes to be copied
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void os_mem_move(void *dst, const void *src, uint32_t len);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @breif os_mem_cmp() - memory compare, compare two pieces of memory, similar
							 | 
						||
| 
								 | 
							
								 * to memcmp function in standard c.
							 | 
						||
| 
								 | 
							
								 * @param dst:              pointer to first location in memory to compare
							 | 
						||
| 
								 | 
							
								 * @param src:              pointer to second location in memory to compare
							 | 
						||
| 
								 | 
							
								 * @param len:              number of bytes to compare
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @return                  0 -- equal
							 | 
						||
| 
								 | 
							
								 * @return                  < 0 -- dst is less than src
							 | 
						||
| 
								 | 
							
								 * @return                  > 0 -- dst is bigger than src
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								int32_t os_mem_cmp(const void *dst, const void *src, uint32_t len);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @breif os_mem_set() - set memory with a specified byte value
							 | 
						||
| 
								 | 
							
								 * @param ptr:              pointer to memory that will be set
							 | 
						||
| 
								 | 
							
								 * @param value:            byte set in memory
							 | 
						||
| 
								 | 
							
								 * @param len:              number of bytes to be set
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void os_mem_set(void *ptr, uint8_t value, uint32_t len);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @breif os_mem_malloc() - allocate memory. Dynamicallly allocate
							 | 
						||
| 
								 | 
							
								 * the number of bytes of memory. The allocated memory must be reset to 0.
							 | 
						||
| 
								 | 
							
								 * @param module_id:     the module mallocing memory. For the debugging purpose.
							 | 
						||
| 
								 | 
							
								 * @param size:          number of bytes of memory to be allocated
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @return               null -- for failure case
							 | 
						||
| 
								 | 
							
								 * @return               otherwise -- pointer of allocated memory
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								 #if IOT_OS_MALLOC_DEBUG
							 | 
						||
| 
								 | 
							
								extern void *os_mem_malloc_debug(uint8_t *file, uint32_t line,
							 | 
						||
| 
								 | 
							
								            module_id_t  module_id, size_t  size);
							 | 
						||
| 
								 | 
							
								#define os_mem_malloc(module_id, size) \
							 | 
						||
| 
								 | 
							
								    os_mem_malloc_debug((unsigned char *)__FILE__, __LINE__, module_id, size)
							 | 
						||
| 
								 | 
							
								 #else
							 | 
						||
| 
								 | 
							
								void *os_mem_malloc(module_id_t module_id, size_t size);
							 | 
						||
| 
								 | 
							
								 #endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 /**
							 | 
						||
| 
								 | 
							
								 * @breif os_mem_malloc_tag() - allocate tagged memory. Dynamicallly allocate
							 | 
						||
| 
								 | 
							
								 * the number of bytes of memory. The allocated memory must be reset to 0.
							 | 
						||
| 
								 | 
							
								 * @param module_id:     the module mallocing memory. For the debugging purpose.
							 | 
						||
| 
								 | 
							
								 * @param size:          number of bytes of memory to be allocated
							 | 
						||
| 
								 | 
							
								 * @param mode:          MALLOC_CAP_SYS or MALLOC_CAP_AI and so on.
							 | 
						||
| 
								 | 
							
								 * @return               null -- for failure case
							 | 
						||
| 
								 | 
							
								 * @return               otherwise -- pointer of allocated memory
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								 #if IOT_OS_MALLOC_DEBUG
							 | 
						||
| 
								 | 
							
								 extern void *os_mem_malloc_tag_debug(uint8_t *file, uint32_t line,
							 | 
						||
| 
								 | 
							
								    module_id_t  module_id, size_t  size,uint32_t mode);
							 | 
						||
| 
								 | 
							
								 #define os_mem_malloc_tag(module_id, size,mode)\
							 | 
						||
| 
								 | 
							
								    os_mem_malloc_tag_debug((unsigned char *)__FILE__, __LINE__,\
							 | 
						||
| 
								 | 
							
								    module_id, size,mode)
							 | 
						||
| 
								 | 
							
								 #else
							 | 
						||
| 
								 | 
							
								 void *os_mem_malloc_tag(module_id_t module_id, size_t size,uint32_t mode);
							 | 
						||
| 
								 | 
							
								 #endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @breif os_mem_free() - free memory
							 | 
						||
| 
								 | 
							
								 * @param ptr:           pointer to the memory to be free'd.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void os_mem_free(void *ptr);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								* @breif os_mem_aligned_malloc() - allocate tagged memory. Dynamicallly allocate
							 | 
						||
| 
								 | 
							
								* the number of bytes of memory. The allocated memory must be reset to 0.
							 | 
						||
| 
								 | 
							
								* @param module_id:     the module mallocing memory. For the debugging purpose.
							 | 
						||
| 
								 | 
							
								* @param size:          number of bytes of memory to be allocated
							 | 
						||
| 
								 | 
							
								* @param alignment:     alignment number.
							 | 
						||
| 
								 | 
							
								* @return               null -- for failure case
							 | 
						||
| 
								 | 
							
								* @return               otherwise -- pointer of allocated memory
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								void* os_mem_aligned_malloc(module_id_t module_id,
							 | 
						||
| 
								 | 
							
								    size_t bytes, size_t alignment);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @breif os_mem_free() - free memory
							 | 
						||
| 
								 | 
							
								 * @param ptr:           alignement pointer to the memory to be free'd.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void os_mem_aligned_free(void* p);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								* @breif os_mem_free_get() - Obtain the remaining memory size of the system
							 | 
						||
| 
								 | 
							
								*
							 | 
						||
| 
								 | 
							
								* @return               return the remaining memory size(Bytes) of the system
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								size_t os_mem_free_get(void);
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								  * @}
							 | 
						||
| 
								 | 
							
								  */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								  * @}
							 | 
						||
| 
								 | 
							
								  */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif /* OS_SHIM_MEM_API_H */
							 |