加川さん>
>★ 上記の 「◎◎◎学習したこと」で間違いは無いでしょうか?
特に間違いはありません。
>★ スレッドの切り替え間隔や優先レベルについて
> 設定でいろいろ変えられるのでしょうが、現状の設定での概要をご教示頂きたく。
>●切り替え間隔の現状値は? 又、切り替え間隔は、簡単に変更可能か?
「切り替え間隔」とは、一定間隔ごとに実行するスレッドを切り替えるときの切り替え間隔ということでよろしいでしょうか。
デフォルトは5msです。
下記の5を変更するとデフォルトの5msから変更できます。
rtx\TARGET_CORTEX_A\RTX_Conf_CA.c (141)
#define OS_ROBINTOUT 5
>●優先レベル
優先レベルは低い順に下記7段階です。
osPriorityIdle = -3, ///< priority: idle (lowest)
osPriorityLow = -2, ///< priority: low
osPriorityBelowNormal = -1, ///< priority: below normal
osPriorityNormal = 0, ///< priority: normal (default)
osPriorityAboveNormal = +1, ///< priority: above normal
osPriorityHigh = +2, ///< priority: high
osPriorityRealtime = +3, ///< priority: realtime (highest)
mbed RTOS を用いる場合、スレッドの優先順位はスレッドの第3引数で設定可能です。defaultはosPriorityNormalです。
たとえば、sed2_thred()の優先順位をosPriorityAboveNormalにしたい場合、以下のように書きます。
優先順位指定
main()
{
Thread sed2(sed2_thred, NULL, osPriorityAboveNormal);
}
ちなみに第2引数はスレッドに渡す(void*)型の引数です。
★割り込み要因とレベルについて設定でいろいろ変えられるのでしょうが、現状の設定での概要をご教示頂きたく。
割り込みレベルは GIC_SetPriority(割り込みID, 優先順位);で設定することができます。
割り込みIDはmbed-src\targets\cmsis\TARGET_RENESAS\TARGET_RZ_A1H\MBRZA1H.h を参照ください。
mbed official ライブラリで割り込みの優先度設定を行っているものを挙げます。
ライブラリ/API | 優先順位 |
InterruptIn | 5 |
Serial | 5 |
wait | 5 |
Ethernet | 5 |
USBDevice | 16 |
USBHost | 16 |
●外部ピンによる割り込み要因は、学習出来ました。他にもあるのでしょうか?
ほとんどの周辺機能に割り込み要因があります。
上記 MBRZA1H.h で定義されている割り込みのうち、 mbed official library で使用している割り込みは以下のものです。
InterruptIn
IRQ0_IRQn = 32,
IRQ1_IRQn = 33,
IRQ2_IRQn = 34,
IRQ3_IRQn = 35,
IRQ4_IRQn = 36,
IRQ5_IRQn = 37,
IRQ6_IRQn = 38,
IRQ7_IRQn = 39,
USBHost
USBI0_IRQn = 73,
USBDevice
USBI0_IRQn = 73,
wait
OSTMI1TINT_IRQn = 135, /*!< OSTM Interrupt */
Serial
SCIFRXI0_IRQn = 223, /*!< SCIF Interrupt */
SCIFTXI0_IRQn = 224, /*!< SCIF Interrupt */
SCIFRXI1_IRQn = 227, /*!< SCIF Interrupt */
SCIFTXI1_IRQn = 228, /*!< SCIF Interrupt */
SCIFRXI2_IRQn = 231, /*!< SCIF Interrupt */
SCIFTXI2_IRQn = 232, /*!< SCIF Interrupt */
SCIFRXI3_IRQn = 235, /*!< SCIF Interrupt */
SCIFTXI3_IRQn = 236, /*!< SCIF Interrupt */
SCIFRXI4_IRQn = 239, /*!< SCIF Interrupt */
SCIFTXI4_IRQn = 240, /*!< SCIF Interrupt */
SCIFRXI5_IRQn = 243, /*!< SCIF Interrupt */
SCIFTXI5_IRQn = 244, /*!< SCIF Interrupt */
SCIFRXI6_IRQn = 247, /*!< SCIF Interrupt */
SCIFTXI6_IRQn = 248, /*!< SCIF Interrupt */
SCIFRXI7_IRQn = 251, /*!< SCIF Interrupt */
SCIFTXI7_IRQn = 252, /*!< SCIF Interrupt */
Ethernet
ETHERI_IRQn = 359,
RZ/A1H全体としては以下のRZ/A1HのマニュアルのP200 (7-21)を参照ください。
http://japan.renesas.com/req/product_document_lineup_child.do?REGION_KEY=2&LAYER_KEY=101996&PDF_URL=http://documentation.renesas.com/doc/products/mpumcu/doc/rz/r01uh0403jj0100_rz_a1h.pdf&TKUPDATE=true&APNOTE=true
引き続き、よろしくお願いいたします。
廣光 加川 様
>USBHostHubとCMSIS-RTOS RTXの関係は?
USBHost内部でmbed-RTOSの機能を使用しているため、
USBHostをインポートすると、mbed-RTOSも同時にインポートされます。
mbed-RTOSは、CMSIS-RTOS RTXにmbed-RTOS用のwrapperをかぶせたものです。
>MMUはスレッド毎に管理されているのか?
CMSIS-RTOS RTXでは、MMUはスレッドごとの管理はせず、すべてのスレッドでひとつのメモリ空間を共有します。
そのため、懸念なされているように、メモリやIOの競合防止を考慮する必要があります。