1 /*********************************************************************************
\r
3 * --------------------------------------------------------------------------------
\r
5 * This file is part of MiMic
\r
6 * Copyright (C)2011 Ryo Iizuka
\r
8 * MiMic is free software: you can redistribute it and/or modify
\r
9 * it under the terms of the GNU Lesser General Public License as published
\r
10 * by the Free Software Foundation, either version 3 of the License, or
\r
11 * (at your option) any later version.
\r
13 * This program is distributed in the hope that it will be useful,
\r
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
16 * GNU General Public License for more details.
\r
18 * You should have received a copy of the GNU Lesser General Public License
\r
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
\r
21 * For further information please contact.
\r
23 * <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>
\r
25 *********************************************************************************/
\r
28 * このファイルは、ルートモジュールにあるヘッダファイルを集積します。
\r
31 #ifndef NyLPC_stdlib_h
\r
32 #define NyLPC_stdlib_h
\r
35 * 環境定数です。WIN32環境でコンパイルすることを示します。
\r
37 #define NyLPC_ARCH_WIN32 1
\r
39 * 環境定数です。FREERTOS環境でコンパイルすることを示します。
\r
41 #define NyLPC_ARCH_FREERTOS 2
\r
44 * 環境定数です。アーキテクチャを選択します。NyLPC_ARCH_WIN32は、デバック用の定数です。
\r
45 * 通常は、NyLPC_ARCH_FREERTOSを使用します。
\r
48 #define NyLPC_ARCH NyLPC_ARCH_WIN32
\r
50 #define NyLPC_ARCH NyLPC_ARCH_FREERTOS
\r
53 #if NyLPC_ARCH==NyLPC_ARCH_FREERTOS
\r
54 #include "FreeRTOS.h"
\r
57 #elif NyLPC_ARCH==NyLPC_ARCH_WIN32
\r
59 #error Bad NyLPC_ARCH!
\r
63 /**********************************************************************
\r
67 **********************************************************************/
\r
70 * 引数チェック専用のASSERT構文です。
\r
73 #define NyLPC_ArgAssert(e) if(!(e)){NyLPC_assertHook(NULL,-1);};
\r
79 #define NyLPC_Assert(e) if(!(e)){NyLPC_assertHook(NULL,-1);};
\r
85 #define NyAR_DebugHook() {NyLPC_debugHook(__FILE__,__LINE__);};
\r
88 * Abortマクロです。プログラムを異常終了するときのエントリポイントになります。
\r
89 * デバック時/リリース時のどちらでも有効です。
\r
91 #define NyLPC_Abort() {NyLPC_abortHook(__FILE__,__LINE__);}; //もうだめ
\r
94 * Abortマクロです。eが偽の時に、異常終了します。
\r
95 * デバック時/リリース時のどちらでも有効です。
\r
99 #define NyLPC_AbortIfNot(e) if(!(e)){NyLPC_abortHook(__FILE__,__LINE__);};
\r
102 * 警告表示用のマクロです。デバックに使います。
\r
105 #define NyLPC_Warning() {NyLPC_debugHook(__FILE__,__LINE__);};
\r
108 * 警告表示用のマクロです。eが偽の時に、警告を出します。
\r
113 #define NyLPC_WarningIfNot(e) if(!(e)){NyLPC_debugHook(__FILE__,__LINE__);};
\r
116 * トレースマクロです。デバックに使います。
\r
117 * 内部変数に、最後にコールされたファイル名と、行番号を保存します。
\r
120 #define NyLPC_Trace() {NyLPC_debugHook(__FILE__,__LINE__);};
\r
129 void NyLPC_assertHook(const char* m,int l);
\r
137 void NyLPC_abortHook(const char* m,int l);
\r
145 void NyLPC_debugHook(const char* m,int l);
\r
149 * アサートを検出した回数を保存します。
\r
151 extern unsigned int NyLPC_assert_counter;
\r
154 * アサートを検出した回数を保存します。
\r
156 extern unsigned int NyLPC_abort_counter;
\r
159 * アサートを検出した回数を保存します。
\r
161 extern unsigned int NyLPC_debug_counter;
\r
164 * GOTO方式のエラーハンドラを記述するためのマクロです。
\r
168 #if NyLPC_ARCH==NyLPC_ARCH_FREERTOS
\r
169 #define NyLPC_OnErrorGoto(l) goto l
\r
170 #elif NyLPC_ARCH==NyLPC_ARCH_WIN32
\r
171 #define NyLPC_OnErrorGoto(l) printf("%s:%d\n",__FILE__,__LINE__); goto l;
\r
173 #error Bad NyLPC_ARCH!
\r
178 /**********************************************************************
\r
182 **********************************************************************/
\r
187 #if NyLPC_ARCH==NyLPC_ARCH_FREERTOS
\r
188 typedef portBASE_TYPE NyLPC_TBool;
\r
189 #elif NyLPC_ARCH==NyLPC_ARCH_WIN32
\r
190 typedef int NyLPC_TBool;
\r
192 #error Bad NyLPC_ARCH!
\r
195 * TRUEを表します。この値は、ifで評価したときに真を返すことを保障します。
\r
197 #define NyLPC_TBool_TRUE (0==0)
\r
199 * FALSEを表します。この値は、ifで評価したときに偽を返すことを保障します。
\r
201 #define NyLPC_TBool_FALSE (0!=0)
\r
206 typedef char NyLPC_TChar;
\r
210 typedef char NyLPC_TInt8;
\r
214 typedef short NyLPC_TInt16;
\r
218 typedef long NyLPC_TInt32;
\r
220 //----------------------------------------------------------------------
\r
222 //----------------------------------------------------------------------
\r
227 typedef unsigned char NyLPC_TUInt8;
\r
230 * ビット操作関数です。bfのビット番号bに、1をセットします。
\r
236 #define NyLPC_TUInt8_setBit(bf,b) NyLPC_TUInt32_setBit(bf,b)
\r
238 * ビット操作関数です。bfのビット番号bに、0をセットします。
\r
244 #define NyLPC_TUInt8_unsetBit(bf,b) NyLPC_TUInt32_unsetBit(bf,b)
\r
246 * ビット判定関数です。bfのビット番号bが1であるかを確認します。
\r
254 #define NyLPC_TUInt8_isBitOn(bf,b) NyLPC_TUInt32_isBitOn(bf,b)
\r
259 #define NyLPC_TUInt8_TRUE NyLPC_TBool_TRUE
\r
263 #define NyLPC_TUInt8_FALSE NyLPC_TBool_FALSE
\r
265 * 8bit長のFALSEをNyLPC_TBoolへ変換します。
\r
271 #define NyLPC_TUInt8_castto_TBool(a) ((a)?NyLPC_TBool_TRUE:NyLPC_TBool_FALSE)
\r
273 //----------------------------------------------------------------------
\r
275 //----------------------------------------------------------------------
\r
280 typedef unsigned short NyLPC_TUInt16;
\r
282 * ビット操作関数です。bfのビット番号bに、1をセットします。
\r
288 #define NyLPC_TUInt16_setBit(bf,b) NyLPC_TUInt32_setBit(bf,b)
\r
290 * ビット操作関数です。bfのビット番号bに、0をセットします。
\r
296 #define NyLPC_TUInt16_unsetBit(bf,b) NyLPC_TUInt32_unsetBit(bf,b)
\r
298 * ビット判定関数です。bfのビット番号bが1であるかを確認します。
\r
306 #define NyLPC_TUInt16_isBitOn(bf,b) NyLPC_TUInt32_isBitOn(bf,b)
\r
313 * 入れ替えた16ビット値を返します。
\r
316 #define NyLPC_TUInt16_BSWAP(n) (((((NyLPC_TUInt16)(n))<< 8)&0xff00)|((((NyLPC_TUInt16)(n))>> 8)&0x00ff))
\r
322 * NyLPC_TUInt16_BSWAPとの違いは、関数であることです。
\r
326 * 入れ替えた16ビット値を返します。
\r
328 NyLPC_TUInt16 NyLPC_TUInt16_bswap(NyLPC_TUInt16 n);
\r
332 #define NyLPC_TUInt16_TRUE NyLPC_TBool_TRUE
\r
336 #define NyLPC_TUInt16_FALSE NyLPC_TBool_FALSE
\r
338 * 16bit長のFALSEをNyLPC_TBoolへ変換します。
\r
344 #define NyLPC_TUInt16_castto_TBool(a) ((a)?NyLPC_TBool_TRUE:NyLPC_TBool_FALSE)
\r
346 //----------------------------------------------------------------------
\r
351 typedef unsigned long NyLPC_TUInt32;
\r
353 * ビット操作関数です。bfのビット番号bに、1をセットします。
\r
359 #define NyLPC_TUInt32_setBit(bf,b) bf=(bf|b)
\r
361 * ビット操作関数です。bfのビット番号bに、0をセットします。
\r
367 #define NyLPC_TUInt32_unsetBit(bf,b) bf=(bf&(~b))
\r
369 * ビット判定関数です。bfのビット番号bが1であるかを確認します。
\r
377 #define NyLPC_TUInt32_isBitOn(bf,b) ((bf&b)==(b))
\r
384 * 入れ替えた32ビット値を返します。
\r
387 #define NyLPC_TUInt32_BSWAP(n) (((((NyLPC_TUInt32)(n))<<24)&0xff000000)|((((NyLPC_TUInt32)(n))<< 8)&0x00ff0000)|((((NyLPC_TUInt32)(n))>> 8)&0x0000ff00)|((((NyLPC_TUInt32)(n))>>24)&0x000000ff))
\r
390 * NyLPC_TUInt32_BSWAPとの違いは、関数であることです。
\r
394 * 入れ替えた32ビット値を返します。
\r
396 NyLPC_TUInt32 NyLPC_TUInt32_bswap(NyLPC_TUInt32 n);
\r
401 #define NyLPC_TUInt32_TRUE NyLPC_TBool_TRUE
\r
405 #define NyLPC_TUInt32_FALSE NyLPC_TBool_FALSE
\r
407 * 32bit長のFALSEをNyLPC_TBoolへ変換します。
\r
413 #define NyLPC_TUInt32_castto_TBool(a) ((a)?NyLPC_TBool_TRUE:NyLPC_TBool_FALSE)
\r
419 /*********************************************************************************
\r
421 *********************************************************************************/
\r
424 #include "../NyLPC_cRingBuffer.h"
\r
425 #include "../NyLPC_cPtrTbl.h"
\r
426 #include "../NyLPC_cFifoBuffer.h"
\r
427 #include "../NyLPC_cPtrStream.h"
\r
428 #include "../NyLPC_cStr.h"
\r
431 #if NyLPC_ARCH==NyLPC_ARCH_FREERTOS
\r
432 #include "../NyLPC_cStopwatch.h"
\r
433 #include "../NyLPC_cMutex.h"
\r
434 #include "../NyLPC_cThread.h"
\r