Changeset 95 for ssp_qb_r5f100le_cs/trunk/kernel
- Timestamp:
- Jun 2, 2015, 3:39:53 PM (9 years ago)
- Location:
- ssp_qb_r5f100le_cs/trunk/kernel
- Files:
-
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
ssp_qb_r5f100le_cs/trunk/kernel/Makefile.kernel
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 12 12 # Nagoya Municipal Industrial Research Institute, JAPAN 13 13 # 14 # ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 15 # Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 16 # ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 17 # (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 18 # \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 19 # XR[hÉÜÜêÄ¢é±ÆD 20 # (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 21 # pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 22 gip 23 # Ò}j 24 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 25 # ̳ÛØKèðfÚ·é±ÆD 26 # (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 27 # pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 28 # ÆD 29 # (a) Äzzɺ¤hL 30 gipÒ}j 31 AÈÇjÉCãLÌ 32 # ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 33 # (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 34 # ñ·é±ÆD 35 # (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 36 # Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 37 # ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 38 # RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 39 # ÆÓ·é±ÆD 14 # 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 15 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 16 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 17 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 18 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 19 # スコード中に含まれていること. 20 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 21 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 22 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 23 # の無保証規定を掲載すること. 24 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 25 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 26 # と. 27 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 28 # 作権表示,この利用条件および下記の無保証規定を掲載すること. 29 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 30 # 報告すること. 31 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 32 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 33 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 34 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 35 # 免責すること. 40 36 # 41 # {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨42 # æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI43 # ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF44 # AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»45 # ÌÓCðíÈ¢D37 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 38 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 39 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 40 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 41 # の責任を負わない. 46 42 # 47 43 48 44 # 49 # J[lÌt@C\¬Ìè`45 # カーネルのファイル構成の定義 50 46 # 51 47 52 48 # 53 # 1 ÂÌ\[Xt@C©ç¡ÌIuWFNgt@C𶬷éæ¤Éì54 # ¬³ê½\[Xt@CÌXg49 # 1つのソースファイルから複数のオブジェクトファイルを生成するように作 50 # 成されたソースファイルのリスト 55 51 # 56 52 KERNEL_FCSRCS = startup.c task.c task_manage.c \ … … 60 56 61 57 # 62 # e\[Xt@C©ç¶¬³êéIuWFNgt@CÌXg58 # 各ソースファイルから生成されるオブジェクトファイルのリスト 63 59 # 64 60 startup = sta_ker.o ext_ker.o … … 89 85 90 86 # 91 # ¶¬³êéIuWFNgt@CÌ˶ÖWÌè`87 # 生成されるオブジェクトファイルの依存関係の定義 92 88 # 93 89 $(startup) $(startup:.o=.s) $(startup:.o=.d): startup.c -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/allfunc.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 9 9 * Copyright (C) 2011-2012 by Meika Sugimoto 10 10 * 11 * ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 13 * ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 16 * R[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 18 * Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gipÒ} 20 * j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 22 * ØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 24 * Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 25 * (a) Äzzɺ¤hL 26 gipÒ}j 27 AÈÇjÉCãLÌì 28 * \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 29 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 30 * ·é±ÆD 31 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 32 * ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 33 * {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 34 * ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 11 * 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ 12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・ 13 * 再配布(以下,利用と呼ぶ)することを無償で許諾する. 14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権 15 * 表示,この利用条件および下記の無保証規定が,そのままの形でソース 16 * コード中に含まれていること. 17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用 18 * できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ 19 * ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保 20 * 証規定を掲載すること. 21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用 22 * できない形で再配布する場合には,次のいずれかの条件を満たすこと. 23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作 24 * 権表示,この利用条件および下記の無保証規定を掲載すること. 25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報 26 * 告すること. 27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害 28 * からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また, 29 * 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ 30 * く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 35 31 * 36 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ37 * ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη38 * éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp39 * Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð40 * íÈ¢D32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 33 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 34 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 35 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負 36 * わない. 41 37 * 42 38 */ 43 39 44 40 /* 45 * ·×ÄÌÖðRpC·é½ßÌè`41 * すべての関数をコンパイルするための定義 46 42 */ 47 43 -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/check.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 11 11 * Copyright (C) 2011 by Meika Sugimoto 12 12 * 13 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 14 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 15 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 16 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 17 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 18 * XR[hÉÜÜêÄ¢é±ÆD 19 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 20 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 21 gip 22 * Ò}j 23 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 24 * ̳ÛØKèðfÚ·é±ÆD 25 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 26 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 27 * ÆD 28 * (a) Äzzɺ¤hL 29 gipÒ}j 30 AÈÇjÉCãLÌ 31 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 32 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 33 * ñ·é±ÆD 34 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 35 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 36 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 37 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 38 * ÆÓ·é±ÆD 39 * 40 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨ 41 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI 42 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF 43 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC» 44 * ÌÓCðíÈ¢D 13 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 14 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 15 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 17 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 18 * スコード中に含まれていること. 19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 20 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 21 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 22 * の無保証規定を掲載すること. 23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 24 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 25 * と. 26 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 27 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 28 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 29 * 報告すること. 30 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 31 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 32 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 33 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 34 * 免責すること. 35 * 36 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 37 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 38 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 39 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 40 * の責任を負わない. 45 41 * 46 42 * @(#) $Id: exception.h 648 2007-12-15 09:35:35Z hiro $ … … 56 52 * Graduate School of Information Science, Nagoya Univ., JAPAN 57 53 * 58 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 59 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 60 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 61 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 62 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 63 * XR[hÉÜÜêÄ¢é±ÆD 64 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 65 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 66 gip 67 * Ò}j 68 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 69 * ̳ÛØKèðfÚ·é±ÆD 70 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 71 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 72 * ÆD 73 * (a) Äzzɺ¤hL 74 gipÒ}j 75 AÈÇjÉCãLÌ 76 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 77 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 78 * ñ·é±ÆD 79 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 80 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 81 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 82 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 83 * ÆÓ·é±ÆD 84 * 85 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨ 86 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI 87 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF 88 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC» 89 * ÌÓCðíÈ¢D 54 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 55 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 56 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 57 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 58 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 59 * スコード中に含まれていること. 60 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 61 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 62 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 63 * の無保証規定を掲載すること. 64 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 65 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 66 * と. 67 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 68 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 69 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 70 * 報告すること. 71 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 72 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 73 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 74 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 75 * 免責すること. 76 * 77 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 78 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 79 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 80 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 81 * の責任を負わない. 90 82 * 91 83 * @(#) $Id: check.h 1139 2008-06-19 07:03:34Z ertl-hiro $ … … 93 85 94 86 /* 95 * G[`FbNp}N87 * エラーチェック用マクロ 96 88 */ 97 89 … … 100 92 101 93 /* 102 * ^XNDæxÌÍÍÌ»è94 * タスク優先度の範囲の判定 103 95 */ 104 96 #define VALID_TPRI(tpri) (TMIN_TPRI <= (tpri) && (tpri) <= TMAX_TPRI) 105 97 106 98 /* 107 * ÝÔÌ`FbNiE_PARj99 * 割込み番号のチェック(E_PAR) 108 100 */ 109 101 #define CHECK_INTNO_DISINT(intno) { \ … … 115 107 116 108 /* 117 * »Ì¼Ìp[^G[Ì`FbNiE_PARj109 * その他のパラメータエラーのチェック(E_PAR) 118 110 */ 119 111 #define CHECK_PAR(exp) { \ … … 125 117 126 118 /* 127 * IuWFNgIDÌÍÍÌ»è119 * オブジェクトIDの範囲の判定 128 120 */ 129 121 #define VALID_TSKID(tskid) \ … … 139 131 140 132 /* 141 * IuWFNgIDÌ`FbNiE_IDj133 * オブジェクトIDのチェック(E_ID) 142 134 */ 143 135 #define CHECK_TSKID(tskid) { \ … … 185 177 186 178 /* 187 * ÄoµReLXgÌ`FbNiE_CTXj179 * 呼出しコンテキストのチェック(E_CTX) 188 180 */ 189 181 #define CHECK_TSKCTX() { \ … … 202 194 203 195 /* 204 * ÄoµReLXgÆCPUbNóÔÌ`FbNiE_CTXj196 * 呼出しコンテキストとCPUロック状態のチェック(E_CTX) 205 197 */ 206 198 #define CHECK_TSKCTX_UNL() { \ … … 219 211 220 212 /* 221 * »Ì¼ÌReLXgG[Ì`FbNiE_CTXj213 * その他のコンテキストエラーのチェック(E_CTX) 222 214 */ 223 215 #define CHECK_CTX(exp) { \ -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/exception.c
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 11 11 * Copyright (C) 2010 by Meika Sugimoto 12 12 * 13 * ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 14 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 15 * ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 16 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 17 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 18 * R[hÉÜÜêÄ¢é±ÆD 19 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 20 * Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 21 gipÒ} 22 * j 23 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 24 * ØKèðfÚ·é±ÆD 25 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 26 * Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 27 * (a) Äzzɺ¤hL 28 gipÒ}j 29 AÈÇjÉCãLÌì 30 * \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 31 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 32 * ·é±ÆD 33 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 34 * ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 35 * {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 36 * ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 13 * 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ 14 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・ 15 * 再配布(以下,利用と呼ぶ)することを無償で許諾する. 16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権 17 * 表示,この利用条件および下記の無保証規定が,そのままの形でソース 18 * コード中に含まれていること. 19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用 20 * できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ 21 * ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保 22 * 証規定を掲載すること. 23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用 24 * できない形で再配布する場合には,次のいずれかの条件を満たすこと. 25 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作 26 * 権表示,この利用条件および下記の無保証規定を掲載すること. 27 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報 28 * 告すること. 29 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害 30 * からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また, 31 * 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ 32 * く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ39 * ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη40 * éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp41 * Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð42 * íÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 35 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 36 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 37 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負 38 * わない. 43 39 * 44 40 */ 45 41 46 42 /* 47 * CPU áOÇ@\43 * CPU例外管理機能 48 44 */ 49 45 … … 52 48 53 49 /* 54 * CPU áOnhÇ@\Ìú»50 * CPU例外ハンドラ管理機能の初期化 55 51 */ 56 52 -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/exception.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 11 11 * Copyright (C) 2011 by Meika Sugimoto 12 12 * 13 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 14 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 15 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 16 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 17 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 18 * XR[hÉÜÜêÄ¢é±ÆD 19 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 20 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 21 gip 22 * Ò}j 23 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 24 * ̳ÛØKèðfÚ·é±ÆD 25 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 26 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 27 * ÆD 28 * (a) Äzzɺ¤hL 29 gipÒ}j 30 AÈÇjÉCãLÌ 31 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 32 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 33 * ñ·é±ÆD 34 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 35 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 36 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 37 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 38 * ÆÓ·é±ÆD 13 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 14 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 15 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 17 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 18 * スコード中に含まれていること. 19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 20 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 21 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 22 * の無保証規定を掲載すること. 23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 24 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 25 * と. 26 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 27 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 28 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 29 * 報告すること. 30 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 31 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 32 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 33 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 34 * 免責すること. 39 35 * 40 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨41 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI42 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF43 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»44 * ÌÓCðíÈ¢D36 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 37 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 38 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 39 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 40 * の責任を負わない. 45 41 * 46 42 */ 47 43 48 44 /* 49 * CPU áOÇ@\45 * CPU例外管理機能 50 46 */ 51 47 … … 55 51 #ifndef OMIT_INITIALIZE_EXCEPTION 56 52 57 extern const EXCNO excinib_excno[]; /* CPU áOnhÔ*/58 extern const ATR excinib_excatr[]; /* CPU áOnh®«*/59 extern const FP excinib_entry[]; /* CPU áOnhÌoüûÌÔn*/53 extern const EXCNO excinib_excno[]; /* CPU例外ハンドラ番号 */ 54 extern const ATR excinib_excatr[]; /* CPU例外ハンドラ属性 */ 55 extern const FP excinib_entry[]; /* CPU例外ハンドラの出入口処理の番地 */ 60 56 61 57 /* 62 * CPU áOnhÔÌikernel_cfg.cj58 * CPU例外ハンドラ番号の数(kernel_cfg.c) 63 59 */ 64 60 extern const uint_t tnum_excno; … … 68 64 69 65 /* 70 * CPU áOnhÇ@\Ìú»66 * CPU例外ハンドラ管理機能の初期化 71 67 */ 72 68 extern void -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/interrupt.c
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 11 11 * Copyright (C) 2010-2011 by Meika Sugimoto 12 12 * 13 * ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 14 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 15 * ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 16 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 17 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 18 * R[hÉÜÜêÄ¢é±ÆD 19 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 20 * Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 21 gipÒ} 22 * j 23 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 24 * ØKèðfÚ·é±ÆD 25 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 26 * Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 27 * (a) Äzzɺ¤hL 28 gipÒ}j 29 AÈÇjÉCãLÌì 30 * \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 31 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 32 * ·é±ÆD 33 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 34 * ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 35 * {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 36 * ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 13 * 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ 14 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・ 15 * 再配布(以下,利用と呼ぶ)することを無償で許諾する. 16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権 17 * 表示,この利用条件および下記の無保証規定が,そのままの形でソース 18 * コード中に含まれていること. 19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用 20 * できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ 21 * ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保 22 * 証規定を掲載すること. 23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用 24 * できない形で再配布する場合には,次のいずれかの条件を満たすこと. 25 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作 26 * 権表示,この利用条件および下記の無保証規定を掲載すること. 27 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報 28 * 告すること. 29 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害 30 * からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また, 31 * 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ 32 * く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ39 * ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη40 * éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp41 * Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð42 * íÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 35 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 36 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 37 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負 38 * わない. 43 39 * 44 40 */ 45 41 46 42 /* 47 * ÝÇ@\43 * 割込み管理機能 48 44 */ 49 45 … … 55 51 56 52 /* 57 * ÝÇ@\Ìú»53 * 割込み管理機能の初期化 58 54 */ 59 55 #ifdef TOPPERS_intini … … 77 73 78 74 /* 79 * ÝÌÖ~75 * 割込みの禁止 80 76 */ 81 77 #ifdef TOPPERS_dis_int … … 117 113 118 114 /* 119 * ÝÌÂ115 * 割込みの許可 120 116 */ 121 117 #ifdef TOPPERS_ena_int -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/interrupt.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 10 10 * Nagoya Municipal Industrial Research Institute, JAPAN 11 11 * 12 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 13 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 14 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 15 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 16 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 17 * XR[hÉÜÜêÄ¢é±ÆD 18 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 19 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 20 gip 21 * Ò}j 22 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 23 * ̳ÛØKèðfÚ·é±ÆD 24 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 25 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 26 * ÆD 27 * (a) Äzzɺ¤hL 28 gipÒ}j 29 AÈÇjÉCãLÌ 30 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 31 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 32 * ñ·é±ÆD 33 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 34 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 35 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 36 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 37 * ÆÓ·é±ÆD 12 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 13 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 14 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 15 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 16 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 17 * スコード中に含まれていること. 18 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 19 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 20 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 21 * の無保証規定を掲載すること. 22 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 23 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 24 * と. 25 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 26 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 27 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 28 * 報告すること. 29 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 30 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 31 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 32 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 33 * 免責すること. 38 34 * 39 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨40 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI41 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF42 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»43 * ÌÓCðíÈ¢D35 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 36 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 37 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 38 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 39 * の責任を負わない. 44 40 * 45 41 */ 46 42 47 43 /* 48 * ÝÇ@\44 * 割込み管理機能 49 45 */ 50 46 … … 55 51 56 52 /* 57 * Ýnhú»ubNÌGAikernel_cfg.cj53 * 割込みハンドラ初期化ブロックのエリア(kernel_cfg.c) 58 54 */ 59 extern const INHNO inhinib_inhno[]; /* ÝnhÔ*/60 extern const ATR inhinib_inhatr[]; /* Ýnh®«*/61 extern const FP inhinib_entry[]; /* ÝnhÌoüûÌÔn*/55 extern const INHNO inhinib_inhno[]; /* 割込みハンドラ番号 */ 56 extern const ATR inhinib_inhatr[]; /* 割込みハンドラ属性 */ 57 extern const FP inhinib_entry[]; /* 割込みハンドラの出入口処理の番地 */ 62 58 63 59 /* 64 * ÝvCú»ubNÌGAikernel_cfg.cj60 * 割込み要求ライン初期化ブロックのエリア(kernel_cfg.c) 65 61 */ 66 extern const INTNO intinib_intno[]; /* ÝÔ*/67 extern const ATR intinib_intatr[]; /* Ý®«*/68 extern const PRI intinib_intpri[]; /* ÝDæx*/62 extern const INTNO intinib_intno[]; /* 割込み番号 */ 63 extern const ATR intinib_intatr[]; /* 割込み属性 */ 64 extern const PRI intinib_intpri[]; /* 割込み優先度 */ 69 65 70 66 /* 71 * ÝnhÔÌikernel_cfg.cj67 * 割込みハンドラ番号の数(kernel_cfg.c) 72 68 */ 73 69 extern const uint_t tnum_inhno; 74 70 75 71 /* 76 * ÝvCÌikernel_cfg.cj72 * 割込み要求ラインの数(kernel_cfg.c) 77 73 */ 78 74 extern const uint_t tnum_intno; … … 82 78 83 79 /* 84 * ÝÇ@\Ìú»80 * 割込み管理機能の初期化 85 81 */ 86 82 extern void -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/kernel.tf
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 10 10 $ Nagoya Municipal Industrial Research Institute, JAPAN 11 11 $ 12 $ ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 13 $ Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 14 $ ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 15 $ (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 16 $ \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 17 $ R[hÉÜÜêÄ¢é±ÆD 18 $ (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 19 $ Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 20 gipÒ} 21 $ j 22 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 23 $ ØKèðfÚ·é±ÆD 24 $ (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 25 $ Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 26 $ (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌì 29 $ \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 $ (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 31 $ ·é±ÆD 32 $ (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 33 $ ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 34 $ {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 35 $ ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 36 $ 37 $ {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ 38 $ ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη 39 $ éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp 40 $ Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð 41 $ íÈ¢D 12 $ 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ 13 $ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・ 14 $ 再配布(以下,利用と呼ぶ)することを無償で許諾する. 15 $ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権 16 $ 表示,この利用条件および下記の無保証規定が,そのままの形でソース 17 $ コード中に含まれていること. 18 $ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用 19 $ できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ 20 $ ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保 21 $ 証規定を掲載すること. 22 $ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用 23 $ できない形で再配布する場合には,次のいずれかの条件を満たすこと. 24 $ (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作 25 $ 権表示,この利用条件および下記の無保証規定を掲載すること. 26 $ (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報 27 $ 告すること. 28 $ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害 29 $ からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また, 30 $ 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ 31 $ く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 32 $ 33 $ 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 34 $ びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 35 $ る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 36 $ により直接的または間接的に生じたいかなる損害に関しても,その責任を負 37 $ わない. 42 38 $ 43 39 $ ====================================================================== 44 40 45 $ OoÍ46 $ wèµ½¾¯sªÉ^uð¯Ä\¦·éD47 $ R[hyÑoÍÌÂÇ«ð°é½ßÉg¤D48 $ ø : ARGV[1] : sªÉ}ü·é^uÌ49 $ Ôl : ó¶ñ50 $ Ó : RESULTðìµÄ¢é½ßC¼ÌÖÌoÍðÛ¶·éOÉÄÑo·Æ㫳êéD41 $ ログ出力 42 $ 指定した数だけ行頭にタブをつけて表示する. 43 $ コード及び出力の可読性を挙げるために使う. 44 $ 引数 : ARGV[1] : 行頭に挿入するタブの数 45 $ 返値 : 空文字列 46 $ 注意 : RESULTを操作しているため,他の関数の出力を保存する前に呼び出すと上書きされる. 51 47 $ 52 48 $FUNCTION LOG$ … … 56 52 57 53 $ ===================================================================== 58 $ OÌ`FbN54 $ 処理前のチェック 59 55 $ ===================================================================== 60 56 61 $ ^XNª1ÂÈã¶Ý·é±ÆÌ`FbN57 $ タスクが1個以上存在することのチェック 62 58 $IF !LENGTH(TSK.ID_LIST)$ 63 59 $ERROR$$FORMAT("no task is registered")$$END$ … … 65 61 66 62 $ ===================================================================== 67 $ kernel_cfg.h ̶¬63 $ kernel_cfg.h の生成 68 64 $ ===================================================================== 69 65 … … 81 77 $NL$ 82 78 83 $ // ^XNIDðN®Dæx(tskapri)Ì¢É reallocate_tskapri ÖèÄC84 $ // è`ð kernel_cfg.h ÖoÍ·éD79 $ // タスクIDを起動優先度(tskapri)の高い順に reallocate_tskapri へ割り当て, 80 $ // 定義を kernel_cfg.h へ出力する. 85 81 $tsk_apriorder_list={}$ 86 82 $tsk_epri_list={}$ … … 91 87 #define $TSK.TSKID[id]$ $tsk_index$$NL$ 92 88 93 $ DEF_EPR Åè`³êĢȢ^XNÌÀsDæxªCN®DæxƯ¶ÉÈéæ¤É·éD89 $ DEF_EPR で定義されていないタスクの実行時優先度が,起動優先度と同じになるようにする. 94 90 $tsk_epri_list = APPEND(tsk_epri_list, ALT(TSK.EXEPRI[TSK.TSKID[id]], TSK.ATSKPRI[TSK.TSKID[id]]))$ 95 91 $tsk_index = tsk_index + 1$ … … 111 107 112 108 $ ===================================================================== 113 $ kernel_cfg.c ̶¬109 $ kernel_cfg.cの生成 114 110 $ ===================================================================== 115 111 … … 126 122 127 123 $ --------------------------------------------------------------------- 128 $ CN[hfBNeBui#includej124 $ インクルードディレクティブ(#include) 129 125 $ --------------------------------------------------------------------- 130 126 /*$NL$ … … 136 132 137 133 $ --------------------------------------------------------------------- 138 $ IuWFNgÌIDÔðÛ·éÏ134 $ オブジェクトのID番号を保持する変数 139 135 $ --------------------------------------------------------------------- 140 136 $IF USE_EXTERNAL_ID$ … … 161 157 162 158 $ --------------------------------------------------------------------- 163 $ g[XO}NÌftHgè`159 $ トレースログマクロのデフォルト定義 164 160 $ --------------------------------------------------------------------- 165 161 /*$NL$ … … 178 174 179 175 $ --------------------------------------------------------------------- 180 $ ^XNÉÖ·éoÍ 181 $ --------------------------------------------------------------------- 182 183 $ 184 $ ÀsDæxÌRtBM 185 [Vɬ÷µ½©Ç¤© 186 $ 187 $ DEF_EPR ÉG[ª¶µ½êC±ÌϪ0ÉÈéD 188 $ DEF_EPR ÉG[ª¶µ½©Ç¤©ð»fµÄ 189 $ ÁèÌÀsðubN·é½ßÉgp·éD 176 $ タスクに関する出力 177 $ --------------------------------------------------------------------- 178 179 $ 180 $ 実行時優先度のコンフィギュレーションに成功したかどうか 181 $ 182 $ DEF_EPR 処理中にエラーが発生した場合,この変数が0になる. 183 $ DEF_EPR 処理中にエラーが発生したかどうかを判断して 184 $ 特定処理の実行をブロックするために使用する. 190 185 $ 191 186 $configurated_defepr_successfully = 1$ … … 196 191 $NL$ 197 192 198 $ ^XNIDÔÌÅål193 $ タスクID番号の最大値 199 194 const ID _kernel_tmax_tskid = (TMIN_TSKID + TNUM_TSKID - 1);$NL$ 200 195 $NL$ 201 196 202 $ ready_primap Ìúl197 $ ready_primap の初期値 203 198 $init_rdypmap = 0$ 204 199 $tsk_index = 1$ 205 200 206 $ ^XN®«D201 $ タスク属性. 207 202 const ATR _kernel_tinib_tskatr[TNUM_TSKID] = { 208 203 $JOINEACH tskid tsk_apriorder_list ","$ 209 $ // TA_ACT , TA_RSTR Ü½Í TA_NULL Å éiE_RSATRj204 $ // TA_ACT , TA_RSTR または TA_NULL である(E_RSATR) 210 205 $IF (TSK.TSKATR[tskid] & ~(TA_ACT | TA_RSTR | ALT(TARGET_TSKATR,0))) != 0$ 211 206 $ERROR TSK.TEXT_LINE[tskid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "tskatr", TSK.TSKATR[tskid], tskid, "CRE_TSK")$$END$ … … 223 218 const uint_t$TAB$_kernel_init_rdypmap = $init_rdypmap$U;$NL$ 224 219 225 $ g£îñ(exinf)D G[ÍRpCܽÍAvÌeXgÅo·é½ßC±±Å͵ȢD220 $ 拡張情報(exinf). エラーはコンパイル時またはアプリのテストで検出するため,ここではしない. 226 221 const intptr_t _kernel_tinib_exinf[TNUM_TSKID] = { 227 222 $JOINEACH tskid tsk_apriorder_list ","$ … … 230 225 };$NL$ 231 226 232 $ N®Ôn(task)DG[ÍRpCܽÍAvÌeXgÅo·é½ßC±±Å͵ȢD227 $ 起動番地(task).エラーはコンパイル時またはアプリのテストで検出するため,ここではしない. 233 228 const TASK _kernel_tinib_task[TNUM_TSKID] = { 234 229 $JOINEACH tskid tsk_apriorder_list ","$ … … 237 232 };$NL$ 238 233 239 $ N®Dæx(atskpri)D234 $ 起動優先度(atskpri). 240 235 $FOREACH tskid tsk_apriorder_list$ 241 $ // atskpri Í TMIN_TPRI ÈãCTMAX_TPRI ȺŠéDiE_PARj236 $ // atskpri は TMIN_TPRI 以上,TMAX_TPRI 以下である.(E_PAR) 242 237 $IF !(TMIN_TPRI <= TSK.ATSKPRI[tskid] && TSK.ATSKPRI[tskid] <= TMAX_TPRI)$ 243 238 $ERROR TSK.TEXT_LINE[tskid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "atskpri", TSK.ATSKPRI[tskid], tskid, "CRE_TSK")$$END$ 244 239 $END$ 245 240 246 $ // atskpri Íd¡ªÈ¢DiE_PARj241 $ // atskpri は重複がない.(E_PAR) 247 242 $FOREACH tskid2 tsk_apriorder_list$ 248 243 $IF tskid != tskid2 && TSK.ATSKPRI[tskid] == TSK.ATSKPRI[tskid2] $ … … 252 247 $END$ 253 248 254 $ ÀsDæx(exepri)D249 $ 実行時優先度(exepri). 255 250 const uint_t _kernel_tinib_epriority[TNUM_TSKID] = { 256 251 $epri_allocated = 0$ … … 259 254 $epri = AT(tsk_epri_list, tsk_index)$ 260 255 261 $ // exepri Í TMIN_TPRI Èã©Â TMAX_TPRI ȺŠéD(E_PAR)256 $ // exepri は TMIN_TPRI 以上かつ TMAX_TPRI 以下である.(E_PAR) 262 257 $IF TMIN_TPRI > epri || TMAX_TPRI < epri$ 263 258 $configurated_defepr_successfully = 0$ … … 265 260 $END$ 266 261 267 $ // exepri Í atskpri ȺÌlðàÂ(DæxƵÄͯ¶©»êæè¢)D(E_ILUSE)262 $ // exepri は atskpri 以下の値をもつ(優先度としては同じかそれより高い).(E_ILUSE) 268 263 $IF epri <= TMAX_TPRI && epri > TSK.ATSKPRI[tskid]$ 269 264 $configurated_defepr_successfully = 0$ … … 271 266 $END$ 272 267 273 $ // exepri Ìà\»ðèµ reallocate_tskepri Éi[D268 $ // exepri の内部表現を決定し reallocate_tskepri に格納. 274 269 $FOREACH tskid2 tsk_apriorder_list $ 275 270 $IF epri_allocated != 1 && epri <= TSK.ATSKPRI[tskid2]$ … … 285 280 286 281 $ 287 $ // DæxèÄÊðoÍ282 $ // 優先度割り当て結果を出力 288 283 $ 289 284 /*$NL$ … … 295 290 296 291 $ 297 $ ^XNÌÅåX^bNgpÊÌvZ298 $ 299 300 $ X^bNTCYÉÖ·éG[`FbN292 $ タスクの最大スタック使用量の計算 293 $ 294 295 $ スタックサイズに関するエラーチェック 301 296 $FOREACH tskid TSK.ID_LIST$ 302 $ // stksz ª0©C^[Qbgè`ÌŬliTARGET_MIN_STKSZjæèଳ¢êiE_PARj297 $ // stkszが0か,ターゲット定義の最小値(TARGET_MIN_STKSZ)よりも小さい場合(E_PAR) 303 298 $IF TSK.STKSZ[tskid] == 0 || (LENGTH(TARGET_MIN_STKSZ) && 304 299 TSK.STKSZ[tskid] < TARGET_MIN_STKSZ)$ … … 308 303 309 304 $ 310 $ Öè`311 $ 312 $ 313 $ Ö1: N®DæxÌá¢É\[eBO·é½ßÌärÖ305 $ 関数定義 306 $ 307 $ 308 $ 関数1: 起動時優先度の低い順にソーティングするための比較関数 314 309 $ 315 310 $FUNCTION compare_tskapri_rev$ … … 318 313 319 314 $ 320 $ Ö2: wèµ½^XNÉηéX^bNgpÊÌÅåðvZ·éÖ321 $ ø : ARGV[1] : ^XNID(à\», N®DæxÌà\»Éµ¢)322 $ Ôl : RESULT : Y^XNÉηéX^bNgpÊÌÅålD323 $ ±ÌlÍCY^XNÌÀsJn©çI¹ÜÅÌÔÉ324 $ »Ì^XNÉηévGvgðl¶µÄX^bNgpÊð325 $ vZµ½êÉCÂ\«Ì égÝí¹ÌÅÅåÆÈélðÔ·D315 $ 関数2: 指定したタスクに対するスタック使用量の最大を計算する関数 316 $ 引数 : ARGV[1] : タスクID(内部表現, 起動時優先度の内部表現に等しい) 317 $ 返値 : RESULT : 当該タスクに対するスタック使用量の最大値. 318 $ この値は,当該タスクの実行開始から終了までの間に 319 $ そのタスクに対するプリエンプトを考慮してスタック使用量を 320 $ 計算した場合に,可能性のある組み合わせの中で最大となる値を返す. 326 321 $ 327 322 $nest_level = 0$ 328 323 $ 329 324 $FUNCTION calc_stksz$ 330 $ // ÏXg325 $ // 変数リスト 331 326 $nest_level = nest_level + 1$ 332 327 $arg[nest_level] = ARGV[1]$ 333 328 $calculated_stack_size = 0$ 334 329 335 $ // Jn330 $ // 処理開始 336 331 $SPC$* $LOG(nest_level-1)$Calculation start (Task ID = $arg[nest_level]$, StackSize[$arg[nest_level]$]=$TSK.STKSZ[arg[nest_level]]$)$NL$ 337 332 338 $ // wèµ½^XNID ÌX^bNvZª®¹µÄ¢é©333 $ // 指定したタスクID のスタック計算が完了しているか 339 334 $IF LENGTH(done[arg[nest_level]]) == 0$ 340 335 341 336 $SPC$* $LOG(nest_level)$Task list with higher priority than $arg[nest_level]$ = $higher_pri_tsklist[arg[nest_level]]$$NL$ 342 337 343 $ // (1) ®¹µÄ¢È¢ê344 $ // ÏÌú»338 $ // (1) 完了していない場合 339 $ // 変数の初期化 345 340 $max_stksz[arg[nest_level]] = 0$ 346 341 $higher_pri_maxstksz[arg[nest_level]] = 0$ 347 342 348 $ // Y^XNID ÌÀsDæxæè¢N®DæxðÂ^XNª¶Ý·éê343 $ // 当該タスクID の実行時優先度より高い起動優先度を持つタスクが存在する場合 349 344 $IF LENGTH(higher_pri_tsklist[arg[nest_level]]) > 0$ 350 $ // »ê¼êÌDæx^XNÉε345 $ // それぞれの高優先度タスクに対し 351 346 $FOREACH id higher_pri_tsklist[arg[nest_level]]$ 352 $ // ÄAÄo·éÆϪ㫳êé½ßCÛ¶µÄ¨347 $ // 再帰呼出すると変数が上書きされるため,保存しておく 353 348 $id_saved[nest_level] = id$ 354 $ // X^bNvZðÀs·é349 $ // スタック計算を実行する 355 350 $calculated_stack_size = calc_stksz(id_saved[nest_level])$ 356 $ // Û¶µ½ÏðA351 $ // 保存した変数を復帰 357 352 $id = id_saved[nest_level]$ 358 353 359 354 $IF higher_pri_maxstksz[arg[nest_level]] < calculated_stack_size$ 360 $ // L¯µÄ¨355 $ // 記憶しておく 361 356 $higher_pri_maxstksz[arg[nest_level]] = calculated_stack_size$ 362 357 $END$ … … 366 361 $SPC$* $LOG(nest_level)$higher_pri_maxstksz[$arg[nest_level]$] = $higher_pri_maxstksz[arg[nest_level]]$$NL$ 367 362 368 $ // Dæx^XNÌX^bNgpÊÉCY^XNÌgpÊðÁZ·é363 $ // 高優先度タスクのスタック使用量に,当該タスクの使用量を加算する 369 364 $max_stksz[arg[nest_level]] = higher_pri_maxstksz[arg[nest_level]] + TSK.STKSZ[arg[nest_level]]$ 370 365 371 366 $SPC$* $LOG(nest_level)$DONE(max_stksz[$arg[nest_level]$] = $max_stksz[arg[nest_level]]$)$NL$ 372 367 373 $ // Y^XNIDÉεÄÍvZðÏܹ½Æ¢¤L^ðcµÄ¨368 $ // 当該タスクIDに対しては計算を済ませたという記録を残しておく 374 369 $done[arg[nest_level]] = 1$ 375 370 376 371 $ELSE$ 377 $ // (2) vZªùÉ®¹µÄ¢éêCvZðXLbv·éD372 $ // (2) 計算が既に完了している場合,計算をスキップする. 378 373 379 374 $SPC$* $LOG(nest_level)$SKIP(max_stksz[$arg[nest_level]$] = $max_stksz[arg[nest_level]]$)$NL$ 380 375 $END$ 381 376 382 $ // ©ÏàèÌÅålðÔ·377 $ // 見積もりの最大値を返す 383 378 $RESULT = max_stksz[arg[nest_level]]$ 384 379 $nest_level = nest_level - 1$ … … 386 381 387 382 $ 388 $ Öè`±±ÜÅC±±©çX^bNvZÌJn389 $ 390 391 $ 392 $ ܸÍØ\¢Ìf[^\¢ì¬383 $ 関数定義ここまで,ここからスタック計算処理の開始 384 $ 385 386 $ 387 $ まずは木構造のデータ構造作成 393 388 $ 394 389 $FOREACH id LSORT(tsk_apriorder_list, "compare_tskapri_rev")$ 395 390 396 $ // e^XNÉC»ÌÀsDæxæèà¢N®DæxðÂ^XNÌXgðìéD397 $ // »êÍvGvg³êéÂ\«Ì é^XNÌêÆÈéD391 $ // 各タスク毎に,その実行時優先度よりも高い起動時優先度を持つタスクのリストを作る. 392 $ // それはプリエンプトされる可能性のあるタスクの一覧となる. 398 393 $FOREACH id2 LSORT(tsk_apriorder_list, "compare_tskapri_rev")$ 399 394 $IF reallocate_tskepri[id] > reallocate_tskapri[id2]$ … … 402 397 $END$ 403 398 404 $ // vGvg·éE³êéÖWð¦·Ø\¢Ìª(root)ÆÈé^XNÌTõD405 $ // ÎÛ^XN(id)ÌN®Dæx(reallocate_tskapri[id])æèá¢406 $ // ( lƵÄÍå«¢)N®DæxðàÂ^XNÌ higher_pri_tsklist ÉC407 $ // ÎÛ^XN(id) ªÜÜêȯêÎCªÆÈéD399 $ // プリエンプトする・される関係を示す木構造の根(root)となるタスクの探索. 400 $ // 対象タスク(id)の起動時優先度(reallocate_tskapri[id])より低い 401 $ // (値としては大きい)起動時優先度をもつタスクの higher_pri_tsklist に, 402 $ // 対象タスク(id) が含まれなければ,根となる. 408 403 $is_root = 1$ 409 404 $FOREACH id2 LSORT(tsk_apriorder_list, "compare_tskapri_rev")$ … … 414 409 $END$ 415 410 $END$ 416 $ // ª(root)ÆÈé^XNÈçÎCXgÖÇÁ411 $ // 根(root)となるタスクならば,リストへ追加 417 412 $IF is_root == 1$ 418 413 $root_apri = APPEND(root_apri, id)$ … … 421 416 422 417 $ 423 $ oÍJn418 $ 出力開始 424 419 $ 425 420 … … 428 423 $SPC$* $NL$ 429 424 430 $ // ªÆÈée^XNÉεÄC»ÌÅå^XNgpÊðvZµCXgÖÇÁ·éD425 $ // 根となる各タスクに対して,その最大タスク使用量を計算し,リストへ追加する. 431 426 $FOREACH root_id root_apri$ 432 427 $stksz_estimated = APPEND(stksz_estimated, calc_stksz(root_id))$ 433 428 $END$ 434 429 435 $ // ^XNÌX^bNgpÊÌÅålðè436 $ // XgÌvfÌÅålª^XNÌÅåX^bNgpÊÆÈéD430 $ // タスクのスタック使用量の最大値を決定 431 $ // リスト中の要素の最大値がタスクの最大スタック使用量となる. 437 432 $max_tsk_stksz = 0$ 438 433 $FOREACH size stksz_estimated$ … … 442 437 $END$ 443 438 444 $ // mF439 $ // 確認 445 440 $SPC$* List of Estimated Total Stack Sizes of Tasks = $stksz_estimated$$NL$ 446 441 $SPC$* Estimated Maximum Total Stack Size of Tasks = $max_tsk_stksz$$NL$ … … 449 444 450 445 451 $ SÄÌPÊÌX^bNͤL³êéD452 $ »Ì½ßCX^bNTCYÉÖ·é`FbNÍ453 $ ¤LX^bNÝèÌƱëÅÜÆßÄs¤D454 455 $ X^bNÌæªÔn(stk)D446 $ 全ての処理単位のスタックは共有される. 447 $ そのため,スタックサイズに関するチェックは 448 $ 共有スタック設定のところでまとめて行う. 449 450 $ スタックの先頭番地(stk). 456 451 $FOREACH tskid tsk_apriorder_list$ 457 $ // íÉ NULL Å éD(E_PAR)452 $ // 常に NULL である.(E_PAR) 458 453 $IF !EQ(TSK.STK[tskid], "NULL")$ 459 454 $ERROR TSK.TEXT_LINE[tskid]$E_PAR: $FORMAT(("'%1%' of %2% must be NULL."), "stk", "CRE_TSK")$$END$ … … 462 457 463 458 $ --------------------------------------------------------------------- 464 $ CxgtO459 $ イベントフラグ 465 460 $ --------------------------------------------------------------------- 466 461 /*$NL$ … … 469 464 $NL$ 470 465 471 $ Ggª (UINT8_MAX - TMIN_FLGID)Âæè½¢êÍCG[Æ·é --> »_ÅÍRgAEg466 $ エントリが (UINT8_MAX - TMIN_FLGID)個より多い場合は,エラーとする --> 現時点ではコメントアウト 472 467 $ $IF LENGTH(ALM.ORDER_LIST) > (UINT8_MAX - TMIN_FLGID)$ 473 468 $ $ERROR$$FORMAT("The number of CRE_FLG must be equal to or less than (UINT8_MAX - TMIN_FLGID).")$$END$ 474 469 $ $END$ 475 470 476 $ CxgtOIDÔÌÅål471 $ イベントフラグID番号の最大値 477 472 const ID _kernel_tmax_flgid = (TMIN_FLGID + TNUM_FLGID - 1);$NL$ 478 473 $NL$ 479 474 480 $ // iflgptn ªFLGPTNÉi[Å«È¢êiE_PARj475 $ // iflgptnがFLGPTNに格納できない場合(E_PAR) 481 476 $FOREACH flgid FLG.ORDER_LIST$ 482 477 $IF (FLG.IFLGPTN[flgid] & ~((1 << TBIT_FLGPTN) - 1)) != 0$ … … 485 480 $END$ 486 481 487 $ CxgtOú»ubN̶¬482 $ イベントフラグ初期化ブロックの生成 488 483 $IF LENGTH(FLG.ID_LIST)$ 489 484 490 $ CxgtO®«485 $ イベントフラグ属性 491 486 const ATR _kernel_flginib_atr[TNUM_FLGID] = { 492 487 $JOINEACH flgid FLG.ORDER_LIST ","$ 493 $ // flgatr ªimTA_CLRnjÅÈ¢êiE_RSATRj488 $ // flgatrが([TA_CLR])でない場合(E_RSATR) 494 489 $IF (FLG.FLGATR[flgid] & ~(TA_CLR)) != 0$ 495 490 $ERROR FLG.TEXT_LINE[flgid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "flgatr", FLG.FLGATR[flgid], flgid, "CRE_FLG")$$END$ … … 499 494 };$NL$ 500 495 501 $ CxgtOp^[Ìúl496 $ イベントフラグパターンの初期値 502 497 const FLGPTN _kernel_flginib_iflgptn[TNUM_FLGID] = { 503 498 $JOINEACH flgid FLG.ORDER_LIST ","$ … … 506 501 };$NL$ 507 502 508 $ // CxgtOÌ»ÝÌtOp^[ði[·éÏ503 $ // イベントフラグの現在のフラグパターンを格納する変数 509 504 FLGPTN _kernel_flgcb_flgptn[TNUM_FLGID];$NL$ 510 505 $ELSE$ … … 516 511 517 512 $ --------------------------------------------------------------------- 518 $ f[^L 519 [ 513 $ データキュー 520 514 $ --------------------------------------------------------------------- 521 515 /*$NL$ … … 524 518 $NL$ 525 519 526 $ f[^L 527 [IDÔÌÅål 520 $ データキューID番号の最大値 528 521 const ID _kernel_tmax_dtqid = (TMIN_DTQID + TNUM_DTQID - 1);$NL$ 529 522 $NL$ … … 531 524 $IF LENGTH(DTQ.ID_LIST)$ 532 525 $FOREACH dtqid DTQ.ORDER_LIST$ 533 $ // dtqatr ª TA_NULL ÅÈ¢êiE_RSATRj526 $ // dtqatrが TA_NULL でない場合(E_RSATR) 534 527 $IF (DTQ.DTQATR[dtqid] != TA_NULL) $ 535 528 $ERROR DTQ.TEXT_LINE[dtqid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "dtqatr", DTQ.DTQATR[dtqid], dtqid, "CRE_DTQ")$$END$ 536 529 $END$ 537 530 538 $ // dtqmb ªNULLÅÈ¢êiE_NOSPTj531 $ // dtqmbがNULLでない場合(E_NOSPT) 539 532 $IF !EQ(DTQ.DTQMB[dtqid], "NULL")$ 540 533 $ERROR DTQ.TEXT_LINE[dtqid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "dtqmb", DTQ.DTQMB[dtqid], dtqid, "CRE_DTQ")$$END$ 541 534 $END$ 542 535 543 $ // dtqcnt ª0Å éê536 $ // dtqcntが0である場合 544 537 $IF EQ(+DTQ.DTQCNT[dtqid], 0)$ 545 538 $ERROR DTQ.TEXT_LINE[dtqid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "dtqmb", DTQ.DTQCNT[dtqid], dtqid, "CRE_DTQ")$$END$ … … 547 540 548 541 549 $ // f[^L 550 [Ìæ 542 $ // データキュー領域 551 543 $IF DTQ.DTQCNT[dtqid]$ 552 544 static intptr_t _kernel_dtqmb_$dtqid$[$DTQ.DTQCNT[dtqid]$];$NL$ … … 554 546 $END$ 555 547 556 $ // f[^L 557 [ú»ubN̶¬(®«) 548 $ // データキュー初期化ブロックの生成(属性) 558 549 const ATR _kernel_dtqinib_atr[TNUM_DTQID] = { 559 550 $JOINEACH dtqid DTQ.ORDER_LIST ",\n"$ … … 563 554 $NL$ 564 555 565 $ // f[^L 566 [ú»ubN̶¬(TCY) 556 $ // データキュー初期化ブロックの生成(サイズ) 567 557 const uint8_t _kernel_dtqinib_size[TNUM_DTQID] = { 568 558 $JOINEACH dtqid DTQ.ORDER_LIST ",\n"$ … … 572 562 $NL$ 573 563 574 $ // f[^L 575 [ú»ubN̶¬(ÇÌæ) 564 $ // データキュー初期化ブロックの生成(管理領域) 576 565 intptr_t * const _kernel_dtqinib_data[TNUM_DTQID] = { 577 566 $JOINEACH dtqid DTQ.ORDER_LIST ",\n"$ … … 581 570 $NL$ 582 571 583 $ // f[^L 584 [Rg[ubN 572 $ // データキューコントロールブロック 585 573 uint8_t _kernel_dtqcb_count[TNUM_DTQID];$NL$ 586 574 uint8_t _kernel_dtqcb_head[TNUM_DTQID];$NL$ … … 598 586 599 587 $ --------------------------------------------------------------------- 600 $ ÝÇ@\588 $ 割込み管理機能 601 589 $ --------------------------------------------------------------------- 602 590 /*$NL$ … … 605 593 $NL$ 606 594 607 $ // INTNO_ATTISR_VALID Ìvfªd¡µÄ¢È¢©Ç¤©Ì`FbN595 $ // INTNO_ATTISR_VALID の要素が重複していないかどうかのチェック 608 596 $i = 0$ 609 597 $FOREACH intno INTNO_ATTISR_VALID$ … … 618 606 $END$ 619 607 620 $ // INHNO_ATTISR_VALID Ìvfªd¡µÄ¢È¢©Ç¤©Ì`FbN608 $ // INHNO_ATTISR_VALID の要素が重複していないかどうかのチェック 621 609 $i = 0$ 622 610 $FOREACH intno INHNO_ATTISR_VALID$ … … 632 620 633 621 634 $ // ATT_ISR ÅgpÂ\ÈÝÔÆC»êÉηéÝnhÔ̪¯¶©Ç¤©635 $ // eXgÌvfÍd¡µÄ¢È¢±ÆðOñƵĢéD622 $ // ATT_ISR で使用可能な割込み番号と,それに対応する割込みハンドラ番号の数が同じかどうか 623 $ // 各リストの要素は重複していないことを前提としている. 636 624 $IF LENGTH(INTNO_ATTISR_VALID) != LENGTH(INHNO_ATTISR_VALID)$ 637 625 $ERROR$length of `INTNO_ATTISR_VALID' is different from length of `INHNO_ATTISR_VALID'$END$ … … 639 627 640 628 641 $ // ÝÔÆÝnhÔÌÏ·e[uÌì¬642 $ // ÝÔÌXgÆÝnhÔÌXgÍηévfª¯¶ÔÅ643 $ // »êéæ¤ÉÀ×çêÄ¢é±ÆðOñÆ·éD629 $ // 割込み番号と割込みハンドラ番号の変換テーブルの作成 630 $ // 割込み番号のリストと割込みハンドラ番号のリストは対応する要素が同じ順番で 631 $ // 現れるように並べられていることを前提とする. 644 632 $i = 0$ 645 633 $FOREACH intno INTNO_ATTISR_VALID$ 646 634 647 $ // INTNO_ATTISR_VALID ÉÜÜêélÍ INTNO_CFGINT_VALID ÉàÜÜêé׫ŠéD648 $ // INTNO_ATTISR_VALID Í INTNO_CFGINT_VALID ̪WÉÈé͸D635 $ // INTNO_ATTISR_VALID に含まれる値は INTNO_CFGINT_VALID にも含まれるべきである. 636 $ // INTNO_ATTISR_VALID は INTNO_CFGINT_VALID の部分集合になるはず. 649 637 $IF LENGTH(FIND(INTNO_CFGINT_VALID, intno)) == 0$ 650 638 $ERROR$all elements of `INTNO_ATTISR_VALID' must be included in `INTNO_CFGINT_VALID'$END$ … … 658 646 659 647 660 $ // INTNO_CFGINT_VALID Ìvfª INTNO_VALID ÉÜÜêé©Ç¤©Ì`FbN661 $ // INTNO_CFGINT_VALID Í INTNO_VALID ̪WÉÈé͸D648 $ // INTNO_CFGINT_VALID の要素が INTNO_VALID に含まれるかどうかのチェック 649 $ // INTNO_CFGINT_VALID は INTNO_VALID の部分集合になるはず. 662 650 $FOREACH intno INTNO_CFGINT_VALID$ 663 651 $IF LENGTH(FIND(INTNO_VALID, intno)) == 0$ … … 667 655 668 656 669 $ // INHNO_ATTISR_VALID Ìvfª INHNO_VALID ÉÜÜêé©Ç¤©Ì`FbN670 $ // INHNO_ATTISR_VALID Í INHNO_VALID ̪WÉÈé͸D657 $ // INHNO_ATTISR_VALID の要素が INHNO_VALID に含まれるかどうかのチェック 658 $ // INHNO_ATTISR_VALID は INHNO_VALID の部分集合になるはず. 671 659 $FOREACH inhno INHNO_ATTISR_VALID$ 672 660 $IF LENGTH(FIND(INHNO_VALID, inhno)) == 0$ … … 676 664 677 665 678 $ // ÝvCÉÖ·éG[`FbN666 $ // 割込み要求ラインに関するエラーチェック 679 667 $i = 0$ 680 668 $FOREACH intno INT.ORDER_LIST$ 681 $ // intno ªCFG_INTÉηéÝÔƵijµÈ¢êiE_PARj669 $ // intnoがCFG_INTに対する割込み番号として正しくない場合(E_PAR) 682 670 $IF !LENGTH(FIND(INTNO_CFGINT_VALID, INT.INTNO[intno]))$ 683 671 $ERROR INT.TEXT_LINE[intno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intno", INT.INTNO[intno], "CFG_INT")$$END$ 684 672 $END$ 685 673 686 $ // intno ªCFG_INTÉæÁÄÝèÏÝÌêiE_OBJj674 $ // intnoがCFG_INTによって設定済みの場合(E_OBJ) 687 675 $j = 0$ 688 676 $FOREACH intno2 INT.ORDER_LIST$ … … 693 681 $END$ 694 682 695 $ // intatr ª TA_ENAINT, TA_EDGE, ܽͻ̼^[QbgÅpÂ\È®«Ì¢¸êÅàÈ¢êiE_RSATRj683 $ // intatrが TA_ENAINT, TA_EDGE, またはその他ターゲットで利用可能な属性のいずれでもない場合(E_RSATR) 696 684 $IF (INT.INTATR[intno] & ~(TA_ENAINT|TA_EDGE|ALT(TARGET_INTATR,0))) != 0$ 697 685 $ERROR INT.TEXT_LINE[intno]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "intatr", INT.INTATR[intno], "intno", INT.INTNO[intno], "CFG_INT")$$END$ 698 686 $END$ 699 687 700 $ // intpri ªCFG_INTÉηéÝDæxƵijµÈ¢êiE_PARj688 $ // intpriがCFG_INTに対する割込み優先度として正しくない場合(E_PAR) 701 689 $IF !LENGTH(FIND(INTPRI_CFGINT_VALID, INT.INTPRI[intno]))$ 702 690 $ERROR INT.TEXT_LINE[intno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intpri", INT.INTPRI[intno], "CFG_INT")$$END$ 703 691 $END$ 704 692 705 $ // J[lÇÌÝƵÄÅè³êÄ¢éÝÉCTMIN_INTPRI æèଳ¢lªwè³ê½êiE_OBJj693 $ // カーネル管理の割込みとして固定されている割込みに,TMIN_INTPRI よりも小さい値が指定された場合(E_OBJ) 706 694 $IF LENGTH(FIND(INTNO_FIX_KERNEL, intno))$ 707 695 $IF INT.INTPRI[intno] < TMIN_INTPRI$ … … 710 698 $END$ 711 699 712 $ // J[lÇOÌÝƵÄÅè³êÄ¢éÝÉCTMIN_INTPRI æèଳ¢lªwè³êÈ©Á½êiE_OBJj700 $ // カーネル管理外の割込みとして固定されている割込みに,TMIN_INTPRI よりも小さい値が指定されなかった場合(E_OBJ) 713 701 $IF LENGTH(FIND(INTNO_FIX_NONKERNEL, intno))$ 714 702 $IF INT.INTPRI[intno] >= TMIN_INTPRI$ … … 720 708 721 709 722 $ ÝnhÉÖ·éG[`FbN710 $ 割込みハンドラに関するエラーチェック 723 711 $i = 0$ 724 712 $FOREACH inhno INH.ORDER_LIST$ 725 $ // ÝnhÔ(inhno)ª³µÈ¢êiE_PARj713 $ // 割込みハンドラ番号(inhno)が正しくない場合(E_PAR) 726 714 $IF !LENGTH(FIND(INHNO_DEFINH_VALID, INH.INHNO[inhno]))$ 727 715 $ERROR INH.TEXT_LINE[inhno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "inhno", INH.INHNO[inhno], "DEF_INH")$$END$ 728 716 $END$ 729 717 730 $ // ¯¶ÝnhÔÉηéDEF_INHª¡¶Ý·éêiE_OBJj718 $ // 同じ割込みハンドラ番号に対するDEF_INHが複数存在する場合(E_OBJ) 731 719 $j = 0$ 732 720 $FOREACH inhno2 INH.ORDER_LIST$ … … 737 725 $END$ 738 726 739 $ // Ýnh®«(inhatr) ª TA_NULL, TA_NONKERNEL, yѻ̼^[Qbg˶ÅpÂ\È®«Ì¢¸êÅàÈ¢iE_RSATRj727 $ // 割込みハンドラ属性(inhatr) が TA_NULL, TA_NONKERNEL, 及びその他ターゲット依存で利用可能な属性のいずれでもない(E_RSATR) 740 728 $IF (INH.INHATR[inhno] & ~(TA_NONKERNEL|ALT(TARGET_INHATR,0))) != 0$ 741 729 $ERROR INH.TEXT_LINE[inhno]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "inhatr", INH.INHATR[inhno], "inhno", INH.INHNO[inhno], "DEF_INH")$$END$ 742 730 $END$ 743 731 744 $ // J[lÇÉÅè³êÄ¢éÝnhÉCTA_NONKERNEL ®«ªÝè³êÄ¢éiE_RSATRj732 $ // カーネル管理に固定されている割込みハンドラに,TA_NONKERNEL 属性が設定されている(E_RSATR) 745 733 $IF LENGTH(FIND(INHNO_FIX_KERNEL, inhno))$ 746 734 $IF (INH.INHATR[inhno] & TA_NONKERNEL) != 0$ … … 749 737 $END$ 750 738 751 $ // J[lÇOÉÅè³êÄ¢éÝnhÉCTA_NONKERNEL ®«ªÝè³êĢȢiE_RSATRj739 $ // カーネル管理外に固定されている割込みハンドラに,TA_NONKERNEL 属性が設定されていない(E_RSATR) 752 740 $IF LENGTH(FIND(INHNO_FIX_NONKERNEL, inhno))$ 753 741 $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$ … … 757 745 758 746 759 $ // ÝÔÆ1Î1ηéÝnhÔ(ATT_ISRÅwèÂ\ÈÝnhÔ)ÍCȺÌ`FbNàs¤D760 $ // INHNO_ATTISR_VALID ÉÜÜêÈ¢ÝnhÔÍ`FbN³êÈ¢±ÆÉÈéD747 $ // 割込み番号と1対1対応する割込みハンドラ番号(ATT_ISRで指定可能な割込みハンドラ番号)は,以下のチェックも行う. 748 $ // INHNO_ATTISR_VALID に含まれない割込みハンドラ番号はチェックされないことになる. 761 749 $IF LENGTH(INTNO[INH.INHNO[inhno]]) > 0$ 762 750 $intno = INTNO[INH.INHNO[inhno]]$ 763 751 764 $ // Ýnho^æÌÝvCª®«Ýè³êĢȢ(CFG_INTªÈ¢)iE_OBJj752 $ // 割込みハンドラ登録先の割込み要求ラインが属性設定されていない(CFG_INTがない)(E_OBJ) 765 753 $IF !LENGTH(INT.INTNO[intno])$ 766 754 $ERROR INH.TEXT_LINE[inhno]$E_OBJ: $FORMAT(_("%1% `%2%\' corresponding to %3% `%4%\' is not configured with %5%"), "intno", INT.INTNO[intno], "inhno", INH.INHNO[inhno], "CFG_INT")$$END$ 767 755 $ELSE$ 768 756 $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$ 769 $ // inhatr ÉTA_NONKERNELªwè³êĨç¸CinhnoÉÎ770 $ // ·éintnoÉεÄCFG_INTÅÝè³ê½ÝDæxª771 $ // TMIN_INTPRI æèଳ¢êiE_OBJj757 $ // inhatrにTA_NONKERNELが指定されておらず,inhnoに対応 758 $ // するintnoに対してCFG_INTで設定された割込み優先度が 759 $ // TMIN_INTPRIよりも小さい場合(E_OBJ) 772 760 $IF INT.INTPRI[intno] < TMIN_INTPRI$ 773 761 $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' configured for %3% `%4%\' is higher than %5%"), "intpri", INT.INTPRI[intno], "inhno", INH.INHNO[inhno], "TMIN_INTPRI")$$END$ 774 762 $END$ 775 763 $ELSE$ 776 $ // inhatr ÉTA_NONKERNELªwè³êĨèCinhnoÉÎ777 $ // ·éintnoÉεÄCFG_INTÅÝè³ê½ÝDæxª778 $ // TMIN_INTPRI ÈãÅ éêiE_OBJj764 $ // inhatrにTA_NONKERNELが指定されており,inhnoに対応 765 $ // するintnoに対してCFG_INTで設定された割込み優先度が 766 $ // TMIN_INTPRI以上である場合(E_OBJ) 779 767 $IF INT.INTPRI[intno] >= TMIN_INTPRI$ 780 768 $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' configured for %3% `%4%\' is lower than or equal to %5%"), "intpri", INT.INTPRI[intno], "inhno", INH.INHNO[inhno], "TMIN_INTPRI")$$END$ … … 786 774 $END$ 787 775 788 $ ÝT[rX[`iISRjÉÖ·éG[`FbNÆÝnh̶¬776 $ 割込みサービスルーチン(ISR)に関するエラーチェックと割込みハンドラの生成 789 777 $FOREACH order ISR.ORDER_LIST$ 790 $ // isratr ªiTA_NULLjÅÈ¢êiE_RSATRj778 $ // isratrが(TA_NULL)でない場合(E_RSATR) 791 779 $IF (ISR.ISRATR[order] & ~ALT(TARGET_ISRATR,0)) != 0$ 792 780 $ERROR ISR.TEXT_LINE[order]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "isratr", ISR.ISRATR[order], "isr", ISR.ISR[order], "ATT_ISR")$$END$ 793 781 $END$ 794 782 795 $ // intno ªATT_ISRÉηéÝÔƵijµÈ¢êiE_PARj783 $ // intnoがATT_ISRに対する割込み番号として正しくない場合(E_PAR) 796 784 $IF !LENGTH(FIND(INTNO_ATTISR_VALID, ISR.INTNO[order]))$ 797 785 $ERROR ISR.TEXT_LINE[order]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intno", ISR.INTNO[order], "ATT_ISR")$$END$ 798 786 $END$ 799 787 800 $ // (TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI) ÅÈ¢êiE_PARj788 $ // (TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)でない場合(E_PAR) 801 789 $IF !(TMIN_ISRPRI <= ISR.ISRPRI[order] && ISR.ISRPRI[order] <= TMAX_ISRPRI)$ 802 790 $ERROR ISR.TEXT_LINE[order]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "isrpri", ISR.ISRPRI[order], "ATT_ISR")$$END$ … … 808 796 $inhno = INHNO[intno]$ 809 797 810 $ // ÝÔintnoÉεÄo^³ê½ISRÌXgÌì¬798 $ // 割込み番号intnoに対して登録されたISRのリストの作成 811 799 $isr_order_list = {}$ 812 800 $FOREACH order ISR.ORDER_LIST$ … … 817 805 $END$ 818 806 819 $ // ÝÔintnoÉεÄo^³ê½ISRª¶Ý·éê807 $ // 割込み番号intnoに対して登録されたISRが存在する場合 820 808 $IF LENGTH(isr_order_list) > 0$ 821 $ // intno ÉηéinhnoÉεÄDEF_INHª éêiE_OBJj809 $ // intnoに対応するinhnoに対してDEF_INHがある場合(E_OBJ) 822 810 $IF LENGTH(INH.INHNO[inhno])$ 823 811 $ERROR ISR.TEXT_LINE[order_for_error]$E_OBJ: $FORMAT(_("%1% `%2%\' in %3% is duplicated with %4% `%5%\'"), "intno", ISR.INTNO[order_for_error], "ATT_ISR", "inhno", INH.INHNO[inhno])$$END$ 824 812 $END$ 825 813 826 $ // intno ÉηéCFG_INTªÈ¢êiE_OBJj814 $ // intnoに対するCFG_INTがない場合(E_OBJ) 827 815 $IF !LENGTH(INT.INTNO[intno])$ 828 816 $ERROR ISR.TEXT_LINE[order_for_error]$E_OBJ: $FORMAT(_("%1% `%2%\' is not configured with %3%"), "intno", ISR.INTNO[order_for_error], "CFG_INT")$$END$ 829 817 $ELSE$ 830 $ // intno ÉεÄCFG_INTÅÝè³ê½ÝDæxªTMIN_INTPRI831 $ // æèଳ¢êiE_OBJj818 $ // intnoに対してCFG_INTで設定された割込み優先度がTMIN_INTPRI 819 $ // よりも小さい場合(E_OBJ) 832 820 $IF INT.INTPRI[intno] < TMIN_INTPRI$ 833 821 $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' configured for %3% `%4%\' is higher than %5%"), "intpri", INT.INTPRI[intno], "intno", ISR.INTNO[order_for_error], "TMIN_INTPRI")$$END$ … … 841 829 $INH.ORDER_LIST = APPEND(INH.ORDER_LIST, inhno)$ 842 830 843 $ // ISR pÌÝnh831 $ // ISR用の割込みハンドラ 844 832 void$NL$ 845 833 _kernel_inthdr_$intno$(void)$NL$ … … 853 841 $TAB$i_begin_int($intno$);$NL$ 854 842 $END$ 855 $ // ISR ðDæxÉÄÑo·843 $ // ISRを優先度順に呼び出す 856 844 $JOINEACH order SORT(isr_order_list, "ISR.ISRPRI") "\tif (i_sense_lock()) {\n\t\ti_unlock_cpu();\n\t}\n\ti_set_ipm(saved_ipm);\n"$ 857 845 $TAB$LOG_ISR_ENTER($intno$);$NL$ … … 866 854 867 855 $ 868 $ ÝÇ@\̽ßÌWIÈú»îñ̶¬869 $ 870 $ ÝnhÌú»ÉKvÈîñ856 $ 割込み管理機能のための標準的な初期化情報の生成 857 $ 858 $ 割込みハンドラの初期化に必要な情報 871 859 $IF !OMIT_INITIALIZE_INTERRUPT || ALT(USE_INHINIB_TABLE,0)$ 872 860 873 $ Ýnh861 $ 割込みハンドラ数 874 862 #define TNUM_INHNO $LENGTH(INH.ORDER_LIST)$$NL$ 875 863 const uint_t _kernel_tnum_inhno = TNUM_INHNO;$NL$ … … 879 867 $END$ 880 868 881 $ Ýnhú»e[u869 $ 割込みハンドラ初期化テーブル 882 870 $IF LENGTH(INH.ORDER_LIST)$ 883 871 const INHNO _kernel_inhinib_inhno[TNUM_INHNO] = { … … 905 893 $END$ 906 894 907 $ ÝvCÌú»ÉKvÈîñ895 $ 割込み要求ラインの初期化に必要な情報 908 896 $IF !OMIT_INITIALIZE_INTERRUPT || ALT(USE_INTINIB_TABLE,0)$ 909 897 910 $ ÝvC898 $ 割込み要求ライン数 911 899 #define TNUM_INTNO $LENGTH(INT.ORDER_LIST)$$NL$ 912 900 const uint_t _kernel_tnum_intno = TNUM_INTNO;$NL$ 913 901 $NL$ 914 902 915 $ ÝvCú»e[u903 $ 割込み要求ライン初期化テーブル 916 904 $IF LENGTH(INT.ORDER_LIST)$ 917 905 const INTNO _kernel_intinib_intno[TNUM_INTNO] = { … … 941 929 942 930 $ --------------------------------------------------------------------- 943 $ CPU áOnh931 $ CPU例外ハンドラ 944 932 $ --------------------------------------------------------------------- 945 933 /*$NL$ … … 948 936 $NL$ 949 937 950 $ // EXCNO_DEFEXC_VALID Ìvfª EXCNO_VALID ÉÜÜêé©Ç¤©Ì`FbN951 $ // EXCNO_DEFEXC_VALID Í EXCNO_VALID ̪WÉÈé͸D938 $ // EXCNO_DEFEXC_VALID の要素が EXCNO_VALID に含まれるかどうかのチェック 939 $ // EXCNO_DEFEXC_VALID は EXCNO_VALID の部分集合になるはず. 952 940 $FOREACH excno EXCNO_DEFEXC_VALID$ 953 941 $IF LENGTH(FIND(EXCNO_VALID, excno)) == 0$ … … 957 945 958 946 959 $ CPU áOnhÉÖ·éG[`FbN947 $ CPU例外ハンドラに関するエラーチェック 960 948 $i = 0$ 961 949 $FOREACH excno EXC.ORDER_LIST$ 962 $ // excno ªDEF_EXCÉηéCPUáOnhÔƵijµÈ¢êiE_PARj950 $ // excnoがDEF_EXCに対するCPU例外ハンドラ番号として正しくない場合(E_PAR) 963 951 $IF !LENGTH(FIND(EXCNO_DEFEXC_VALID, EXC.EXCNO[excno]))$ 964 952 $ERROR EXC.TEXT_LINE[excno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "excno", EXC.EXCNO[excno], "DEF_EXC")$$END$ 965 953 $END$ 966 954 967 $ // excno ªDEF_EXCÉæÁÄÝèÏÝÌêiE_OBJj955 $ // excnoがDEF_EXCによって設定済みの場合(E_OBJ) 968 956 $j = 0$ 969 957 $FOREACH excno2 EXC.ORDER_LIST$ … … 974 962 $END$ 975 963 976 $ // excatr ªiTA_NULLjÅÈ¢êiE_RSATRj964 $ // excatrが(TA_NULL)でない場合(E_RSATR) 977 965 $IF (EXC.EXCATR[excno] & ~ALT(TARGET_EXCATR,0)) != 0$ 978 966 $ERROR EXC.TEXT_LINE[excno]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "excatr", EXC.EXCATR[excno], "excno", EXC.EXCNO[excno], "DEF_EXC")$$END$ … … 981 969 $END$ 982 970 983 $ CPU áOnh̽ßÌWIÈú»îñ̶¬971 $ CPU例外ハンドラのための標準的な初期化情報の生成 984 972 $IF !ALT(OMIT_INITIALIZE_EXCEPTION,0)$ 985 973 986 $ CPU áOnh974 $ CPU例外ハンドラ数 987 975 #define TNUM_EXCNO $LENGTH(EXC.ORDER_LIST)$$NL$ 988 976 const uint_t _kernel_tnum_excno = TNUM_EXCNO;$NL$ … … 992 980 $END$ 993 981 994 $ CPU áOnhú»e[u982 $ CPU例外ハンドラ初期化テーブル 995 983 $IF LENGTH(EXC.ORDER_LIST)$ 996 984 const EXCNO _kernel_excinib_excno[TNUM_EXCNO] = { … … 1021 1009 1022 1010 $ --------------------------------------------------------------------- 1023 $ üúnh1011 $ 周期ハンドラ 1024 1012 $ --------------------------------------------------------------------- 1025 1013 … … 1029 1017 $NL$ 1030 1018 1031 $ üúnhIDÔÌÅål1019 $ 周期ハンドラID番号の最大値 1032 1020 const ID _kernel_tmax_cycid = (TMIN_CYCID + TNUM_CYCID - 1);$NL$ 1033 1021 1034 $ üúnhÌ^CCxgIDItZbg1035 $ üúnhÌ^CCxgIDÍ0©çJn1022 $ 周期ハンドラのタイムイベントIDオフセット 1023 $ 周期ハンドラのタイムイベントIDは0から開始 1036 1024 const uint_t _kernel_cycevtid_offset = 0;$NL$ 1037 1025 $NL$ 1038 1026 1039 $ Ggª TMAX_MAXCYC(kernel.h) Âæè½¢êÍCG[Æ·é1027 $ エントリが TMAX_MAXCYC(kernel.h) 個より多い場合は,エラーとする 1040 1028 $IF LENGTH(CYC.ORDER_LIST) > TMAX_MAXCYC$ 1041 1029 $ERROR$$FORMAT(_("The number of CRE_CYC must be equal to or less than %1%."), +VALUE("TMAX_MAXCYC", TMAX_MAXCYC))$$END$ … … 1043 1031 1044 1032 $IF LENGTH(CYC.ORDER_LIST)$ 1045 $ üúnh®«1033 $ 周期ハンドラ属性 1046 1034 $CYCACT = 0$ 1047 1035 $FOREACH cycid CYC.ORDER_LIST$ 1048 $ // üúnh®«(cycatr) ª TA_NULL, TA_STA Ì¢¸êÅàÈ¢iE_RSATRj1036 $ // 周期ハンドラ属性(cycatr) が TA_NULL, TA_STA のいずれでもない(E_RSATR) 1049 1037 $IF (CYC.CYCATR[cycid] & ~TA_STA) != 0$ 1050 1038 $ERROR CYC.TEXT_LINE[cycid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cycatr", CYC.CYCATR[cycid], cycid, "CRE_CYC")$$END$ … … 1057 1045 const uint16_t _kernel_cycinib_cycact = $CYCACT$;$NL$ 1058 1046 1059 $ üúnhg£îñ1047 $ 周期ハンドラ拡張情報 1060 1048 const intptr_t _kernel_cycinib_exinf[TNUM_CYCID] = { 1061 1049 $JOINEACH cycid CYC.ORDER_LIST ","$ … … 1064 1052 };$NL$ 1065 1053 1066 $ üúnhAhX1054 $ 周期ハンドラアドレス 1067 1055 const CYCHDR _kernel_cycinib_cychdr[TNUM_CYCID] = { 1068 1056 $JOINEACH cycid CYC.ORDER_LIST ","$ … … 1071 1059 };$NL$ 1072 1060 1073 $ üúnhüú1061 $ 周期ハンドラ周期 1074 1062 const RELTIM _kernel_cycinib_cyctim[TNUM_CYCID] = { 1075 1063 $JOINEACH cycid CYC.ORDER_LIST ","$ 1076 $ // cyctim Í 0 æèå«CTMAX_RELTIM ȺŠéD(E_PAR)1064 $ // cyctim は 0 より大きく,TMAX_RELTIM 以下である.(E_PAR) 1077 1065 $IF CYC.CYCTIM[cycid] <= 0 || TMAX_RELTIM < CYC.CYCTIM[cycid] $ 1078 1066 $ERROR CYC.TEXT_LINE[cycid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cyctim", CYC.CYCTIM[cycid], cycid, "CRE_CYC")$$END$ … … 1083 1071 };$NL$ 1084 1072 1085 $ üúnhÊ1073 $ 周期ハンドラ位相 1086 1074 const RELTIM _kernel_cycinib_cycphs[TNUM_CYCID] = { 1087 1075 $JOINEACH cycid CYC.ORDER_LIST ","$ 1088 $ // cycphs Í 0 ÈãCTMAX_RELTIM ȺŠéD(E_PAR)1076 $ // cycphs は 0 以上,TMAX_RELTIM 以下である.(E_PAR) 1089 1077 $IF CYC.CYCPHS[cycid] < 0 || TMAX_RELTIM < CYC.CYCPHS[cycid] $ 1090 1078 $ERROR CYC.TEXT_LINE[cycid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cycphs", CYC.CYCPHS[cycid], cycid, "CRE_CYC")$$END$ 1091 1079 $END$ 1092 1080 1093 $ // ʪ0©ÂC®«ª TA_STA ÌêÍx1081 $ // 位相が0かつ,属性が TA_STA の場合は警告 1094 1082 $IF CYC.CYCPHS[cycid] == 0 && (CYC.CYCATR[cycid] & TA_STA) != 0$ 1095 1083 $WARNING CYC.TEXT_LINE[cycid]$$FORMAT(_("%1% is not recommended when %2% is set to %3% in %4%"), "cycphs==0", "TA_STA", "cycatr", "CRE_CYC")$$END$ … … 1101 1089 $NL$ 1102 1090 1103 $ üúnhÌñN®1091 $ 周期ハンドラの次回起動時刻 1104 1092 EVTTIM _kernel_cyccb_evttim[TNUM_CYCID];$NL$ 1105 1093 … … 1113 1101 $END$ 1114 1102 1115 $ üúnh®ìóÔ1103 $ 周期ハンドラ動作状態 1116 1104 uint16_t _kernel_cyccb_cycact;$NL$ 1117 1105 … … 1120 1108 1121 1109 $ --------------------------------------------------------------------- 1122 $ A[nh1110 $ アラームハンドラ 1123 1111 $ --------------------------------------------------------------------- 1124 1112 … … 1128 1116 $NL$ 1129 1117 1130 $ Ggª TMAX_MAXALM(kernel.h) Âæè½¢êÍCG[Æ·é1118 $ エントリが TMAX_MAXALM(kernel.h) 個より多い場合は,エラーとする 1131 1119 $IF LENGTH(ALM.ORDER_LIST) > TMAX_MAXALM$ 1132 1120 $ERROR$$FORMAT(_("The number of CRE_ALM must be equal to or less than %1%."), +VALUE("TMAX_MAXALM",TMAX_MAXALM))$$END$ 1133 1121 $END$ 1134 1122 1135 $ A[nhÌÅåIDl1123 $ アラームハンドラの最大ID値 1136 1124 const ID _kernel_tmax_almid = (TMIN_ALMID + TNUM_ALMID - 1);$NL$ 1137 1125 1138 $ A[nhÌ^CCxgIDItZbg1126 $ アラームハンドラのタイムイベントIDオフセット 1139 1127 const uint_t _kernel_almevtid_offset = $LENGTH(CYC.ORDER_LIST)$;$NL$ 1140 1128 $NL$ 1141 1129 1142 1130 $FOREACH almid ALM.ORDER_LIST$ 1143 $ // almatr ªiTA_NULLjÅÈ¢êiE_RSATRj1131 $ // almatrが(TA_NULL)でない場合(E_RSATR) 1144 1132 $IF ALM.ALMATR[almid] != 0$ 1145 1133 $ERROR ALM.TEXT_LINE[almid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "almatr", ALM.ALMATR[almid], almid, "CRE_ALM")$$END$ … … 1148 1136 1149 1137 $IF LENGTH(ALM.ORDER_LIST)$ 1150 $ A[nhæªÔn1138 $ アラームハンドラ先頭番地 1151 1139 const ALMHDR _kernel_alminib_almhdr[TNUM_ALMID] = { 1152 1140 $JOINEACH almid ALM.ORDER_LIST ","$ … … 1155 1143 };$NL$ 1156 1144 1157 $ A[nhg£îñ1145 $ アラームハンドラ拡張情報 1158 1146 const intptr_t _kernel_alminib_exinf[TNUM_ALMID] = { 1159 1147 $JOINEACH almid ALM.ORDER_LIST ","$ … … 1168 1156 $END$ 1169 1157 1170 $ A[nhóÔ1158 $ アラームハンドラ状態 1171 1159 uint16_t _kernel_almcb_almact;$NL$ 1172 1160 $NL$ … … 1174 1162 1175 1163 $ --------------------------------------------------------------------- 1176 $ ^CCxgÇ1164 $ タイムイベント管理 1177 1165 $ --------------------------------------------------------------------- 1178 1166 … … 1187 1175 $NL$ 1188 1176 1189 $ ^CCxgubNÌTCY1177 $ タイムイベントブロックのサイズ 1190 1178 const uint_t _kernel_tnum_tmevt_queue = TNUM_TMEVT;$NL$$NL$ 1191 1179 1192 1180 $IF TNUM_TMEVT != 0$ 1193 $ ^CCxgL 1194 [ 1181 $ タイムイベントキュー 1195 1182 QUEUE _kernel_tmevt_queue[TNUM_TMEVT+1];$NL$ 1196 $ ^CCxgÔ1183 $ タイムイベント時間 1197 1184 EVTTIM _kernel_tmevt_time[TNUM_TMEVT];$NL$ 1198 $ ^CCxgÌR[obN1185 $ タイムイベントのコールバック 1199 1186 CBACK _kernel_tmevt_callback[TNUM_TMEVT];$NL$ 1200 $ ^CCxgR[obNÌø1187 $ タイムイベントコールバックの引数 1201 1188 uintptr_t _kernel_tmevt_arg[TNUM_TMEVT];$NL$ 1202 1189 $NL$$NL$ … … 1210 1197 1211 1198 $ --------------------------------------------------------------------- 1212 $ ñ^XNReLXgpX^bNÌæ1199 $ 非タスクコンテキスト用スタック領域 1213 1200 $ --------------------------------------------------------------------- 1214 1201 /*$NL$ … … 1216 1203 $SPC$*/$NL$$NL$ 1217 1204 1218 $ // Ïè`1219 $ // ñ^XNReLXgpX^bNÌæÌTCY1205 $ // 変数定義 1206 $ // 非タスクコンテキスト用スタック領域のサイズ 1220 1207 $interrupt_context_stksz = 0$ 1221 1208 1222 $ // DEF_ICS ÌGgª¶Ý·é©?1209 $ // DEF_ICS のエントリが存在するか? 1223 1210 $IF !LENGTH(ICS.ORDER_LIST)$ 1224 $ // È¢êDTCYÍùèl (DEFAULT_ISTKSZ) ðg¤1211 $ // ない場合.サイズは既定値 (DEFAULT_ISTKSZ) を使う 1225 1212 #define TOPPERS_ISTKSZ DEFAULT_ISTKSZ$NL$$NL$ 1226 1213 $interrupt_context_stksz = DEFAULT_ISTKSZ$ 1227 1214 $ELSE$ 1228 $ // DEF_ICS ÌGgª éê1229 1230 $ 1231 $ // G[`FbN1232 $ 1233 $ // ÃIAPIuDEF_ICSvª¡ éiE_OBJj1215 $ // DEF_ICS のエントリがある場合 1216 1217 $ 1218 $ // エラーチェック 1219 $ 1220 $ // 静的API「DEF_ICS」が複数ある(E_OBJ) 1234 1221 $IF LENGTH(ICS.ORDER_LIST) > 1$ 1235 1222 $ERROR$E_OBJ: $FORMAT(_("too many %1%"), "DEF_ICS")$$END$ 1236 1223 $END$ 1237 $ // DEF_ICS Å0ðwèµ½ê(E_PAR)1224 $ // DEF_ICS で0を指定した場合(E_PAR) 1238 1225 $IF ICS.ISTKSZ[1] == 0$ 1239 1226 $ERROR ICS.TEXT_LINE[1]$E_PAR: $FORMAT(_("%1% in %2% is 0"), "istksz", "DEF_ICS")$$END$ 1240 1227 $END$ 1241 $ // íÉ NULL Å éD(E_PAR)1228 $ // 常に NULL である.(E_PAR) 1242 1229 $IF !EQ(ICS.ISTK[1], "NULL")$ 1243 1230 $ERROR ICS.TEXT_LINE[1]$E_PAR: $FORMAT(("'%1%' of %2% must be NULL."), "istk", "DEF_ICS")$$END$ … … 1251 1238 1252 1239 $ --------------------------------------------------------------------- 1253 $ ¤LX^bNÌæ 1254 $ SSPÅÍ·×ÄÌPÊÌX^bNð¤L·é½ßC 1255 $ ±±ÅVXeSÌÌX^bNÌæðmÛ·éD 1256 $ --------------------------------------------------------------------- 1257 1258 $ 1259 $ ¤LX^bNÌRtBM 1260 [Vɬ÷µ½©Ç¤© 1261 $ 1262 $ DEF_STK ÉG[ª¶µ½êC±ÌϪ0ÉÈéD 1263 $ DEF_STK ÉG[ª¶µ½©Ç¤©ð»fµÄ 1264 $ ÁèÌÀsðubN·é½ßÉgp·éD 1240 $ 共有スタック領域 1241 $ SSPではすべての処理単位のスタックを共有するため, 1242 $ ここでシステム全体のスタック領域を確保する. 1243 $ --------------------------------------------------------------------- 1244 1245 $ 1246 $ 共有スタックのコンフィギュレーションに成功したかどうか 1247 $ 1248 $ DEF_STK 処理中にエラーが発生した場合,この変数が0になる. 1249 $ DEF_STK 処理中にエラーが発生したかどうかを判断して 1250 $ 特定処理の実行をブロックするために使用する. 1265 1251 $ 1266 1252 $configurated_defstk_successfully = 1$ … … 1271 1257 $NL$ 1272 1258 1273 $ // Ïè`1274 $ // èÄç꽤LX^bNÌæÌTCY1259 $ // 変数定義 1260 $ // 割り当てられた共有スタック領域のサイズ 1275 1261 $allocated_stack_size = 0$ 1276 1262 1277 $ // DEF_STK ÌGgª¶Ý·é©?1263 $ // DEF_STK のエントリが存在するか? 1278 1264 $IF !LENGTH(STK.ORDER_LIST)$ 1279 $ // (1) DEF_STK ÌGgªÈ¢ê1265 $ // (1) DEF_STK のエントリがない場合 1280 1266 static STK_T _kernel_stack[COUNT_STK_T(TOPPERS_TSTKSZ+TOPPERS_ISTKSZ)];$NL$ 1281 1267 #define TOPPERS_STK _kernel_stack$NL$ … … 1285 1271 $allocated_stack_size = max_tsk_stksz + interrupt_context_stksz$ 1286 1272 $ELSE$ 1287 $ // (2) DEF_STK ÌGgª éê1288 1289 $ // G[`FbN1290 $ // ÃIAPIuDEF_STKvª¡ éiE_OBJj1273 $ // (2) DEF_STK のエントリがある場合 1274 1275 $ // エラーチェック 1276 $ // 静的API「DEF_STK」が複数ある(E_OBJ) 1291 1277 $IF LENGTH(STK.ORDER_LIST) > 1$ 1292 1278 $configurated_defstk_successfully = 0$ 1293 1279 $ERROR$E_OBJ: $FORMAT(_("too many %1%"), "DEF_STK")$$END$ 1294 1280 $END$ 1295 $ // DEF_STK Ì stksz Å 0 ðwèµ½ê(E_PAR)1281 $ // DEF_STK の stksz で 0 を指定した場合(E_PAR) 1296 1282 $IF STK.STKSZ[1] == 0$ 1297 1283 $configurated_defstk_successfully = 0$ … … 1300 1286 1301 1287 $IF EQ(STK.STK[1], "NULL")$ 1302 $ // stk ª NULL ÌêCX^bNÌæð©®t¯1288 $ // stk が NULL の場合,スタック領域を自動割付け 1303 1289 static STK_T _kernel_stack[COUNT_STK_T($STK.STKSZ[1]$)];$NL$ 1304 1290 #define TOPPERS_STK _kernel_stack$NL$ 1305 1291 #define TOPPERS_STKSZ ROUND_STK_T($STK.STKSZ[1]$)$NL$ 1306 1292 $ELSE$ 1307 $ // stk ª NULL ÈOÌêiAv¤ÅX^bNÌæðpÓ·éêj1308 1309 $ // stksz ª^[QbgÉèÜéACgTCYÌ{ÉACg³êĢȢêiE_PARj1293 $ // stk が NULL 以外の場合(アプリ側でスタック領域を用意する場合) 1294 1295 $ // stkszがターゲット毎に定まるアライメントサイズの倍数にアライメントされていない場合(E_PAR) 1310 1296 $IF LENGTH(CHECK_STKSZ_ALIGN) && (STK.STKSZ[1] & (CHECK_STKSZ_ALIGN - 1))$ 1311 1297 $configurated_defstk_successfully = 0$ … … 1321 1307 $NL$ 1322 1308 1323 $ ¤LX^bNpÌX^bNÌæ1309 $ 共有スタック用のスタック領域 1324 1310 const SIZE _kernel_stksz = TOPPERS_STKSZ;$NL$ 1325 1311 STK_T *const _kernel_stk = TOPPERS_STK;$NL$ … … 1331 1317 1332 1318 $ 1333 $ // DæxèĨæÑX^bNÝèÉÖ·éÊðWoÍÖ\¦1319 $ // 優先度割り当ておよびスタック設定に関する結果を標準出力へ表示 1334 1320 $ 1335 1321 $IF configurated_defepr_successfully == 1 && configurated_defstk_successfully == 1$ … … 1347 1333 $TAB$Specified interrupt stack size = $interrupt_context_stksz$(value=$FORMAT("%d",+interrupt_context_stksz)$)$NL$ 1348 1334 $TAB$Allocated total stack size = $allocated_stack_size$(value=$FORMAT("%d",+allocated_stack_size)$)$NL$ 1349 $ // TCYÌ`FbNDX^bNTCYÌèlªÀÛÉÄçê½TCYæèå«¢êCx·éD1335 $ // サイズのチェック.スタックサイズの推定値が実際に割当てられたサイズより大きい場合,警告する. 1350 1336 $IF (max_tsk_stksz+interrupt_context_stksz) > allocated_stack_size$ 1351 1337 $TAB$!!!WARNING!!!: Estimated stack size is more than the allocated stack size.$NL$ … … 1355 1341 $END$ 1356 1342 $ 1357 $ // oÍæð³ÉߵĨ1343 $ // 出力先を元に戻しておく 1358 1344 $ 1359 1345 $FILE "kernel_cfg.c"$ … … 1361 1347 1362 1348 $ --------------------------------------------------------------------- 1363 $ eW 1364 [Ìú»Ö 1349 $ 各モジュールの初期化関数 1365 1350 $ --------------------------------------------------------------------- 1366 1351 /*$NL$ … … 1393 1378 1394 1379 $ --------------------------------------------------------------------- 1395 $ ú»[`ÌÀsÖ1380 $ 初期化ルーチンの実行関数 1396 1381 $ --------------------------------------------------------------------- 1397 1382 /*$NL$ … … 1403 1388 {$NL$ 1404 1389 $FOREACH order INI.ORDER_LIST$ 1405 $ // iniatr ªiTA_NULLjÅÈ¢êiE_RSATRj1390 $ // iniatrが(TA_NULL)でない場合(E_RSATR) 1406 1391 $IF INI.INIATR[order] != 0$ 1407 1392 $ERROR INI.TEXT_LINE[order]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "iniatr", INI.INIATR[order], "inirtn", INI.INIRTN[order], "ATT_INI")$$END$ … … 1413 1398 1414 1399 $ --------------------------------------------------------------------- 1415 $ I¹[`ÌÀsÖ1400 $ 終了処理ルーチンの実行関数 1416 1401 $ --------------------------------------------------------------------- 1417 1402 /*$NL$ … … 1423 1408 {$NL$ 1424 1409 $FOREACH rorder TER.RORDER_LIST$ 1425 $ // teratr ªiTA_NULLjÅÈ¢êiE_RSATRj1410 $ // teratrが(TA_NULL)でない場合(E_RSATR) 1426 1411 $IF TER.TERATR[rorder] != 0$ 1427 1412 $ERROR TER.TEXT_LINE[rorder]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "teratr", TER.TERATR[rorder], "terrtn", TER.TERRTN[rorder], "ATT_TER")$$END$ -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/kernel_impl.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 10 10 * Nagoya Municipal Industrial Research Institute, JAPAN 11 11 * 12 * ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 13 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 14 * ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 15 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 16 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 17 * R[hÉÜÜêÄ¢é±ÆD 18 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 19 * Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 20 gipÒ} 21 * j 22 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 23 * ØKèðfÚ·é±ÆD 24 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 25 * Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌì 29 * \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 31 * ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 33 * ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 34 * {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 35 * ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 12 * 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ 13 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・ 14 * 再配布(以下,利用と呼ぶ)することを無償で許諾する. 15 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権 16 * 表示,この利用条件および下記の無保証規定が,そのままの形でソース 17 * コード中に含まれていること. 18 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用 19 * できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ 20 * ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保 21 * 証規定を掲載すること. 22 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用 23 * できない形で再配布する場合には,次のいずれかの条件を満たすこと. 24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作 25 * 権表示,この利用条件および下記の無保証規定を掲載すること. 26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報 27 * 告すること. 28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害 29 * からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また, 30 * 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ 31 * く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 36 32 * 37 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ38 * ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη39 * éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp40 * Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð41 * íÈ¢D33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 34 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 35 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 36 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負 37 * わない. 42 38 * 43 39 */ 44 40 45 41 /* 46 * TOPPERS/SSP J[làü¯Wwb_t@C42 * TOPPERS/SSPカーネル内部向け標準ヘッダファイル 47 43 * 48 * ±Ìwb_t@CÍCJ[lð\¬·évOÌ\[Xt@C49 * ÅK¸CN[h·é׫Wwb_t@CÅ éD44 * このヘッダファイルは,カーネルを構成するプログラムのソースファイル 45 * で必ずインクルードするべき標準ヘッダファイルである. 50 46 * 51 * AZu¾êÌ\[Xt@C©ç±Ìt@CðCN[h·é52 * ÍCTOPPERS_MACRO_ONLYðè`µÄ¨D±êÉæèC}Nè`ÈOð53 * æ¤ÉÈÁÄ¢éD47 * アセンブリ言語のソースファイルからこのファイルをインクルードする時 48 * は,TOPPERS_MACRO_ONLYを定義しておく.これにより,マクロ定義以外を 49 * 除くようになっている. 54 50 */ 55 51 … … 58 54 59 55 /* 60 * J[lÌà¯Ê¼Ìl[56 * カーネルの内部識別名のリネーム 61 57 */ 62 58 #include "kernel_rename.h" 63 59 64 60 /* 65 * AvP[VƤÊÌwb_t@C61 * アプリケーションと共通のヘッダファイル 66 62 */ 67 63 #include <kernel.h> 68 64 69 65 /* 70 * VXeO@\̽ßÌè`66 * システムログ機能のための定義 71 67 */ 72 68 #include <t_syslog.h> 73 69 74 70 /* 75 * ^LXgðs¤}NÌè`71 * 型キャストを行うマクロの定義 76 72 */ 77 73 #ifndef CAST … … 80 76 81 77 /* 82 * ^[Qbg˶îñÌè`78 * ターゲット依存情報の定義 83 79 */ 84 80 #include "target_config.h" 85 81 86 82 /* 87 * ·×ÄÌÖðRpC·é½ßÌè`83 * すべての関数をコンパイルするための定義 88 84 */ 89 85 #ifdef ALLFUNC … … 92 88 93 89 /* 94 * rbgtB[hÅ̳µ®^90 * ビットフィールドでの符号無し整数型 95 91 * 96 * 8 rbgȺÌÌrbgtB[hÅC³µ®lðÛµ½¢ê97 * Ép¢é׫f[^^DANSI CÅÍCrbgtB[hÌf[^^ÉÍ98 * int Æunsigned intµ©³êÈ¢½ßCftHgÌè`Íunsigned99 * int ƵĢéªC^[Qbg¨æÑc[˶ÅCunsigned charܽÍ100 * unsigned short Éè`µ½ûªø¦ªÇ¢êª éD92 * 8ビット以下の幅のビットフィールドで,符号無し整数値を保持したい場合 93 * に用いるべきデータ型.ANSI Cでは,ビットフィールドのデータ型には 94 * intとunsigned intしか許されないため,デフォルトの定義はunsigned 95 * intとしているが,ターゲットおよびツール依存で,unsigned charまたは 96 * unsigned shortに定義した方が効率が良い場合がある. 101 97 */ 102 98 #ifndef BIT_FIELD_UINT … … 105 101 106 102 /* 107 * rbgtB[hÅÌu[^103 * ビットフィールドでのブール型 108 104 * 109 * 1 rbgÌrbgtB[hÅCu[lðÛµ½¢êÉp¢é׫110 * f[^^DftHgÅÍBIT_FIELD_UINTƯêÉè`µÄ¢éªCu[111 * lðÛ·é±Æ𾦷é½ßÉÊ̼ÌƵĢéD105 * 1ビット幅のビットフィールドで,ブール値を保持したい場合に用いるべき 106 * データ型.デフォルトではBIT_FIELD_UINTと同一に定義しているが,ブー 107 * ル値を保持することを明示するために別の名称としている. 112 108 */ 113 109 #ifndef BIT_FIELD_BOOL … … 116 112 117 113 /* 118 * IuWFNgIDÌŬlÌè`114 * オブジェクトIDの最小値の定義 119 115 */ 120 #define TMIN_TSKID 1 /* ^XNIDÌŬl */ 121 #define TMIN_FLGID 1 /* CxgtOIDÌŬl */ 122 #define TMIN_DTQID 1 /* f[^L 123 [IDÌŬl */ 124 #define TMIN_CYCID 1 /* üúnhIDÌŬl */ 125 #define TMIN_ALMID 1 /* A[nhIDÌŬl */ 116 #define TMIN_TSKID 1 /* タスクIDの最小値 */ 117 #define TMIN_FLGID 1 /* イベントフラグIDの最小値 */ 118 #define TMIN_DTQID 1 /* データキューIDの最小値 */ 119 #define TMIN_CYCID 1 /* 周期ハンドラIDの最小値 */ 120 #define TMIN_ALMID 1 /* アラームハンドラIDの最小値 */ 126 121 127 122 /* 128 * DæxÌiKÌè`123 * 優先度の段階数の定義 129 124 */ 130 125 #define TNUM_TPRI (TMAX_TPRI - TMIN_TPRI + 1) … … 132 127 133 128 /* 134 * wb_t@Cð½È¢W 135 [ÌÖEÏÌé¾ 129 * ヘッダファイルを持たないモジュールの関数・変数の宣言 136 130 */ 137 131 #ifndef TOPPERS_MACRO_ONLY 138 132 139 133 /* 140 * eW 141 [Ìú»ikernel_cfg.cj 134 * 各モジュールの初期化(kernel_cfg.c) 142 135 */ 143 136 extern void initialize_object(void); 144 137 145 138 /* 146 * ú»[`ÌÀsikernel_cfg.cj139 * 初期化ルーチンの実行(kernel_cfg.c) 147 140 */ 148 141 extern void call_inirtn(void); 149 142 150 143 /* 151 * I¹[`ÌÀsikernel_cfg.cj144 * 終了処理ルーチンの実行(kernel_cfg.c) 152 145 */ 153 146 extern void call_terrtn(void); 154 147 155 148 /* 156 * ñ^XNReLXgpÌX^bNÌæikernel_cfg.cj149 * 非タスクコンテキスト用のスタック領域(kernel_cfg.c) 157 150 */ 158 extern const SIZE istksz; /* X^bNÌæÌTCYiÛß½lj*/159 extern STK_T *const istk; /* X^bNÌæÌæªÔn*/151 extern const SIZE istksz; /* スタック領域のサイズ(丸めた値) */ 152 extern STK_T *const istk; /* スタック領域の先頭番地 */ 160 153 #ifdef TOPPRES_ISTKPT 161 extern STK_T *const istkpt; /* X^bN|C^Ìúl*/154 extern STK_T *const istkpt; /* スタックポインタの初期値 */ 162 155 #endif /* TOPPERS_ISTKPT */ 163 156 164 157 /* 165 * J[l®ìóÔtOistartup.cj158 * カーネル動作状態フラグ(startup.c) 166 159 */ 167 160 extern bool_t kerflg; 168 161 169 162 /* 170 * J[lÌN®istartup.cj163 * カーネルの起動(startup.c) 171 164 */ 172 165 extern void sta_ker(void); 173 166 174 167 /* 175 * J[lÌI¹istartup.cj168 * カーネルの終了処理(startup.c) 176 169 */ 177 170 extern void exit_kernel(void); -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/kernel_int.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 11 11 * Copyright (C) 2011 by Meika Sugimoto 12 12 * 13 * ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 14 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 15 * ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 16 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 17 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 18 * R[hÉÜÜêÄ¢é±ÆD 19 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 20 * Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 21 gipÒ} 22 * j 23 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 24 * ØKèðfÚ·é±ÆD 25 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 26 * Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 27 * (a) Äzzɺ¤hL 28 gipÒ}j 29 AÈÇjÉCãLÌì 30 * \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 31 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 32 * ·é±ÆD 33 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 34 * ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 35 * {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 36 * ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 13 * 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ 14 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・ 15 * 再配布(以下,利用と呼ぶ)することを無償で許諾する. 16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権 17 * 表示,この利用条件および下記の無保証規定が,そのままの形でソース 18 * コード中に含まれていること. 19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用 20 * できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ 21 * ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保 22 * 証規定を掲載すること. 23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用 24 * できない形で再配布する場合には,次のいずれかの条件を満たすこと. 25 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作 26 * 権表示,この利用条件および下記の無保証規定を掲載すること. 27 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報 28 * 告すること. 29 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害 30 * からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また, 31 * 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ 32 * く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ39 * ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη40 * éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp41 * Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð42 * íÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 35 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 36 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 37 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負 38 * わない. 43 39 * 44 40 */ 45 41 46 42 /* 47 * kernel_cfg.c i¨æÑcfg1_out.cjpwb_t@C43 * kernel_cfg.c(およびcfg1_out.c)用ヘッダファイル 48 44 */ 49 45 … … 52 48 53 49 /* 54 * J[lWwb_t@C50 * カーネル標準ヘッダファイル 55 51 */ 56 52 #include "kernel_impl.h" 57 53 58 54 /* 59 * J[lÌewb_t@C55 * カーネルの各ヘッダファイル 60 56 */ 61 57 #include "task.h" … … 64 60 65 61 /* 66 * g£pbP[WÌwb_t@C62 * 拡張パッケージのヘッダファイル 67 63 */ 68 64 #include "time_event.h" … … 73 69 74 70 /* 75 * l[µ½V{ð³Éß·½ßÌwb_t@C71 * リネームしたシンボルを元に戻すためのヘッダファイル 76 72 */ 77 73 #include "kernel_unrename.h" -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/kernel_rename.def
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
-
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/kernel_rename.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
-
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/kernel_unrename.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
-
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/queue.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 5 5 * Copyright (C) 2011 by Meika Sugimoto 6 6 * 7 * ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 8 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 9 * ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 10 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 11 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 12 * R[hÉÜÜêÄ¢é±ÆD 13 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 14 * Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 15 gipÒ} 16 * j 17 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 18 * ØKèðfÚ·é±ÆD 19 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 20 * Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 21 * (a) Äzzɺ¤hL 22 gipÒ}j 23 AÈÇjÉCãLÌì 24 * \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 25 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 26 * ·é±ÆD 27 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 28 * ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 29 * {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 30 * ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 7 * 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ 8 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・ 9 * 再配布(以下,利用と呼ぶ)することを無償で許諾する. 10 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権 11 * 表示,この利用条件および下記の無保証規定が,そのままの形でソース 12 * コード中に含まれていること. 13 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用 14 * できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ 15 * ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保 16 * 証規定を掲載すること. 17 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用 18 * できない形で再配布する場合には,次のいずれかの条件を満たすこと. 19 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作 20 * 権表示,この利用条件および下記の無保証規定を掲載すること. 21 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報 22 * 告すること. 23 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害 24 * からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また, 25 * 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ 26 * く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 31 27 * 32 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ33 * ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη34 * éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp35 * Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð36 * íÈ¢D28 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 29 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 30 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 31 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負 32 * わない. 37 33 * 38 34 */ 39 35 40 36 /* 41 * L 42 [ìwb_ 37 * キュー操作ヘッダ 43 38 * 44 * SSPJ[lÅÍßñ̽ßÉCfbNXðgpµ½L 45 [ðp¢é 39 * SSPカーネルではメモリ節約のためにインデックスを使用したキューを用いる 46 40 */ 47 41 … … 49 43 #define TOPPERS_QUEUE_H 50 44 51 /* L 52 [ÌCfbNX */ 45 /* キューのインデックス */ 53 46 typedef uint8_t QUEIDX; 54 47 55 /* L 56 [\¢Ì */ 48 /* キュー構造体 */ 57 49 typedef struct 58 50 { … … 62 54 63 55 64 /* L 65 [wb_Ìú» */ 56 /* キューヘッダの初期化 */ 66 57 Inline void 67 58 queue_initialize(QUEUE *queue , QUEIDX queue_null) … … 70 61 } 71 62 72 /* wèµ½vfÌOÉV½ÈvfðÇÁ*/63 /* 指定した要素の前に新たな要素を追加 */ 73 64 Inline void 74 65 queue_insert_prev(QUEUE *top , QUEIDX queue , QUEIDX entry) … … 81 72 82 73 83 /* wèµ½L 84 [ÌÌvfðíµC»ÌCfbNXðÔ· */ 74 /* 指定したキューの次の要素を削除し,そのインデックスを返す */ 85 75 Inline QUEIDX 86 76 queue_delete_next(QUEUE *top , QUEIDX queue) … … 94 84 95 85 /* 96 * L 97 [ªó©Ç¤©ÌeXg 86 * キューが空かどうかのテスト 98 87 * 99 * queueÉÍL 100 [wb_ðwè·é±Æ 88 * queueにはキューヘッダを指定すること 101 89 */ 102 90 Inline bool_t -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/ssp_kernel_api.csv
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
-
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/ssp_kernel_check.tf
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 9 9 $ Nagoya Municipal Industrial Research Institute, JAPAN 10 10 $ 11 $ ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 12 $ Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 13 $ ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 $ (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 $ \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 16 $ R[hÉÜÜêÄ¢é±ÆD 17 $ (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 18 $ Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gipÒ} 20 $ j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 22 $ ØKèðfÚ·é±ÆD 23 $ (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 24 $ Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 25 $ (a) Äzzɺ¤hL 26 gipÒ}j 27 AÈÇjÉCãLÌì 28 $ \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 29 $ (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 30 $ ·é±ÆD 31 $ (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 32 $ ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 33 $ {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 34 $ ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 11 $ 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ 12 $ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・ 13 $ 再配布(以下,利用と呼ぶ)することを無償で許諾する. 14 $ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権 15 $ 表示,この利用条件および下記の無保証規定が,そのままの形でソース 16 $ コード中に含まれていること. 17 $ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用 18 $ できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ 19 $ ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保 20 $ 証規定を掲載すること. 21 $ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用 22 $ できない形で再配布する場合には,次のいずれかの条件を満たすこと. 23 $ (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作 24 $ 権表示,この利用条件および下記の無保証規定を掲載すること. 25 $ (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報 26 $ 告すること. 27 $ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害 28 $ からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また, 29 $ 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ 30 $ く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 35 31 $ 36 $ {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ37 $ ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη38 $ éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp39 $ Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð40 $ íÈ¢D32 $ 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 33 $ びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 34 $ る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 35 $ により直接的または間接的に生じたいかなる損害に関しても,その責任を負 36 $ わない. 41 37 $ 42 38 $ ====================================================================== 43 39 44 40 $ 45 $ ÖÌæªÔnÌ`FbN41 $ 関数の先頭番地のチェック 46 42 $ 47 43 $IF LENGTH(CHECK_FUNC_ALIGN) || LENGTH(CHECK_FUNC_NONNULL)$ 48 $ // ^XNÆ^XNáO[`ÌæªÔnÌ`FbN44 $ // タスクとタスク例外処理ルーチンの先頭番地のチェック 49 45 $tinib = SYMBOL("_kernel_tinib_table")$ 50 46 $FOREACH tskid TSK.ID_LIST$ … … 72 68 73 69 $ 74 $ X^bNÌæÌæªÔnÌ`FbN70 $ スタック領域の先頭番地のチェック 75 71 $ 76 72 $IF LENGTH(CHECK_STACK_ALIGN) || LENGTH(CHECK_STACK_NONNULL)$ 77 $ // ñ^XNReLXgpÌX^bNÌæÌæªÔnÌ`FbN73 $ // 非タスクコンテキスト用のスタック領域の先頭番地のチェック 78 74 $istk = PEEK(SYMBOL("_kernel_istk"), sizeof_void_ptr)$ 79 75 $IF LENGTH(CHECK_STACK_ALIGN) && (istk & (CHECK_STACK_ALIGN - 1))$ -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/ssp_kernel_def.csv
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
-
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/startup.c
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 11 11 * Copyright (C) 2010-2011 by Meika Sugimoto 12 12 * 13 * ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 14 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 15 * ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 16 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 17 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 18 * R[hÉÜÜêÄ¢é±ÆD 19 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 20 * Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 21 gipÒ} 22 * j 23 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 24 * ØKèðfÚ·é±ÆD 25 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 26 * Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 27 * (a) Äzzɺ¤hL 28 gipÒ}j 29 AÈÇjÉCãLÌì 30 * \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 31 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 32 * ·é±ÆD 33 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 34 * ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 35 * {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 36 * ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 13 * 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ 14 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・ 15 * 再配布(以下,利用と呼ぶ)することを無償で許諾する. 16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権 17 * 表示,この利用条件および下記の無保証規定が,そのままの形でソース 18 * コード中に含まれていること. 19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用 20 * できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ 21 * ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保 22 * 証規定を掲載すること. 23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用 24 * できない形で再配布する場合には,次のいずれかの条件を満たすこと. 25 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作 26 * 権表示,この利用条件および下記の無保証規定を掲載すること. 27 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報 28 * 告すること. 29 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害 30 * からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また, 31 * 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ 32 * く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ39 * ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη40 * éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp41 * Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð42 * íÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 35 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 36 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 37 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負 38 * わない. 43 39 * 44 40 */ 45 41 46 42 /* 47 * J[lÌú»ÆI¹43 * カーネルの初期化と終了処理 48 44 */ 49 45 … … 54 50 55 51 /* 56 * g[XO}NÌftHgè`52 * トレースログマクロのデフォルト定義 57 53 */ 58 54 #ifndef LOG_KER_ENTER … … 76 72 77 73 /* 78 * J[l®ìóÔtO74 * カーネル動作状態フラグ 79 75 * 80 * X^[gAbv[`ÅCfalsei0jÉú»³êé±ÆðúÒµÄ81 * ¢éD76 * スタートアップルーチンで,false(=0)に初期化されることを期待して 77 * いる. 82 78 */ 83 79 bool_t kerflg = false; 84 80 85 81 /* 86 * J[lÌN®87 * NMI ðSÄÌݪ}XN³ê½óÔ(SÝbNóÔÉ)ÅÄÑo³êéD82 * カーネルの起動 83 * NMIを除く全ての割込みがマスクされた状態(全割込みロック状態に相当)で呼び出される. 88 84 */ 89 85 void … … 97 93 98 94 /* 99 * J[lÌ®ìðJn·éD95 * カーネルの動作を開始する. 100 96 */ 101 97 kerflg = true; 102 98 103 /* fBXpb`ðN®µC^XNÌ®ìðJn·é*/99 /* ディスパッチャを起動し,タスクの動作を開始する */ 104 100 LOG_KER_ENTER(); 105 101 start_dispatch(); … … 112 108 113 109 /* 114 * J[lÌI¹110 * カーネルの終了 115 111 */ 116 112 ER … … 122 118 123 119 /* 124 * ÝbNóÔÉÚs120 * 割込みロック状態に移行 125 121 */ 126 122 SIL_LOC_INT(); 127 123 128 124 /* 129 * J[l®ìÌI¹125 * カーネル動作の終了 130 126 */ 131 127 LOG_KER_LEAVE(); … … 133 129 134 130 /* 135 * J[lÌI¹ÌÄoµ131 * カーネルの終了処理の呼出し 136 132 * 137 * ñ^XNReLXgÉØè·¦ÄCexit_kernelðÄÑo·D133 * 非タスクコンテキストに切り換えて,exit_kernelを呼び出す. 138 134 */ 139 135 call_exit_kernel(); 140 136 141 137 /* 142 * SIL_UNL_INT ðÄÑo·ªC±±ÉB·é±ÆÍÈ¢D143 * Lq·éÌÍSIL_PRE_LOCÅé¾³êéϪ éêÉC144 * RpCªoÍ·éxð}§·é½ßÅ éD138 * SIL_UNL_INTを呼び出すが,ここに到達することはない. 139 * 記述するのはSIL_PRE_LOCで宣言される変数がある場合に, 140 * コンパイラが出力する警告を抑制するためである. 145 141 */ 146 142 SIL_UNL_INT(); … … 152 148 153 149 /* 154 * J[lÌI¹150 * カーネルの終了処理 155 151 */ 156 152 void … … 158 154 { 159 155 /* 160 * I¹[`ÌÀs156 * 終了処理ルーチンの実行 161 157 */ 162 158 call_terrtn(); 163 159 164 160 /* 165 * ^[Qbg˶ÌI¹161 * ターゲット依存の終了処理 166 162 */ 167 163 target_exit(); -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/sys_manage.c
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 9 9 * Copyright (C) 2010 by Meika Sugimoto 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 36 * ÆÓ·é±ÆD 11 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 13 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 16 * スコード中に含まれていること. 17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 20 * の無保証規定を掲載すること. 21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 23 * と. 24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 25 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 27 * 報告すること. 28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 30 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 32 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 */ 45 41 46 42 /* 47 * VXeóÔÇ@\43 * システム状態管理機能 48 44 */ 49 45 … … 53 49 54 50 /* 55 * g[XO}NÌftHgè`51 * トレースログマクロのデフォルト定義 56 52 */ 57 53 … … 145 141 146 142 /* 147 * CPU bNóÔÖÌÚs143 * CPUロック状態への移行 148 144 */ 149 145 #ifdef TOPPERS_loc_cpu … … 170 166 171 167 /* 172 * CPU bNóÔÖÌÚsiñ^XNReLXgpj168 * CPUロック状態への移行(非タスクコンテキスト用) 173 169 */ 174 170 #ifdef TOPPERS_iloc_cpu … … 195 191 196 192 /* 197 * CPU bNóÔÌð193 * CPUロック状態の解除 198 194 * 199 * CPU bNÍCfBXpb`ªKvÆÈéT[rXR[ðÄÑo·±200 * ÆÍÅ«È¢½ßCCPUbNóÔÌðÉfBXpb`ðN®·é201 * KvÍÈ¢D195 * CPUロック中は,ディスパッチが必要となるサービスコールを呼び出すこ 196 * とはできないため,CPUロック状態の解除時にディスパッチャを起動する 197 * 必要はない. 202 198 */ 203 199 #ifdef TOPPERS_unl_cpu … … 224 220 225 221 /* 226 * CPU bNóÔÌðiñ^XNReLXgpj222 * CPUロック状態の解除(非タスクコンテキスト用) 227 223 * 228 * CPU bNÍCfBXpb`ªKvÆÈéT[rXR[ðÄÑo·±229 * ÆÍÅ«È¢½ßCCPUbNóÔÌðÉfBXpb`ÌN®ðv230 * ·éKvÍÈ¢D224 * CPUロック中は,ディスパッチが必要となるサービスコールを呼び出すこ 225 * とはできないため,CPUロック状態の解除時にディスパッチャの起動を要 226 * 求する必要はない. 231 227 */ 232 228 #ifdef TOPPERS_iunl_cpu … … 253 249 254 250 /* 255 * fBXpb`ÌÖ~251 * ディスパッチの禁止 256 252 */ 257 253 #ifdef TOPPERS_dis_dsp … … 278 274 279 275 /* 280 * fBXpb`ÌÂ276 * ディスパッチの許可 281 277 */ 282 278 #ifdef TOPPERS_ena_dsp … … 309 305 310 306 /* 311 * ReLXgÌQÆ307 * コンテキストの参照 312 308 */ 313 309 #ifdef TOPPERS_sns_ctx … … 328 324 329 325 /* 330 * CPU bNóÔÌQÆ326 * CPUロック状態の参照 331 327 */ 332 328 #ifdef TOPPERS_sns_loc … … 347 343 348 344 /* 349 * fBXpb`Ö~óÔÌQÆ345 * ディスパッチ禁止状態の参照 350 346 */ 351 347 #ifdef TOPPERS_sns_dsp … … 366 362 367 363 /* 368 * fBXpb`Û¯óÔÌQÆ364 * ディスパッチ保留状態の参照 369 365 */ 370 366 #ifdef TOPPERS_sns_dpn … … 386 382 387 383 /* 388 * J[lñ®ìóÔÌQÆ384 * カーネル非動作状態の参照 389 385 */ 390 386 #ifdef TOPPERS_sns_ker -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/task.c
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 11 11 * Copyright (C) 2010 by Meika Sugimoto 12 12 * 13 * ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 14 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 15 * ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 16 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 17 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 18 * R[hÉÜÜêÄ¢é±ÆD 19 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 20 * Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 21 gipÒ} 22 * j 23 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 24 * ØKèðfÚ·é±ÆD 25 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 26 * Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 27 * (a) Äzzɺ¤hL 28 gipÒ}j 29 AÈÇjÉCãLÌì 30 * \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 31 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 32 * ·é±ÆD 33 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 34 * ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 35 * {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 36 * ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 13 * 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ 14 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・ 15 * 再配布(以下,利用と呼ぶ)することを無償で許諾する. 16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権 17 * 表示,この利用条件および下記の無保証規定が,そのままの形でソース 18 * コード中に含まれていること. 19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用 20 * できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ 21 * ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保 22 * 証規定を掲載すること. 23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用 24 * できない形で再配布する場合には,次のいずれかの条件を満たすこと. 25 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作 26 * 権表示,この利用条件および下記の無保証規定を掲載すること. 27 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報 28 * 告すること. 29 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害 30 * からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また, 31 * 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ 32 * く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ39 * ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη40 * éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp41 * Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð42 * íÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 35 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 36 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 37 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負 38 * わない. 43 39 * 44 40 */ … … 48 44 49 45 /* 50 * g[XO}NÌftHgè`46 * トレースログマクロのデフォルト定義 51 47 */ 52 48 … … 60 56 61 57 62 extern const intptr_t tinib_exinf[]; /* ^XNÌg£îñ*/63 extern const TASK tinib_task[]; /* ^XNÌN®Ôn*/64 extern const uint_t tinib_epriority[]; /* ^XNÌÀsDæxià\»j*/65 66 /* àÖÌvg^Cvé¾*/58 extern const intptr_t tinib_exinf[]; /* タスクの拡張情報 */ 59 extern const TASK tinib_task[]; /* タスクの起動番地 */ 60 extern const uint_t tinib_epriority[]; /* タスクの実行時優先度(内部表現) */ 61 62 /* 内部関数のプロトタイプ宣言 */ 67 63 Inline bool_t primap_empty(void); 68 64 Inline bool_t primap_test(uint_t pri); … … 76 72 77 73 /* 78 * ÀsóÔ^XNÌ»ÝDæx74 * 実行状態タスクの現在優先度 79 75 */ 80 76 uint_t runtsk_curpri; 81 77 82 78 /* 83 * ÀsóÔ^XNÌN®Dæx79 * 実行状態タスクの起動時優先度 84 80 */ 85 81 uint_t runtsk_ipri; 86 82 87 83 /* 88 * fBL 89 [T[`̽ßÌrbg}bv 84 * レディキューサーチのためのビットマップ 90 85 */ 91 86 volatile uint_t ready_primap; 92 87 93 88 /* 94 * N®vL 95 [COÌrbg}bv 89 * 起動要求キューイングのビットマップ 96 90 */ 97 91 uint_t actque_bitmap; 98 92 99 93 /* 100 * ^XNfBXpb`N®vtO94 * タスクディスパッチ起動要求フラグ 101 95 */ 102 96 bool_t reqflg; 103 97 104 98 /* 105 * fBXpb`Ö~óÔ99 * ディスパッチ禁止状態 106 100 */ 107 101 bool_t disdsp; 108 102 109 103 /* 110 * read_primap Ìúl104 * read_primapの初期値 111 105 */ 112 106 extern const uint_t init_rdypmap; … … 117 111 118 112 /* 119 * ^XNID©çÌN®Dæxæ¾(^XNReLXgp)113 * タスクIDからの起動時優先度取得(タスクコンテキスト用) 120 114 */ 121 115 uint_t … … 138 132 139 133 /* 140 * ^XNID©çÌN®Dæxæ¾(ñ^XNReLXgp)134 * タスクIDからの起動時優先度取得(非タスクコンテキスト用) 141 135 */ 142 136 #ifdef TOPPERS_get_ipri … … 151 145 152 146 /* 153 * rbg}bvT[`Ö147 * ビットマップサーチ関数 154 148 * 155 * bitmap àÌ1ÌrbgÌàCÅàºÊiEjÌàÌðT[`µC»Ìrb156 * gÔðÔ·DrbgÔÍCźÊrbgð0Æ·éDbitmapÉ0ðwè157 * µÄÍÈçÈ¢D±ÌÖÅÍCbitmapª8rbgÅ é±Æð¼èµC158 * uint8_t ^ƵĢéD149 * bitmap内の1のビットの内,最も下位(右)のものをサーチし,そのビッ 150 * ト番号を返す.ビット番号は,最下位ビットを0とする.bitmapに0を指定 151 * してはならない.この関数では,bitmapが8ビットであることを仮定し, 152 * uint8_t型としている. 159 153 * 160 * rbgT[`½ßðÂvZbTÅÍCrbgT[`½ßðg¤æ¤É161 * «¼µ½ûªø¦ªÇ¢êª éD±Ìæ¤ÈêÉÍC^[Qbg162 * ˶ÅrbgT[`½ßðgÁ½bitmap_searchðè`µC163 * OMIT_BITMAP_SEARCH ð}Nè`·êÎæ¢DܽCrbgT[`½ßÌ164 * T[`ûüªtÈÇÌRÅDæxÆrbgÆÌÎðÏXµ½¢êÉ165 * ÍCPRIMAP_BITð}Nè`·êÎæ¢D154 * ビットサーチ命令を持つプロセッサでは,ビットサーチ命令を使うように 155 * 書き直した方が効率が良い場合がある.このような場合には,ターゲット 156 * 依存部でビットサーチ命令を使ったbitmap_searchを定義し, 157 * OMIT_BITMAP_SEARCHをマクロ定義すればよい.また,ビットサーチ命令の 158 * サーチ方向が逆などの理由で優先度とビットとの対応を変更したい場合に 159 * は,PRIMAP_BITをマクロ定義すればよい. 166 160 * 167 * ܽCWCuÉffsª éÈçCÌæ¤Éè`µÄWCu168 * ðgÁ½ûªø¦ªÇ¢Â\«à éD161 * また,標準ライブラリにffsがあるなら,次のように定義して標準ライブ 162 * ラリを使った方が効率が良い可能性もある. 169 163 * #define bitmap_search(bitmap) (ffs(bitmap) - 1) 170 164 */ … … 201 195 202 196 /* 203 * N®Dæxrbg}bvªó©Ì`FbN197 * 起動時優先度ビットマップが空かのチェック 204 198 */ 205 199 Inline bool_t … … 210 204 211 205 /* 212 * wèµ½N®DæxÌN®Dæxrbg}bvªZbg³êÄ¢é©Ç¤©Ì`FbN206 * 指定した起動時優先度の起動時優先度ビットマップがセットされているかどうかのチェック 213 207 */ 214 208 Inline bool_t … … 219 213 220 214 /* 221 * N®Dæxrbg}bvÌT[`215 * 起動時優先度ビットマップのサーチ 222 216 */ 223 217 Inline uint_t … … 228 222 229 223 /* 230 * N®Dæxrbg}bvÌZbg224 * 起動時優先度ビットマップのセット 231 225 */ 232 226 Inline void … … 237 231 238 232 /* 239 * N®Dæxrbg}bvÌNA233 * 起動時優先度ビットマップのクリア 240 234 */ 241 235 Inline void … … 246 240 247 241 /* 248 * ÅDæÊ^XNÌT[`242 * 最高優先順位タスクのサーチ 249 243 */ 250 244 … … 261 255 #ifdef TOPPERS_tskdmt 262 256 /* 263 * wèµ½N®DæxÌ^XNªÀsÅ«éóԩǤ©ÌeXg257 * 指定した起動時優先度のタスクが実行できる状態かどうかのテスト 264 258 * 265 259 */ … … 273 267 274 268 /* 275 * ^XNÇW 276 [Ìú» 269 * タスク管理モジュールの初期化 277 270 */ 278 271 … … 283 276 initialize_task(void) 284 277 { 285 /* N®Dæxrbg}bvÌú»*/278 /* 起動時優先度ビットマップの初期化 */ 286 279 ready_primap = init_rdypmap; 287 280 288 /* ^XNDæxÌú»*/281 /* タスク優先度の初期化 */ 289 282 runtsk_curpri = TSKPRI_NULL; 290 283 runtsk_ipri = TSKPRI_NULL; 291 284 292 /* N®vL 293 [COÌú» */ 285 /* 起動要求キューイングの初期化 */ 294 286 actque_bitmap = 0U; 295 287 296 /* ÝÖ~tOÌú»*/288 /* 割込み禁止フラグの初期化 */ 297 289 disdsp = false; 298 290 } … … 301 293 302 294 /* 303 * ^XNÌN®295 * タスクの起動 304 296 */ 305 297 … … 314 306 315 307 /* 316 * ÀsóÔ^XNÌ»ÝDæxÆøÅwè³ê½317 * N®ÎÛ^XNÌúDæxðärµCÀsóÔ^XNð318 * ÏX·é©»è·éD308 * 実行状態タスクの現在優先度と引数で指定された 309 * 起動対象タスクの初期優先度を比較し,実行状態タスクを 310 * 変更するか判定する. 319 311 * 320 * ½¾µÀsóÔ^XNðÏX·éêÍfBXpb`Ö~óÔàQÆ·éD312 * ただし実行状態タスクを変更する場合はディスパッチ禁止状態も参照する. 321 313 */ 322 314 if(ipri < runtsk_curpri) { … … 334 326 335 327 /* 336 * ^XNÌÀs328 * タスクの実行 337 329 */ 338 330 … … 342 334 run_task(uint_t ipri) 343 335 { 344 uint_t next_pri; /* ÉÀsJn·é^XNÌN®Dæx*/345 uint_t saved_ipri; /* ÄÑoµ³^XNÌúDæx*/346 uint_t saved_curpri; /* ÄÑoµ³^XNÌ»ÝDæx*/336 uint_t next_pri; /* 次に実行開始するタスクの起動時優先度 */ 337 uint_t saved_ipri; /* 呼び出し元タスクの初期優先度 */ 338 uint_t saved_curpri; /* 呼び出し元タスクの現在優先度 */ 347 339 bool_t cont; 348 340 349 /* ÅDæÊ^XNðÀs·éOÉC»ÝÀsÌ^XNÌ»ÝDæxÆúDæxðÛ¶·é*/341 /* 最高優先順位タスクを実行する前に,現在実行中のタスクの現在優先度と初期優先度を保存する */ 350 342 next_pri = ipri; 351 343 saved_ipri = runtsk_ipri; … … 353 345 354 346 do { 355 /* Às·é^XNÌ»ÝDæxðÀsDæxÉÝè·é*/347 /* 実行するタスクの現在優先度を実行時優先度に設定する */ 356 348 runtsk_curpri = tinib_epriority[next_pri]; 357 349 runtsk_ipri = next_pri; 358 350 359 /* CPU bNð*/351 /* CPUロック解除 */ 360 352 t_unlock_cpu(); 361 353 362 /* ^XNÀsJn*/354 /* タスク実行開始 */ 363 355 (*((TASK)(tinib_task[next_pri])))(tinib_exinf[next_pri]); 364 356 365 357 if (t_sense_lock()) { 366 358 /* 367 * CPU bNóÔÅext_tskªÄÎê½êÍCCPUbNððµ368 * Ä©ç^XNðI¹·éDÀãÍCT[rXR[àÅÌCPU369 * bNðȪ·êÎ梾¯D359 * CPUロック状態でext_tskが呼ばれた場合は,CPUロックを解除し 360 * てからタスクを終了する.実装上は,サービスコール内でのCPU 361 * ロックを省略すればよいだけ. 370 362 */ 371 363 } 372 364 else { 373 365 /* 374 * ±Ìt_lock_cpuð±ÌºÌdisdspÌÝèÌæ¤ÉµÈ¢ÌÍC375 * CPU bNÉÄxt_lock_cpuðÄÎÈ¢½ßÅ éD366 * このt_lock_cpuをこの下のdisdspの設定のようにしないのは, 367 * CPUロック中に再度t_lock_cpuを呼ばないためである. 376 368 */ 377 369 t_lock_cpu(); 378 370 } 379 371 380 /* ÝDæx}XNÍSðóÔÌ͸ÈÌÅC½àµÈ¢*/372 /* 割込み優先度マスクは全解除状態のはずなので,何もしない */ 381 373 382 374 /* 383 * fBXpb`Ö~óÔÅext_tskªÄÎê½êÍCfBXpb384 * `ÂóÔɵĩç^XNðI¹·éD375 * ディスパッチ禁止状態でext_tskが呼ばれた場合は,ディスパッ 376 * チ許可状態にしてからタスクを終了する. 385 377 * 386 * {ÍȺÌæ¤ÉLq·×«Å éªC¢¸êɹædisdspð387 * false É·ê΢¢½ßCPÉfalseÉÝè·éD378 * 本来は以下のように記述すべきであるが,いずれにせよdisdspを 379 * falseにすればいいため,単にfalseに設定する. 388 380 * 389 381 * if (disdsp) { … … 393 385 disdsp = false; 394 386 395 /* rbg}bvNAD*/387 /* ビットマップクリア. */ 396 388 primap_clear(next_pri); 397 389 398 390 cont = false; 399 391 400 /* ^XNN®vL 401 [COÌ`FbN */ 392 /* タスク起動要求キューイングのチェック */ 402 393 if (actque_test(next_pri)) { 403 394 actque_clear(next_pri); … … 405 396 } 406 397 407 /* ¢¸ê©Ì^XNªÀsÂ\óÔÉÈÁÄ¢é©*/398 /* いずれかのタスクが実行可能状態になっているか */ 408 399 if(!primap_empty()) 409 400 { 410 /* ßèæ^XNÌ»ÝDæxæè¢N®DæxðàÂ^XNªN®³ê½©*/401 /* 戻り先タスクの現在優先度より高い起動時優先度をもつタスクが起動されたか */ 411 402 next_pri = search_schedtsk(); 412 403 if(saved_curpri > next_pri) … … 424 415 425 416 /* 426 * ^XNfBXpb`417 * タスクディスパッチャ 427 418 */ 428 419 … … 434 425 do { 435 426 if(!primap_empty()) { 436 /* ^XNÌJn*/427 /* タスクの開始 */ 437 428 run_task(search_schedtsk()); 438 429 } -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/task.h
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 11 11 * Copyright (C) 2011 by Meika Sugimoto 12 12 * 13 * ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 14 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 15 * ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 16 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 17 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 18 * R[hÉÜÜêÄ¢é±ÆD 19 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 20 * Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 21 gipÒ} 22 * j 23 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 24 * ØKèðfÚ·é±ÆD 25 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 26 * Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 27 * (a) Äzzɺ¤hL 28 gipÒ}j 29 AÈÇjÉCãLÌì 30 * \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 31 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 32 * ·é±ÆD 33 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 34 * ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 35 * {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 36 * ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 13 * 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ 14 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・ 15 * 再配布(以下,利用と呼ぶ)することを無償で許諾する. 16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権 17 * 表示,この利用条件および下記の無保証規定が,そのままの形でソース 18 * コード中に含まれていること. 19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用 20 * できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ 21 * ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保 22 * 証規定を掲載すること. 23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用 24 * できない形で再配布する場合には,次のいずれかの条件を満たすこと. 25 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作 26 * 権表示,この利用条件および下記の無保証規定を掲載すること. 27 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報 28 * 告すること. 29 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害 30 * からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また, 31 * 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ 32 * く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ39 * ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη40 * éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp41 * Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð42 * íÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 35 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 36 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 37 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負 38 * わない. 43 39 * 44 40 */ … … 51 47 52 48 /* 53 * ^XNDæxÌà\»EO\»Ï·}N49 * タスク優先度の内部表現・外部表現変換マクロ 54 50 */ 55 51 #define INT_PRIORITY(x) ((uint_t)((x) - TMIN_TPRI)) 56 52 57 53 /* 58 * ^XNIDÌÅålikernel_cfg.cj54 * タスクIDの最大値(kernel_cfg.c) 59 55 */ 60 56 extern const ID tmax_tskid; 61 57 62 58 /* 63 * ^XNÌ59 * タスクの数 64 60 */ 65 61 #define tnum_tsk ((uint_t)(tmax_tskid - TMIN_TSKID + 1)) 66 62 67 63 /* 68 * ÀsÂ\óÔÌ^XNªÈ¢ÉÀs^XNÌ»ÝDæxÉÝè·él64 * 実行可能状態のタスクがない時に実行中タスクの現在優先度に設定する値 69 65 */ 70 66 #define TSKPRI_NULL (UINT_MAX) … … 72 68 73 69 /* 74 * fBL 75 [T[`̽ßÌrbg}bv 70 * レディキューサーチのためのビットマップ 76 71 */ 77 72 extern volatile uint_t ready_primap; 78 73 79 74 /* 80 * N®vL 81 [COÌrbg}bv 75 * 起動要求キューイングのビットマップ 82 76 */ 83 77 extern uint_t actque_bitmap; 84 78 85 79 /* 86 * fBXpb`^^XNáO[`N®vtO87 * 88 * Ýnh^CPUáOnhÌoûÉCfBXpb`ܽÍ89 * ^XNáO[`ÌN®ðv·é±Æð¦·tOD80 * ディスパッチ/タスク例外処理ルーチン起動要求フラグ 81 * 82 * 割込みハンドラ/CPU例外ハンドラの出口処理に,ディスパッチまたは 83 * タスク例外処理ルーチンの起動を要求することを示すフラグ. 90 84 */ 91 85 extern bool_t reqflg; 92 86 93 87 /* 94 * fBXpb`Ö~óÔ95 * 96 * fBXpb`Ö~óÔÅ é±Æð¦·tOD88 * ディスパッチ禁止状態 89 * 90 * ディスパッチ禁止状態であることを示すフラグ. 97 91 */ 98 92 extern bool_t disdsp; 99 93 100 94 /* 101 * ÀsóÔ^XNÌ»ÝDæx102 * 103 * ÀsÌ^XNÉÀsDæxªÝè³êÄ¢êÎÀsDæxªC104 * Ýè³êĢȯêÎN®DæxªÝè³êéD95 * 実行状態タスクの現在優先度 96 * 97 * 実行中のタスクに実行時優先度が設定されていれば実行時優先度が, 98 * 設定されていなければ起動時優先度が設定される. 105 99 */ 106 100 extern uint_t runtsk_curpri; 107 101 108 102 /* 109 * ÀsóÔ^XNÌN®Dæx103 * 実行状態タスクの起動時優先度 110 104 */ 111 105 extern uint_t runtsk_ipri; 112 106 113 107 /* 114 * ^XNÇW 115 [Ìú» 116 * 117 * SÄÌ^XNðú»·éDe^XNÍ^XN®«ÉTA_ACTªÝè³êÄ¢êÎ 118 * ÀsÂ\óÔC»¤ÅÈ¢êÍx~óÔÆÈéD 108 * タスク管理モジュールの初期化 109 * 110 * 全てのタスクを初期化する.各タスクはタスク属性にTA_ACTが設定されていれば 111 * 実行可能状態,そうでない場合は休止状態となる. 119 112 * 120 * ܽAfBXpb`ÂtOðfBXpb`ÂóÔÉÝè·éD113 * また、ディスパッチ許可フラグをディスパッチ許可状態に設定する. 121 114 * 122 * {ÖÍRtBM 123 [^ª¶¬·éobject_initializeÈOÅÄñÅÍÈçÈ¢D 115 * 本関数はコンフィギュレータが生成するobject_initialize以外で呼んではならない. 124 116 */ 125 117 extern void initialize_task(void); 126 118 127 119 /* 128 * ^XNÌN®129 * 130 * ipri Åwèµ½N®DæxðÂ^XNðÀsÂ\óÔÉJÚ³¹éD131 * {ÖðÀs·é±ÆÉæèvGvgª¶·éêÍtrueðC132 * »¤ÅÈ¢êÍfalseðÔ·D133 * 134 * {ÖÍCPUbNóÔCSÝbNðóÔCÝDæx}XNSðóÔÅ135 * ÄÑo·±ÆD120 * タスクの起動 121 * 122 * ipriで指定した起動時優先度を持つタスクを実行可能状態に遷移させる. 123 * 本関数を実行することによりプリエンプトが発生する場合はtrueを, 124 * そうでない場合はfalseを返す. 125 * 126 * 本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で 127 * 呼び出すこと. 136 128 */ 137 129 extern bool_t make_active(uint_t ipri); 138 130 139 131 /* 140 * wèµ½N®DæxÌ^XNªx~óԩǤ©ÌeXg141 * 142 * ipri Åwèµ½N®DæxðÂ^XNªx~óÔÅ êÎ143 * true ð»êÈOiÀsÂ\óÔCÀsÂ\óÔjÅ êÎfalseðÔ·D144 * 145 * {ÖÍCPUbNóÔCSÝbNðóÔCÝDæx}XNSðóÔÅ146 * ÄÑo·±ÆD132 * 指定した起動時優先度のタスクが休止状態かどうかのテスト 133 * 134 * ipriで指定した起動時優先度を持つタスクが休止状態であれば 135 * trueをそれ以外(実行可能状態,実行可能状態)であればfalseを返す. 136 * 137 * 本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で 138 * 呼び出すこと. 147 139 */ 148 140 extern bool_t test_dormant(uint_t ipri); 149 141 150 142 /* 151 * ÅDæÊ^XNÌT[`152 * 153 * ÀsÂ\óÔÌ^XNÌ©çÅàDæʪ¢^XNÌúDæxð154 * Ô·D155 * 156 * {ÖÍCPUbNóÔCSÝbNðóÔCÝDæx}XNSðóÔÅ157 * ÄÑo·±ÆD143 * 最高優先順位タスクのサーチ 144 * 145 * 実行可能状態のタスクの中から最も優先順位が高いタスクの初期優先度を 146 * 返す. 147 * 148 * 本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で 149 * 呼び出すこと. 158 150 */ 159 151 extern uint_t search_schedtsk(void); 160 152 161 153 /* 162 * ^XNÌÀs163 * 164 * ipri Åwèµ½N®DæxðÂ^XNðÀs·éD165 * {Ö©çÀsµ½^XN©çT[rXR[ðoRµÄ166 * ÄAIÉÄÎêé±Æà éD167 * 168 * {ÖÍCPUbNóÔCSÝbNðóÔCÝDæx}XNSðóÔÅ169 * ÄÑo·±ÆD154 * タスクの実行 155 * 156 * ipriで指定した起動時優先度を持つタスクを実行する. 157 * 本関数から実行したタスクからサービスコールを経由して 158 * 再帰的に呼ばれることもある. 159 * 160 * 本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で 161 * 呼び出すこと. 170 162 */ 171 163 extern void run_task(uint_t ipri); 172 164 173 165 /* 174 * ^XNfBXpb`175 * 176 * J[lú»®¹ãÉÄÑo³êCÅDæÊÆÈÁ½^XNðÀs·éD177 * 178 * {ÖÍCPUbNóÔCSÝbNðóÔCÝDæx}XNSðóÔÅ179 * ÄÑo·±ÆD180 * ȨC{Ö©çÍ^[µÈ¢D166 * タスクディスパッチャ 167 * 168 * カーネル初期化完了後に呼び出され,最高優先順位となったタスクを実行する. 169 * 170 * 本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で 171 * 呼び出すこと. 172 * なお,本関数からはリターンしない. 181 173 * 182 174 */ … … 184 176 185 177 /* 186 * ^XNÌN®Dæxæ¾(^XNReLXgp)187 * 188 * tskid Åwèµ½^XNÌN®Dæxðæ¾·éD189 * tskid ÍTMIN_TSKIDÈãCtmax_tskidȺÌlCàµÍTSK_SELFÅ190 * wèµÈ¯êÎÈçÈ¢D178 * タスクの起動時優先度取得(タスクコンテキスト用) 179 * 180 * tskidで指定したタスクの起動時優先度を取得する. 181 * tskidはTMIN_TSKID以上,tmax_tskid以下の値,もしくはTSK_SELFで 182 * 指定しなければならない. 191 183 */ 192 184 extern uint_t get_ipri_self(ID tskid); 193 185 194 186 /* 195 * ^XNÌN®Dæxæ¾(ñ^XNReLXgp)196 * 197 * tskid Åwèµ½^XNÌN®Dæxðæ¾·éD198 * tskid ÍTMIN_TSKIDÈãCtmax_tskidȺÌlÅwèµÈ¯êÎÈçÈ¢D187 * タスクの起動時優先度取得(非タスクコンテキスト用) 188 * 189 * tskidで指定したタスクの起動時優先度を取得する. 190 * tskidはTMIN_TSKID以上,tmax_tskid以下の値で指定しなければならない. 199 191 */ 200 192 extern uint_t get_ipri(ID tskid); 201 193 202 194 203 /* N®vL 204 [COrbg}bvÌì */ 195 /* 起動要求キューイングビットマップの操作 */ 205 196 #define ACTQUE_BIT(ipri) (1U << (ipri)) 206 197 207 /* N®vL 208 [COÌZbg */ 198 /* 起動要求キューイングのセット */ 209 199 Inline 210 200 void actque_set(uint_t ipri) … … 213 203 } 214 204 215 /* N®vL 216 [COÌNA */ 205 /* 起動要求キューイングのクリア */ 217 206 Inline 218 207 void actque_clear(uint_t ipri) … … 221 210 } 222 211 223 /* N®vL 224 [COÌ`FbN */ 212 /* 起動要求キューイング数のチェック */ 225 213 Inline 226 214 bool_t actque_test(uint_t ipri) -
Property svn:mime-type
set to
-
ssp_qb_r5f100le_cs/trunk/kernel/task_manage.c
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 11 11 * Copyright (C) 2011 by Meika Sugimoto 12 12 * 13 * ãLì ÒÍCÈºÌ (1)`(4) Ìðð½·êÉÀèC{\tgEF 14 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»EüÏE 15 * ÄzziȺCpÆÄÔj·é±Æð³Åø·éD 16 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 17 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[X 18 * R[hÉÜÜêÄ¢é±ÆD 19 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉgp 20 * Å«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 21 gipÒ} 22 * j 23 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺLÌ³Û 24 * ØKèðfÚ·é±ÆD 25 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉgp 26 * Å«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·±ÆD 27 * (a) Äzzɺ¤hL 28 gipÒ}j 29 AÈÇjÉCãLÌì 30 * \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 31 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉñ 32 * ·é±ÆD 33 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹Q 34 * ©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆDܽC 35 * {\tgEFAÌ[UܽÍGh[U©çÌ¢©ÈéRÉîà 36 * ¿©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 13 * 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ 14 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・ 15 * 再配布(以下,利用と呼ぶ)することを無償で許諾する. 16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権 17 * 表示,この利用条件および下記の無保証規定が,そのままの形でソース 18 * コード中に含まれていること. 19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用 20 * できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ 21 * ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保 22 * 証規定を掲載すること. 23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用 24 * できない形で再配布する場合には,次のいずれかの条件を満たすこと. 25 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作 26 * 権表示,この利用条件および下記の無保証規定を掲載すること. 27 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報 28 * 告すること. 29 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害 30 * からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また, 31 * 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ 32 * く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨æ39 * ÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚIÉη40 * éK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEFAÌp41 * Éæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»ÌÓCð42 * íÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ 35 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す 36 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用 37 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負 38 * わない. 43 39 * 44 40 */ 45 41 46 42 /* 47 * ^XNÇ@\43 * タスク管理機能 48 44 */ 49 45 … … 53 49 54 50 /* 55 * g[XO}NÌftHgè`51 * トレースログマクロのデフォルト定義 56 52 */ 57 53 #ifndef LOG_ACT_TSK_ENTER … … 73 69 74 70 /* 75 * ^XNÌN®71 * タスクの起動 76 72 */ 77 73 #ifdef TOPPERS_act_tsk … … 113 109 114 110 /* 115 * ^XNÌN®iñ^XNReLXgpj111 * タスクの起動(非タスクコンテキスト用) 116 112 */ 117 113 -
Property svn:mime-type
set to
Note:
See TracChangeset
for help on using the changeset viewer.