2012-01-12 16 views
3

FreeRTOSのxSemaphoreGiveFromISR関数とそれに付随するportEND_SWITCHING_ISRマクロを使用して、I2Cトランザクションの終了を処理する割り込み内にセマフォを渡そうとしています。FreeRTOSのISRからセマフォを与えた後にスタックオーバーフローが発生する

私がするたびに、私は自分のプログラムのアプリケーションスタックオーバーフローフック機能に終わります。実際のバージョンからの唯一の変更はISRにこの行を追加することでした。スタックのサイズを8192から16384に倍増しましたが、これは役に立ちませんでした。

誰かが私をつかまえていることについての考えを持っていますか?

configCHECK_FOR_STACK_OVERFLOW値は、あなたが割り込みRTOS configKERNEL_INTERRUPT_PRIORITYよりも優先度が同じレベルで実行されていることを確認することをお勧めします。1.

+1

どのプロセッサを使用していますか? ISRに使用される別個のスタック、または1つの共通スタックがありますか? ISRスタックがある場合は、十分な大きさですか? – TJD

+0

@TJD Cypress PSoC5デバイス内のCortex M3です。別のISRスタックがある場合は良い質問ですが、わかりません。私はまた、それが設定されている場合、それを設定する方法も知らない。 –

+0

私がドキュメントを理解していれば、スケジューラが起動するまではメイン関数を実行するためのスタックが1つあります。これは割り込み処理用でもあります。各タスクには独自のスタックがあります。メインスタックのサイズと、すべてのタスクスタックのサイズに使用していた定数の両方を2倍にしましたが、何の効果もありませんでした。 –

答えて

1

です。

残念ながら明確に述べられていません。

RTOSのデフォルト設定と同じ問題が発生しましたが、少なくともマイクロチップデバイスの場合、割り込みの優先度がチップのデフォルトより低く設定されています。

また、タスクごとに優先度を処理するのに十分なメモリが必要です。タスクYieldがある場合は、割り込みの最後の命令でなければなりません。

関連する問題