source: azure_iot_hub/trunk/asp3_dcre/kernel/check.h@ 388

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

Azure IoT Hub Device C SDK を使ったサンプルの追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr
File size: 8.4 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2005-2017 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 * 上記著作権者
12は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
13 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
14 * 変・再é…
15å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
18 * スコード中に含まれていること.
19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20 * 用できる形で再é…
21å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
22å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
23 * 者
24マニュアルなど)に,上記の著作権表示,この利用条件および下記
25 * の無保証規定を掲載すること.
26 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
27 * 用できない形で再é…
28å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
29 * と.
30 * (a) 再é…
31å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
32マニュアルなど)に,上記の著
33 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
34 * (b) 再é…
35å¸ƒã®å½¢æ…
36‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
37 * 報告すること.
38 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
39 * 害からも,上記著作権者
40およびTOPPERSプロジェクトをå…
41è²¬ã™ã‚‹ã“と.
42 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
43 * 由に基づく請求からも,上記著作権者
44およびTOPPERSプロジェクトを
45 * å…
46è²¬ã™ã‚‹ã“と.
47 *
48 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
49お
50 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
51 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
52 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
53 * の責任を負わない.
54 *
55 * $Id: check.h 388 2019-05-22 11:25:18Z coas-nagasima $
56 */
57
58/*
59 * エラーチェック用マクロ
60 */
61
62#ifndef TOPPERS_CHECK_H
63#define TOPPERS_CHECK_H
64
65#include "kernel_impl.h"
66
67/*
68 * オブジェクトIDの範囲の判定
69 */
70#define VALID_TSKID(tskid) (TMIN_TSKID <= (tskid) && (tskid) <= tmax_tskid)
71#define VALID_SEMID(semid) (TMIN_SEMID <= (semid) && (semid) <= tmax_semid)
72#define VALID_FLGID(flgid) (TMIN_FLGID <= (flgid) && (flgid) <= tmax_flgid)
73#define VALID_DTQID(dtqid) (TMIN_DTQID <= (dtqid) && (dtqid) <= tmax_dtqid)
74#define VALID_PDQID(pdqid) (TMIN_PDQID <= (pdqid) && (pdqid) <= tmax_pdqid)
75#define VALID_MTXID(mtxid) (TMIN_MTXID <= (mtxid) && (mtxid) <= tmax_mtxid)
76#define VALID_MPFID(mpfid) (TMIN_MPFID <= (mpfid) && (mpfid) <= tmax_mpfid)
77#define VALID_CYCID(cycid) (TMIN_CYCID <= (cycid) && (cycid) <= tmax_cycid)
78#define VALID_ALMID(almid) (TMIN_ALMID <= (almid) && (almid) <= tmax_almid)
79#define VALID_ISRID(isrid) (TMIN_ISRID <= (isrid) && (isrid) <= tmax_isrid)
80
81/*
82 * オブジェクト番号の範囲の判定
83 */
84#ifndef VALID_INTNO_DISINT
85#define VALID_INTNO_DISINT(intno) VALID_INTNO(intno)
86#endif /* VALID_INTNO_DISINT */
87
88#ifndef VALID_INTNO_CREISR
89#define VALID_INTNO_CREISR(intno) VALID_INTNO(intno)
90#endif /* VALID_INTNO_CREISR */
91
92/*
93 * 優å…
94ˆåº¦ã®ç¯„囲の判定
95 */
96#define VALID_TPRI(tpri) (TMIN_TPRI <= (tpri) && (tpri) <= TMAX_TPRI)
97
98#define VALID_DPRI(dpri) (TMIN_DPRI <= (dpri) && (dpri) <= TMAX_DPRI)
99
100#define VALID_ISRPRI(isrpri) \
101 (TMIN_ISRPRI <= (isrpri) && (isrpri) <= TMAX_ISRPRI)
102
103#ifndef VALID_INTPRI_CHGIPM
104#define VALID_INTPRI_CHGIPM(intpri) \
105 (TMIN_INTPRI <= (intpri) && (intpri) <= TIPM_ENAALL)
106#endif /* VALID_INTPRI_CHGIPM */
107
108/*
109 * 相対時間の範囲の判定
110 */
111#define VALID_RELTIM(reltim) ((reltim) <= TMAX_RELTIM)
112
113/*
114 * タイムアウト指定値の範囲の判定
115 */
116#define VALID_TMOUT(tmout) ((tmout) <= TMAX_RELTIM || (tmout) == TMO_FEVR \
117 || (tmout) == TMO_POL)
118
119/*
120 * アラインしているかの判定
121 */
122#define ALIGNED(val, align) ((((uintptr_t)(val)) & ((align) - 1U)) == 0U)
123
124#ifdef CHECK_STKSZ_ALIGN
125#define STKSZ_ALIGN(stksz) ALIGNED(stksz, CHECK_STKSZ_ALIGN)
126#else /* CHECK_STKSZ_ALIGN */
127#define STKSZ_ALIGN(stksz) true
128#endif /* CHECK_STKSZ_ALIGN */
129
130#ifdef CHECK_INTPTR_ALIGN
131#define INTPTR_ALIGN(p_var) ALIGNED(p_var, CHECK_INTPTR_ALIGN)
132#else /* CHECK_INTPTR_ALIGN */
133#define INTPTR_ALIGN(p_var) true
134#endif /* CHECK_INTPTR_ALIGN */
135
136#ifdef CHECK_FUNC_ALIGN
137#define FUNC_ALIGN(func) ALIGNED(func, CHECK_FUNC_ALIGN)
138#else /* CHECK_FUNC_ALIGN */
139#define FUNC_ALIGN(func) true
140#endif /* CHECK_FUNC_ALIGN */
141
142#ifdef CHECK_STACK_ALIGN
143#define STACK_ALIGN(stack) ALIGNED(stack, CHECK_STACK_ALIGN)
144#else /* CHECK_STACK_ALIGN */
145#define STACK_ALIGN(stack) true
146#endif /* CHECK_STACK_ALIGN */
147
148#ifdef CHECK_MPF_ALIGN
149#define MPF_ALIGN(mpf) ALIGNED(mpf, CHECK_MPF_ALIGN)
150#else /* CHECK_MPF_ALIGN */
151#define MPF_ALIGN(mpf) true
152#endif /* CHECK_MPF_ALIGN */
153
154#ifdef CHECK_MB_ALIGN
155#define MB_ALIGN(mb) ALIGNED(mb, CHECK_MB_ALIGN)
156#else /* CHECK_MB_ALIGN */
157#define MB_ALIGN(mb) true
158#endif /* CHECK_MB_ALIGN */
159
160/*
161 * NULLでないことの判定
162 */
163#ifdef CHECK_INTPTR_NONNULL
164#define INTPTR_NONNULL(p_var) ((p_var) != NULL)
165#else /* CHECK_INTPTR_NONNULL */
166#define INTPTR_NONNULL(p_var) true
167#endif /* CHECK_INTPTR_NONNULL */
168
169#ifdef CHECK_FUNC_NONNULL
170#define FUNC_NONNULL(func) ((func) != NULL)
171#else /* CHECK_FUNC_NONNULL */
172#define FUNC_NONNULL(func) true
173#endif /* CHECK_FUNC_NONNULL */
174
175/*
176 * 呼出しコンテキストのチェック(E_CTX)
177 */
178#define CHECK_TSKCTX() do { \
179 if (sense_context()) { \
180 ercd = E_CTX; \
181 goto error_exit; \
182 } \
183} while (false)
184
185/*
186 * CPUロック状æ…
187‹ã®ãƒã‚§ãƒƒã‚¯ï¼ˆE_CTX)
188 */
189#define CHECK_UNL() do { \
190 if (sense_lock()) { \
191 ercd = E_CTX; \
192 goto error_exit; \
193 } \
194} while (false)
195
196/*
197 * 呼出しコンテキストとCPUロック状æ…
198‹ã®ãƒã‚§ãƒƒã‚¯ï¼ˆE_CTX)
199 */
200#define CHECK_TSKCTX_UNL() do { \
201 if (sense_context() || sense_lock()) { \
202 ercd = E_CTX; \
203 goto error_exit; \
204 } \
205} while (false)
206
207/*
208 * ディスパッチ保留状æ…
209‹ã§ãªã„かのチェック(E_CTX)
210 */
211#define CHECK_DISPATCH() do { \
212 if (sense_context() || sense_lock() || !dspflg) { \
213 ercd = E_CTX; \
214 goto error_exit; \
215 } \
216} while (false)
217
218/*
219 * その他のコンテキストエラーのチェック(E_CTX)
220 */
221#define CHECK_CTX(exp) do { \
222 if (!(exp)) { \
223 ercd = E_CTX; \
224 goto error_exit; \
225 } \
226} while (false)
227
228/*
229 * オブジェクトIDのチェック(E_ID)
230 */
231#define CHECK_ID(exp) do { \
232 if (!(exp)) { \
233 ercd = E_ID; \
234 goto error_exit; \
235 } \
236} while (false)
237
238/*
239 * 予約属性エラーのチェック(E_RSATR)
240 */
241#define CHECK_RSATR(atr, valid_atr) do { \
242 if (((atr) & ~(valid_atr)) != 0U) { \
243 ercd = E_RSATR; \
244 goto error_exit; \
245 } \
246} while (false)
247
248/*
249 * パラメータエラーのチェック(E_PAR)
250 */
251#define CHECK_PAR(exp) do { \
252 if (!(exp)) { \
253 ercd = E_PAR; \
254 goto error_exit; \
255 } \
256} while (false)
257
258/*
259 * 不正使用エラーのチェック(E_ILUSE)
260 */
261#define CHECK_ILUSE(exp) do { \
262 if (!(exp)) { \
263 ercd = E_ILUSE; \
264 goto error_exit; \
265 } \
266} while (false)
267
268/*
269 * 静的なオブジェクト状æ…
270‹ã‚¨ãƒ©ãƒ¼ã®ãƒã‚§ãƒƒã‚¯ï¼ˆE_OBJ)
271 */
272#define CHECK_OBJ(exp) do { \
273 if (!(exp)) { \
274 ercd = E_OBJ; \
275 goto error_exit; \
276 } \
277} while (false)
278
279#endif /* TOPPERS_CHECK_H */
Note: See TracBrowser for help on using the repository browser.