ページ 11

管理割り込み

Posted: 2020年7月13日(月) 10:58
by ymmt
OSの管理割り込みについて教えてください。

現在STM32F4にμC3/Compactを入れて開発をしております。その中でUSARTの受信割込み中にiset_flg()を実施するとハードフォルトとなってしまいます。原因はこの記事にあるように
viewtopic.php?f=12&t=4
管理外割り込みでOSのAPIを実施したからだと思われます。
これを解決するためにUSARTの受信割込みをOSの管理割り込みにしたいです。
この記事
viewtopic.php?f=16&t=117
を参考に設定したのですが、main.cにスケルトン関数が作成されるだけで、
初期化ハンドラに設定が追加されませんでした。(この記事の「5.コンフィグレータで登録したOSリソースはシステム起動時に初期化ハンドラで生成されます。」の部分が追加されません。)
実際にソフトを動かしてusartのデータを受信しても作成された関数が呼ばれません。(スケルトン関数は実際のソースコードにコピーして組み込んでます。)
何か設定が間違ってますでしょうか?
(添付がコンフィグレータで設定した様子です。)
それともμC3/Compactでは管理割り込みの設定ができないのでしょうか?

お手数おかけして申し訳ありませんが、ご教授のほどよろしくお願いいたします。

Re: 管理割り込み

Posted: 2020年7月21日(火) 15:20
by eForce技術担当
こちらの、ご連絡をいたします。

>初期化ハンドラに設定が追加されませんでした。
こちらの内容は、μC3/Standardの場合であり、μC3/Compactの場合には、
初期化ハンドラには、割込みサービスルーチンに関する処理は、
追加されません。
===
実際に下記で設定をすれば、割込みサービスルーチン(OS管理下の割込み)
処理は、作成されていると思います。
===
μC3/Compactでの割込みサービスルーチンについては、
ご指摘のように、
割込み番号:53
起動番地:usart1_intr
とした場合には、具体的には、下記のように動作するようになります。

・vect.s79
 inthdr_53が呼び出されます。(cortex-M4 CPUの動作)
・その後、excp.s79が呼び出されて、μC3/Compactのカーネル本体が呼ばれ
 void isr_exti13(VP_INT exinf)が呼び出されることになります。
 ->この一連の、処理をコンフィグレータが生成してくれます。
=====
=====
>実際にソフトを動かしてusartのデータを受信しても作成された関数が呼ばれません。
>(スケルトン関数は実際のソースコードにコピーして組み込んでます。)
>何か設定が間違ってますでしょうか?
こちらの手順自体は、間違っていないと思います。
===
なお、注意事項ですが、コンフィグレータ上で、
μC3/Compactでの割込みサービスルーチンを設定して、ソースコード生成を
実施した場合には、USARTのドライバは組み込まれませんので、
USARTの受信自体は、お客様のほうで記載を頂く必要がございます。
->この辺りは、認識されていますでしょうか。
====
====
もしくは、μC3/Compactでは、標準COMドライバが実装されていますので、
標準COMドライバを利用して、UART処理を実施したい場合には、
下記のサンプル等を参照して頂ければと思います。
\uC3\Sample\Compact\STM32F4内に、ございます。

Re: 管理割り込み

Posted: 2020年7月22日(水) 14:05
by ymmt
ご回答ありがとうございます。
割り込みを実施するにはUSARTでデータを受信したときに
「inthdr_53を呼び出す」ように仕掛けておけばよいというところですかね。
そうすれば void isr_exti13(関数名は任意)が呼ばれるようになるというところですね。
「USARTの受信自体は、お客様のほうで記載を頂く必要がございます」認識いたしました。