33 #define MICRIUM_SOURCE
36 #ifdef VSC_INCLUDE_SOURCE_FILE_NAMES
37 const CPU_CHAR *os_mem__c =
"$Id: $";
41 #if OS_CFG_MEM_EN > 0u
75 void OSMemCreate (OS_MEM *p_mem,
82 #if OS_CFG_ARG_CHK_EN > 0u
93 #ifdef OS_SAFETY_CRITICAL
94 if (p_err == (
OS_ERR *)0) {
95 OS_SAFETY_CRITICAL_EXCEPTION();
100 #ifdef OS_SAFETY_CRITICAL_IEC61508
101 if (OSSafetyCriticalStartFlag ==
DEF_TRUE) {
107 #if OS_CFG_CALLED_FROM_ISR_CHK_EN > 0u
114 #if OS_CFG_ARG_CHK_EN > 0u
115 if (p_addr == (
void *)0) {
123 if (blk_size <
sizeof(
void *)) {
127 align_msk =
sizeof(
void *) - 1u;
129 if (((
CPU_ADDR)p_addr & align_msk) != 0u){
133 if ((blk_size & align_msk) != 0u) {
140 p_link = (
void **)p_addr;
143 for (i = 0u; i < loops; i++) {
145 *p_link = (
void *)p_blk;
146 p_link = (
void **)(
void *)p_blk;
152 p_mem->NamePtr = p_name;
153 p_mem->AddrPtr = p_addr;
154 p_mem->FreeListPtr = p_addr;
155 p_mem->NbrFree = n_blks;
156 p_mem->NbrMax = n_blks;
157 p_mem->BlkSize = blk_size;
159 #if OS_CFG_DBG_EN > 0u
160 OS_MemDbgListAdd(p_mem);
190 void *OSMemGet (OS_MEM *p_mem,
198 #ifdef OS_SAFETY_CRITICAL
199 if (p_err == (
OS_ERR *)0) {
200 OS_SAFETY_CRITICAL_EXCEPTION();
205 #if OS_CFG_ARG_CHK_EN > 0u
206 if (p_mem == (OS_MEM *)0) {
218 p_blk = p_mem->FreeListPtr;
219 p_mem->FreeListPtr = *(
void **)p_blk;
247 void OSMemPut (OS_MEM *p_mem,
255 #ifdef OS_SAFETY_CRITICAL
256 if (p_err == (
OS_ERR *)0) {
257 OS_SAFETY_CRITICAL_EXCEPTION();
262 #if OS_CFG_ARG_CHK_EN > 0u
263 if (p_mem == (OS_MEM *)0) {
267 if (p_blk == (
void *)0) {
274 if (p_mem->NbrFree >= p_mem->NbrMax) {
279 *(
void **)p_blk = p_mem->FreeListPtr;
280 p_mem->FreeListPtr = p_blk;
301 #if OS_CFG_DBG_EN > 0u
302 void OS_MemDbgListAdd (OS_MEM *p_mem)
304 p_mem->DbgPrevPtr = (OS_MEM *)0;
305 if (OSMemDbgListPtr == (OS_MEM *)0) {
306 p_mem->DbgNextPtr = (OS_MEM *)0;
308 p_mem->DbgNextPtr = OSMemDbgListPtr;
309 OSMemDbgListPtr->DbgPrevPtr = p_mem;
311 OSMemDbgListPtr = p_mem;
331 void OS_MemInit (
OS_ERR *p_err)
333 #ifdef OS_SAFETY_CRITICAL
334 if (p_err == (
OS_ERR *)0) {
335 OS_SAFETY_CRITICAL_EXCEPTION();
340 #if OS_CFG_DBG_EN > 0u
341 OSMemDbgListPtr = (OS_MEM *)0;