source: asp3_tinet_ecnl_arm/trunk/asp3_dcre/tecsgen/tecs/rpc/tPPAllocator.c@ 352

Last change on this file since 352 was 352, checked in by coas-nagasima, 6 years ago

arm向けASP3版ECNLを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 4.9 KB
Line 
1/*
2 * TECS Generator
3 * Generator for TOPPERS Embedded Component System
4 *
5 * Copyright (C) 2008-2013 by TOPPERS Project
6 *--
7 * 上記著作権者は,以下の(1)(4)の条件を満たす場合に限り,本ソフトウェ
8 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
9 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
10 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
11 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
12 * スコード中に含まれていること.
13 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
14 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
15 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
16 * の無保証規定を掲載すること.
17 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
18 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
19 * と.
20 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
21 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
22 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
23 * 報告すること.
24 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
25 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
26 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
27 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
28 * 免責すること.
29 *
30 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
31 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
32 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
33 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
34 * の責任を負わない.
35 *
36 * $Id$
37 */
38
39/* #[<PREAMBLE>]#
40 * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
41 * tecsmerge によるマージに使用されます
42 *
43 * 属性アクセスマクロ #_CAAM_#
44 * heap_size uint32_t ATTR_heap_size
45 * buf int8_t* VAR_buf
46 * allocated_size uint32_t VAR_allocated_size
47 *
48 * #[</PREAMBLE>]# */
49
50#include "tPPAllocator_tecsgen.h"
51
52#ifndef E_OK
53#define E_OK 0 /* success */
54#define E_ID (-18) /* illegal ID */
55#endif
56
57/* 受け口関数 #_TEPF_# */
58/* #[<ENTRY_PORT>]# ePPAllocator
59 * entry port: ePPAllocator
60 * signature: sPPAllocator
61 * context: task
62 * #[</ENTRY_PORT>]# */
63
64/* #[<ENTRY_FUNC>]# ePPAllocator_alloc
65 * name: ePPAllocator_alloc
66 * global_name: tPPAllocator_ePPAllocator_alloc
67 * oneway: false
68 * #[</ENTRY_FUNC>]# */
69ER
70ePPAllocator_alloc(CELLIDX idx, uint32_t size, void** ptr)
71{
72 ER ercd = E_OK;
73 CELLCB *p_cellcb;
74 if (VALID_IDX(idx)) {
75 p_cellcb = GET_CELLCB(idx);
76 }
77 else {
78 return(E_ID);
79 }
80
81 /* ここに処理本体を記述します #_TEFB_# */
82 if( size + VAR_allocatedSize > ATTR_heapSize ){
83 ercd = E_NOMEM;
84 }
85 else {
86 *ptr = (void *)(VAR_buf+VAR_allocatedSize);
87 VAR_allocatedSize += size;
88 }
89
90 return(ercd);
91}
92
93/* #[<ENTRY_FUNC>]# ePPAllocator_dealloc
94 * name: ePPAllocator_dealloc
95 * global_name: tPPAllocator_ePPAllocator_dealloc
96 * oneway: false
97 * #[</ENTRY_FUNC>]# */
98ER
99ePPAllocator_dealloc(CELLIDX idx, const void* ptr)
100{
101 ER ercd = E_OK;
102 CELLCB *p_cellcb;
103 if (VALID_IDX(idx)) {
104 p_cellcb = GET_CELLCB(idx);
105 }
106 else {
107 return(E_ID);
108 }
109
110 /* ここに処理本体を記述します #_TEFB_# */
111 if( (uintptr_t)ptr < (uintptr_t)VAR_buf || (uintptr_t)ptr >= (uintptr_t)(VAR_buf+VAR_allocatedSize) ){
112 ercd = E_PAR;
113 }
114 else {
115 VAR_allocatedSize = (uintptr_t)ptr - (uintptr_t)VAR_buf;
116 }
117
118 return(ercd);
119}
120
121/* #[<ENTRY_FUNC>]# ePPAllocator_dealloc_all
122 * name: ePPAllocator_dealloc_all
123 * global_name: tPPAllocator_ePPAllocator_dealloc_all
124 * oneway: false
125 * #[</ENTRY_FUNC>]# */
126ER
127ePPAllocator_dealloc_all(CELLIDX idx)
128{
129 ER ercd = E_OK;
130 CELLCB *p_cellcb;
131 if (VALID_IDX(idx)) {
132 p_cellcb = GET_CELLCB(idx);
133 }
134 else {
135 return(E_ID);
136 }
137
138 /* ここに処理本体を記述します #_TEFB_# */
139 VAR_allocatedSize = 0;
140
141 return(ercd);
142}
143
144/* #[<POSTAMBLE>]#
145 * これより下に非受け口関数を書きます
146 * #[</POSTAMBLE>]#*/
Note: See TracBrowser for help on using the repository browser.