第2世代 Xiaoの実装 itron.hの実装

作成日:2020/07/13
最終更新日:2020/07/13

第2世代 Xiaoの実装 itron.hの実装

作成日:2020/07/13
最終更新日:2020/07/13

概要

第2世代のXiaoの実装を進めます。μITRON4.0仕様 Ver.4.03.03によるとC言語のヘッダファイルとして規定しなければならないファイルとして、ITRON仕様共通定義を記載したitron.h、カーネル仕様で規程されるサービスコールやデータ型等を記載したkernel.h、カーネルのコンフィギュレータが生成する自動割付結果を記載するkernel_id.hがあります[1]。今回はitron.hを実装します。

実装

itron.hを実装する前に各種型宣言をするためのマクロをdefines.hに追加します。また、itron.hに移行する必要のある定義を削除します。

ソース1. defines.h
/**
  defines.h
  
  Copyright (c) 2013-2020 Akihisa ONODA
  
  This software is released under the MIT License.
  http://opensource.org/licenses/mit-license.php
*/

#ifndef __DEFINES_H__
#define __DEFINES_H__

#ifdef __INT8_TYPE__
typedef __INT8_TYPE__	int8_t;
#endif
#ifdef __INT16_TYPE__
typedef __INT16_TYPE__	int16_t;
#endif
#ifdef __INT32_TYPE__
typedef __INT32_TYPE__	int32_t;
#endif
#ifdef __INT64_TYPE__
typedef __INT64_TYPE__	int64_t;
#endif
#ifdef __UINT8_TYPE__
typedef __UINT8_TYPE__	uint8_t;
#endif
#ifdef __UINT16_TYPE__
typedef __UINT16_TYPE__	uint16_t;
#endif
#ifdef __UINT32_TYPE__
typedef __UINT32_TYPE__	uint32_t;
#endif
#ifdef __UINT64_TYPE__
typedef __UINT64_TYPE__	uint64_t;
#endif

typedef signed int	int_t;
typedef unsigned int	uint_t;
typedef int_t		bool_t;
typedef signed long	intptr_t;
typedef unsigned long	uintptr_t;

#define SYSMEMREMAP		((volatile unsigned long *)0x40048000)
#define SYSAHBCLKCTRL		((volatile unsigned long *)0x40048080)

#define AHB_IOCON		(1 << 16)

#endif /* __DEFINES_H__ */

itron.hに規定する型についてサイズが決まっていないものに関してはArm Cortex-M0で動作することを鑑みてとりあえず32bitになるように規定しました。今後実装上で不都合が出たら修正していきます。

ソース2. itron.h
/**
  itron.h
  
  Copyright (c) 2013-2020 Akihisa ONODA
  
  This software is released under the MIT License.
  http://opensource.org/licenses/mit-license.php
*/

#ifndef __ITRON_H__
#define __ITRON_H__

#include "defines.h"

/*
 * 一般定義
 */
#define NULL			(0)
#define true			(1)
#define false			(0)
#define TRUE			true
#define FALSE			false

/*
 * ITRON仕様共通データ型
 */
typedef int8_t			B;
typedef int16_t			H;
typedef int32_t			W;
typedef int64_t			D;
typedef uint8_t			UB;
typedef uint16_t		UH;
typedef uint32_t		UW;
typedef uint64_t		UD;
typedef uint8_t			VB;
typedef uint16_t		VH;
typedef uint32_t		VW;
typedef uint64_t		VD;
typedef	void			*VP;
typedef	void			(*FP)();
typedef int_t			INT;
typedef uint_t			UINT;
typedef bool_t			BOOL;
typedef int32_t			FN;		/* 符号付き16bit以上 */
typedef int_t			ER;		/* 符号付き 8bit以上 */
typedef int_t			ID;		/* 符号付き16bit以上 */
typedef uint32_t		ATR;		/* 符号無し 8bit以上 */
typedef uint32_t		STAT;		/* 符号無し16bit以上 */
typedef uint32_t		MODE;		/* 符号無し 8bit以上 */
typedef int32_t			PRI;		/* 符号付き16bit以上 */
typedef uintptr_t		SIZE;		/* 符号無しポインタと同じ */
typedef int32_t			TMO;		/* 符号付き16bit以上 */
typedef uint32_t		RELTIM;		/* 符号無し16bit以上 */
typedef uint32_t		SYSTIM;		/* 符号無し16bit以上 */
typedef	intptr_t		VP_INT;
typedef int_t			ER_BOOL;
typedef int_t			ER_ID;
typedef int_t			ER_UINT;

/*
 * メインエラーコード
 */
#define E_OK			(0)
#define	E_SYS			(-5)		/* システムエラー */
#define	E_NOSPT			(-9)		/* 未サポート機能 */
#define	E_RSFN			(-10)		/* 予約機能コード */
#define	E_RSATR			(-11)		/* 予約属性 */
#define	E_PAR			(-17)		/* パラメータエラー */
#define	E_ID			(-18)		/* 不正ID番号 */
#define	E_CTX			(-25)		/* コンテキストエラー */
#define	E_MACV			(-26)		/* メモリアクセス違反 */
#define	E_OACV			(-27)		/* オブジェクトアクセス違反 */
#define	E_ILUSE			(-28)		/* サービスコール不正使用 */
#define	E_NOMEM			(-33)		/* メモリ不足 */
#define	E_NOID			(-34)		/* ID番号不足 */
#define	E_OBJ			(-41)		/* オブジェクト状態エラー */
#define	E_NOEXS			(-42)		/* オブジェクト未生成 */
#define	E_QOVR			(-43)		/* キューイングオーバーフロー */
#define	E_RLWAI			(-49)		/* 待ち状態の強制解除 */
#define	E_TMOUT			(-50)		/* ポーリング失敗またはタイムアウト */
#define	E_DLT			(-51)		/* 待ちオブジェクトの削除 */
#define	E_CLS			(-52)		/* 待ちオブジェクトの状態変化 */
#define	E_WBLK			(-57)		/* ノンブロッキング受付け */
#define	E_BOVR			(-58)		/* バッファオーバーフロー */

/*
 * オブジェクト属性
 */
#define TA_NULL			(0)

/*
 * タイムアウト指定
 */
#define TMO_POL			(0)
#define TMO_FEVR		(-1)
#define TMO_NBLK		(-2)

/*
 * ITRON仕様共通マクロ
 */
#define	ERCD(mercd, sercd)	(((sercd) << 8) | ((mercd) & 0xFF))
#define	MERCD(ercd)		(((ercd) & 0x80) == 0 ? ((ercd) & 0xFF) : ((ercd) | (~(0xFF))))
#define	SERCD(ercd)		((~((~(0)) >> 8)) | ((ercd) >> 8))

#endif /* __ITRON_H__ */

その他

GitHubのXiaoのリポジトリを第2世代のXiao開発用に整理し始めました。

参考文献

  1. 社団法人トロン協会, μITRON4.0仕様 Ver.4.03.03, 社団法人トロン協会, 1999-2008