Ignore:
Timestamp:
Jun 27, 2017, 10:53:32 AM (7 years ago)
Author:
ertl-honda
Message:

3.1.0を反映

File:
1 edited

Legend:

Unmodified
Added
Removed
  • asp3_wo_tecs/trunk/arch/arm_gcc/doc/arm_design.txt

    r302 r306  
    33                ARMコア依存部 設計メモ
    44
    5                 対応バージョン: Release 3.B.0
    6                 最終更新: 2015å¹´8月18日
    7 
     5                対応バージョン: Release 3.1.0
     6                最終更新: 2016å¹´5月14日
     7
     8----------------------------------------------------------------------
     9 TOPPERS/ASP Kernel
     10     Toyohashi Open Platform for Embedded Real-Time Systems/
     11     Advanced Standard Profile Kernel
     12
     13 Copyright (C) 2014-2016 by Embedded and Real-Time Systems Laboratory
     14             Graduate School of Information Science, Nagoya Univ., JAPAN
     15 
     16 ä¸Šè¨˜è‘—作権è€
     17は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     18 ã‚¢ï¼ˆæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚’改変したものを含む.以下同じ)を使用・複製・改
     19 å¤‰ãƒ»å†é
     20å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
     21 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     22     æ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定が,そのままの形でソー
     23     ã‚¹ã‚³ãƒ¼ãƒ‰ä¸­ã«å«ã¾ã‚Œã¦ã„ること.
     24 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     25     ç”¨ã§ãã‚‹å½¢ã§å†é
     26å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
     27å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
     28     è€
     29マニュアルなど)に,上記の著作権表示,この利用条件および下記
     30     ã®ç„¡ä¿è¨¼è¦å®šã‚’掲載すること.
     31 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     32     ç”¨ã§ããªã„形で再é
     33å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
     34     ã¨ï¼Ž
     35   (a) 再é
     36å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
     37マニュアルなど)に,上記の著
     38       ä½œæ¨©è¡¨ç¤ºï¼Œã“の利用条件および下記の無保証規定を掲載すること.
     39   (b) 再é
     40å¸ƒã®å½¢æ
     41‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
     42       å ±å‘Šã™ã‚‹ã“と.
     43 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     44     å®³ã‹ã‚‰ã‚‚,上記著作権è€
     45およびTOPPERSプロジェクトをå
     46è²¬ã™ã‚‹ã“と.
     47     ã¾ãŸï¼Œæœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒ¦ãƒ¼ã‚¶ã¾ãŸã¯ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ã„かなる理
     48     ç”±ã«åŸºã¥ãè«‹æ±‚からも,上記著作権è€
     49およびTOPPERSプロジェクトを
     50     å
     51è²¬ã™ã‚‹ã“と.
     52 
     53 æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
     54お
     55 ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     56 ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
     57 ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
     58 ã®è²¬ä»»ã‚’負わない.
     59 
     60 $Id: arm_design.txt 751 2016-05-14 15:03:06Z ertl-hiro $
    861----------------------------------------------------------------------
    962
     
    55108ARMv7-A,ARMv7-Rに準拠したプロセッサコアを持つターゲットシステム(チッ
    56109プ)にå
    57 ±é€šã«ä½¿ç”¨ã§ãã‚‹éƒ¨åˆ†ã§ã‚る.
     110±é€šã«ä½¿ç”¨ã§ãã‚‹éƒ¨åˆ†ã§ã‚る.ただし,これに該当するすべてのARMコア
     111に対応できているわけではない.新しいチップにポーティングする際には,コ
     112ア依存部に何らかの修正がå¿
     113要になることも多いと思われる.
    58114
    59115ARMコアのプロセッサコア略称を"arm"とする.GNU開発環境向けのARMコア依存
     
    284340ˆã®cpsrをspsrに復帰 */
    285341        msr             spsr_cxsf, r0
    286         ldmfd   sp!, {r0-r4,r12,lr,pc}^         /* 例外処理からの復帰 */
    287 ----------------------------------------
    288 
    289 ã“こで,スクラッチレジスタに加えてr4も復帰しているのは,例外の出å
    290 ¥å£å‡¦
    291 ç†ã§ã‚¹ã‚¯ãƒ©ãƒƒãƒãƒ¬ã‚¸ã‚¹ã‚¿ä»¥å¤–に使えるレジスタとして,r4を確保するためであ
    292 ã‚‹ï¼Ž
     342        ldmfd   sp!, {r0-r5,r12,lr,pc}^         /* 例外処理からの復帰 */
     343----------------------------------------
     344
     345ここで,スクラッチレジスタに加えてr4とr5も復帰しているのは,例外の出å
     346¥
     347口処理でスクラッチレジスタ以外に使えるレジスタとして,r4とr5を確保する
     348ためである(実際には,r4だけが使えれば十分であるが,スタックポインタを
     3498バイト境界にアラインするためにr5も保存/復帰している).
    293350
    294351この出口を実行する時点で,スタックは次のようになっているå¿
     
    310367        |       r4       |
    311368        +----------------+ <- sp+0x18
     369        |       r5       |
     370        +----------------+ <- sp+0x1c
    312371        |       r12      |
    313         +----------------+ <- sp+0x1c
     372        +----------------+ <- sp+0x20
    314373        |       lr       |
    315         +----------------+ <- sp+0x20
     374        +----------------+ <- sp+0x24
    316375        |    戻り番地    |
    317         +----------------+
     376        +----------------+ <- sp+0x28
    318377
    319378これに対応する例外のå
     
    325384         */
    326385        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_IRQ_BIT)
    327         stmfd   sp!, {r0-r4,r12,lr,pc}          /* pcはスペース確保のため */  (*1)
     386        stmfd   sp!, {r0-r5,r12,lr,pc}          /* pcはスペース確保のため */  (*1)
    328387
    329388        /*
     
    339398         */
    340399        msr             cpsr_c, #(CPSR_SVC_MODE AOR CPSR_IRQ_BIT)
    341         str             r2, [sp,#0x1c]                  /* 戻り番地をスタックに保存 */              (*2)
     400        str             r2, [sp,#0x20]                  /* 戻り番地をスタックに保存 */              (*2)
    342401        push    {r1}                                    /* spsrをスタックに保存 */
    343402----------------------------------------
     
    346405り,その時点で保存するpcの値は使わない.(*2)で,確保したスペースに戻り
    347406番地を格納する.格納å
    348 ˆã‚’[sp,#0x1c]とするのは,この時点ではspは上の図の
    349 ï¼ˆsp+0x04)を指しており,戻り番地は(sp+0x20)に格納したいためである.
     407ˆã‚’[sp,#0x20]とするのは,この時点ではspは上の図の
     408(sp+0x04)を指しており,戻り番地は(sp+0x24)に格納したいためである.
    350409
    351410例外を受け付けるとIビットをセットするため,例外のå
     
    393452
    394453----------------------------------------
    395         ldmfd   sp!, {r0-r4,r12,lr}
     454        ldmfd   sp!, {r0-r5,r12,lr}
    396455        rfefd   sp!
    397456----------------------------------------
    398457
    399 ã“こで,スクラッチレジスタに加えてr4も復帰しているのは,例外の出å
    400 ¥å£å‡¦
    401 ç†ã§ã‚¹ã‚¯ãƒ©ãƒƒãƒãƒ¬ã‚¸ã‚¹ã‚¿ä»¥å¤–に使えるレジスタとして,r4を確保するためであ
    402 ã‚‹ï¼Ž
     458ここで,スクラッチレジスタに加えてr4とr5も復帰しているのは,例外の出å
     459¥
     460口処理でスクラッチレジスタ以外に使えるレジスタとして,r4とr5を確保する
     461ためである(実際には,r4だけが使えれば十分であるが,スタックポインタを
     4628バイト境界にアラインするためにr5も保存/復帰している).
    403463
    404464この出口を実行する時点で,スタックは次のようになっているå¿
     
    418478        |       r4       |
    419479        +----------------+ <- sp+0x14
     480        |       r5       |
     481        +----------------+ <- sp+0x18
    420482        |       r12      |
    421         +----------------+ <- sp+0x18
     483        +----------------+ <- sp+0x1c
    422484        |       lr       |
    423         +----------------+ <- sp+0x1c
     485        +----------------+ <- sp+0x20
    424486        |    戻り番地    |
    425         +----------------+ <- sp+0x20
     487        +----------------+ <- sp+0x24
    426488        |      cpsr      |
    427         +----------------+
     489        +----------------+ <- sp+0x28
    428490
    429491これに対応する例外のå
     
    443505         */
    444506        cps             #CPSR_SVC_MODE
    445         stmfd   sp!, {r0-r4,r12,lr}
     507        stmfd   sp!, {r0-r5,r12,lr}
    446508----------------------------------------
    447509
     
    585647中でå¿
    586648要なæƒ
    587 å ±ï¼ˆä¾‹ãˆã°ï¼Œå‰²è¾¼ã¿ç•ªå·ï¼‰ã¯ï¼Œirc_begin_intでスタック上に保存
    588 ã—ておくå¿
    589 è¦ãŒã‚る.これを可能にするために,irc_begin_intが呼び出された
    590 ã‚‰ï¼Œirc_end_intもå¿
    591 ãšå‘¼ã³å‡ºã•ã‚Œã‚‹ã‚ˆã†ã«ã—ておく.スプリアス割込みの場合
    592 ã«ã‚‚,irc_end_intを呼び出すようにしている.
    593 
     649報(例えば,割込み番号)は,irc_begin_intでスタックのå
     650ˆé ­ã«
     651保存しておくå¿
     652要がある.これに用いるために,スタックのå
     653ˆé ­ã«1ワードの空
     654き領域を設けている.
     655
     656irc_end_intでå¿
     657要なæƒ
     658報が1ワードで不足する場合には,irc_begin_intでスタッ
     659クに積み,irc_end_intでスタックから取り出す.これを可能にするために,
     660irc_begin_intが呼び出されたら,irc_end_intもå¿
     661ず呼び出されるようにして
     662おく.スプリアス割込みの場合にも,irc_end_intを呼び出すようにしている.
    594663サブルーチン(irc_begin_int)の中でスタックに積み増すのは,一般には採用
    595664しないプログラミング技法であるが,irc_begin_intからirc_end_intに渡すæƒ
     
    894963報を記憶している領域のå
    895964ˆé ­ç•ªåœ°ã‚’第1パラメータ,CPU例外ハンド
    896 ãƒ©ç•ªå·ã‚’第2パラメータとして呼び出す.r12に保存されているCPU例外のæƒ
    897 å ±ã‚’
    898 è¨˜æ†¶ã—ている領域のå
    899 ˆé ­ç•ªåœ°ãŒä¿å­˜ã•ã‚Œã‚‹ã‚ˆã†ã«ï¼Œå¿
    900 è¦ã«å¿œã˜ã¦ï¼Œã‚¹ã‚¿ãƒƒã‚¯ã«
    901 ä¿å­˜ã™ã‚‹ï¼Ž
     965ラ番号を第2パラメータとして呼び出す.
    902966
    903967----------------------------------------
     
    919983クに戻す.その後,CPU例外が発生した状況を判断するための追加æƒ
    920984報をスタッ
    921 ã‚¯ä¸Šã‹ã‚‰æ¨ã¦ã‚‹ï¼Žä¾‹å¤–ネストカウントが0になった場合の処理は,割込みハンド
    922 ãƒ©ã®å‡ºå£å‡¦ç†ã¨å
    923 ±é€šã§ã‚るため,ret_int_1に分岐する.
     985ク上から捨てる.例外ネストカウントが0になった場合の処理は,追加æƒ
     986報をス
     987タック上から捨てること以外は,割込みハンドラの出口処理と同様である.
    924988
    925989----------------------------------------
     
    9571021#endif /* TOPPERS_SUPPORT_OVRHDR */
    9581022                }
    959 ----------------------------------------
    960 
    961 ä»¥ä¸Šã®å‡¦ç†ã«ã¯ï¼Œå‰²è¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ã®å‡ºå£å‡¦ç†ã®ãƒ«ãƒ¼ãƒãƒ³ã‚’流用する.
    962 
    963 ----------------------------------------
    9641023                CPU例外処理からのリターン後に,CPUロック解除状æ
    9651024‹ã«æˆ»ã‚‹ã‚ˆã†ã«æº–備する
     
    9721031----------------------------------------
    9731032
    974 ã‚¹ã‚¯ãƒ©ãƒƒãƒãƒ¬ã‚¸ã‚¹ã‚¿ã‚’復帰した後,例外からリターンする.
    975 
    9761033●スタックポインタが不正の場合の対策
    9771034
Note: See TracChangeset for help on using the changeset viewer.