現在実用ガイドを読みながら編集中、、、書いて有る事を信用しない様に!
http://www.profdong.com/elc4438_spring2016/USINGTHEFREERTOSREALTIMEKERNEL.pdf
ESP32はRTOSができるらしい、、、
多重割り込み
FreeRTOSConfig.h内で以下の様に定義されている。
configKERNEL_INTERRUPT_PRIORITYは、タイムティックを供給している割り込みの優先度。もしconfigMAX_SYSCALL_INTERRUPT_PRIORITYが使われていないのなら、割り込みを使用する全てのAPI関数は、この割り込みの優先度で実行されなければならない。
XCHAL_EXCM_LEVELはcore_isa.h内に以下の様に定義されている。
※ESP32ではcore_isa.hはプロジェクトの中に複数存在し、どれも3を定義しているが、どのファイルが実際に使われているか解らない。
configMAX_SYSCALL_INTERRUPT_PRIORITYはAPI関数が使用するもっとも高い割り込みの優先度を示す。
※高機能なCPUでは多重割り込みの機能を持つ物が多い。これは割り込み処理自体にも優先度を設定して、より緊急度の高い割り込みは、他の割り込みに実行を邪魔されない為である。
μiTRONでもそうだけれど定義される割り込みには2種類あり、1つはカーネルが管理する割り込み、1つはカーネルが管理しない割り込みとなる。
一般的にカーネルが管理する割り込みでは、割り込みの最後にディスパッチが行われるために割り込みの反応がその分遅れる事が有る。これを許容できないシステムではカーネルが管理しない割り込みを使う事になるが、その場合RTOSが使用する割り込み優先度よりも高い優先度を持つ割り込みを使用する事となる。
ESP32の割り込みレベルを探してみたら、esp_intr_alloc.h内にこんな定義をみつけた。
この内容なら、一般的に使用される割り込みレベルは1~6までかな?
レベル1~3までの優先度の割り込みはCで書けるが、レベル4~6、NMIはアセンブラで書けよ!とも書いてある。
https://esp-idf.readthedocs.io/en/v2.0/api/system/intr_alloc.html
![ITRONプログラミング入門 H8マイコンとHOSで始める組み込み開発 ITRONプログラミング入門 H8マイコンとHOSで始める組み込み開発]()
![リアルタイムOSと組み込み技術の基礎―実践μITRONプログラミング (TECHI (Vol.17)) リアルタイムOSと組み込み技術の基礎―実践μITRONプログラミング (TECHI (Vol.17))]()
http://www.profdong.com/elc4438_spring2016/USINGTHEFREERTOSREALTIMEKERNEL.pdf
ESP32はRTOSができるらしい、、、
多重割り込み
FreeRTOSConfig.h内で以下の様に定義されている。
/* The priority at which the tick interrupt runs. This should probably be kept at 1. */ #define configKERNEL_INTERRUPT_PRIORITY 1
configKERNEL_INTERRUPT_PRIORITYは、タイムティックを供給している割り込みの優先度。もしconfigMAX_SYSCALL_INTERRUPT_PRIORITYが使われていないのなら、割り込みを使用する全てのAPI関数は、この割り込みの優先度で実行されなければならない。
/* The maximum interrupt priority from which FreeRTOS.org API functions can be called. Only API functions that end in ...FromISR() can be used within interrupts. */ #define configMAX_SYSCALL_INTERRUPT_PRIORITY XCHAL_EXCM_LEVEL
XCHAL_EXCM_LEVELはcore_isa.h内に以下の様に定義されている。
#define XCHAL_EXCM_LEVEL 3 /* level masked by PS.EXCM */ /* (always 1 in XEA1; levels 2 .. EXCM_LEVEL are "medium priority") */
※ESP32ではcore_isa.hはプロジェクトの中に複数存在し、どれも3を定義しているが、どのファイルが実際に使われているか解らない。
configMAX_SYSCALL_INTERRUPT_PRIORITYはAPI関数が使用するもっとも高い割り込みの優先度を示す。
※高機能なCPUでは多重割り込みの機能を持つ物が多い。これは割り込み処理自体にも優先度を設定して、より緊急度の高い割り込みは、他の割り込みに実行を邪魔されない為である。
μiTRONでもそうだけれど定義される割り込みには2種類あり、1つはカーネルが管理する割り込み、1つはカーネルが管理しない割り込みとなる。
一般的にカーネルが管理する割り込みでは、割り込みの最後にディスパッチが行われるために割り込みの反応がその分遅れる事が有る。これを許容できないシステムではカーネルが管理しない割り込みを使う事になるが、その場合RTOSが使用する割り込み優先度よりも高い優先度を持つ割り込みを使用する事となる。
ESP32の割り込みレベルを探してみたら、esp_intr_alloc.h内にこんな定義をみつけた。
//Keep the LEVELx values as they are here; they match up with (1<<level) #define ESP_INTR_FLAG_LEVEL1 (1<<1) ///< Accept a Level 1 interrupt vector (lowest priority) #define ESP_INTR_FLAG_LEVEL2 (1<<2) ///< Accept a Level 2 interrupt vector #define ESP_INTR_FLAG_LEVEL3 (1<<3) ///< Accept a Level 3 interrupt vector #define ESP_INTR_FLAG_LEVEL4 (1<<4) ///< Accept a Level 4 interrupt vector #define ESP_INTR_FLAG_LEVEL5 (1<<5) ///< Accept a Level 5 interrupt vector #define ESP_INTR_FLAG_LEVEL6 (1<<6) ///< Accept a Level 6 interrupt vector #define ESP_INTR_FLAG_NMI (1<<7) ///< Accept a Level 7 interrupt vector (highest priority) #define ESP_INTR_FLAG_SHARED (1<<8) ///< Interrupt can be shared between ISRs #define ESP_INTR_FLAG_EDGE (1<<9) ///< Edge-triggered interrupt #define ESP_INTR_FLAG_IRAM (1<<10) ///< ISR can be called if cache is disabled #define ESP_INTR_FLAG_INTRDISABLED (1<<11) ///< Return with this interrupt disabled #define ESP_INTR_FLAG_LOWMED (ESP_INTR_FLAG_LEVEL1|ESP_INTR_FLAG_LEVEL2|ESP_INTR_FLAG_LEVEL3) ///< Low and medium prio interrupts. These can be handled in C. #define ESP_INTR_FLAG_HIGH (ESP_INTR_FLAG_LEVEL4|ESP_INTR_FLAG_LEVEL5|ESP_INTR_FLAG_LEVEL6|ESP_INTR_FLAG_NMI) ///< High level interrupts. Need to be handled in assembly. #define ESP_INTR_FLAG_LEVELMASK (ESP_INTR_FLAG_LEVEL1|ESP_INTR_FLAG_LEVEL2|ESP_INTR_FLAG_LEVEL3| \ ESP_INTR_FLAG_LEVEL4|ESP_INTR_FLAG_LEVEL5|ESP_INTR_FLAG_LEVEL6| \ ESP_INTR_FLAG_NMI) ///< Mask for all level flags
この内容なら、一般的に使用される割り込みレベルは1~6までかな?
レベル1~3までの優先度の割り込みはCで書けるが、レベル4~6、NMIはアセンブラで書けよ!とも書いてある。
https://esp-idf.readthedocs.io/en/v2.0/api/system/intr_alloc.html

ITRONプログラミング入門 H8マイコンとHOSで始める組み込み開発
- 出版社/メーカー: オーム社
- 発売日: 2005/04/23
- メディア: Kindle版

リアルタイムOSと組み込み技術の基礎―実践μITRONプログラミング (TECHI (Vol.17))
- 作者: 高田 広章
- 出版社/メーカー: CQ出版
- 発売日: 2004/02
- メディア: 単行本