FreeRTOS StreamBuffer トリガー1バイトで1バイトセットしても receive で起床しない

大変お世話になっております。SAM です。

RL78/G23 で FreeRTOS V10.5.1 を動かそうとしています。
Fast Prototyping Board のサンプル(r20an0660xx0100-rl78.zip)の \portable\Renesas\RL78G2x をFreeRTOS V10.5.1 に持ってきて使っています。
サンプルは V10.4.3 でしたが \portable の全ファイルを V10.4.3, V10.4.6, V10.5.1 に亘って比較し差異は無かったので持ってきて使っても問題ないと判断しました。
FreeRTOSConfig.h、freertos_start.c、freertos_start.h はサンプル等を参考にして作りました。

StreamBuffer の異常についてですが UART 受信割り込みで xStreamBufferSendFromISR して getchar() で receive するのですが
バッファーに溜まっていることは確認したのですが recceive できません。トリガー1バイトでもダメです。

私が懸念しているは xStreamBufferCreate の中でバッファーを確保している部分で以下の Warning が発生していることです。

W0523082: 偶数アライメントのオブジェクトを指すポインタが奇数番地を保持しています。

分かる方がいらっしゃったらよろしくお願いします。

タスク、タイマー、セマフォは動作しているので全くダメではないと思っています。

Parents
  • こんにちは、ツチノコです。
    receiveする側のタスクのタスク優先度は確認済みでしょうか。
    UART 受信割り込みハンドラ内でportYIELD_FROM_ISR マクロのようなタスクスイッチを引き起こす実装を加えていない限り、割り込み完了後は割り込み直前に実行されていたタスクに戻ります。
    よって、receiveする側のタスクのタスク優先度が割り込み直前のタスクのタスク優先度より低い場合は、すぐさまreceiveのタスクが実行されない状況に陥ります。
Reply
  • こんにちは、ツチノコです。
    receiveする側のタスクのタスク優先度は確認済みでしょうか。
    UART 受信割り込みハンドラ内でportYIELD_FROM_ISR マクロのようなタスクスイッチを引き起こす実装を加えていない限り、割り込み完了後は割り込み直前に実行されていたタスクに戻ります。
    よって、receiveする側のタスクのタスク優先度が割り込み直前のタスクのタスク優先度より低い場合は、すぐさまreceiveのタスクが実行されない状況に陥ります。
Children
  • ツチノコさん
    返信ありがとうございます。

    portYIELD_FROM_ISR()が無くて切り替わらなかったことを思い出しました。
    portYIELD_FROM_ISR()は実装しています。
    send 側のタスクとreceive 側のタスクは同じ優先度です。
    receive 側のタスクの優先度を上げることでゲットできることを期待したのですが変化はありませんでした。