3

TI のボードをプログラミングしていますが、2 つの異なる ISR の投稿をタスクのメッセージ キューに送信できるようにしたいと考えています。その部分はうまく機能します。ただし、受信側で、タスクがキューに保留され、ポストされた ISR に基づいてデータに対して別の操作を実行するためのインテリジェントな方法はありますか?

基本的に、モーターからの情報を表示する LCD 更新タスクがあります。しかし、モーター センサー ISR とボタン プレス ISR が異なる情報を送信して更新される場合、これを 1 つのキューで実行できますか?

4

1 に答える 1

3

もちろん。各 ISR がメッセージをキューに送信するとき、それを送信した ISR を識別する何かをメッセージに入れます。次に、受信者がキューを読み取るときに、識別子に基づいて実行するアクションを決定できます。

ISR1() {
  char msg[4];
  msg[0] = '1';                 // Identify the queue
  get_3_ISR1_data_bytes(msg+1); // Get the data
  q_send(msg);
}

ISR2() {
  char msg[4];
  msg[0] = '2';                 // Identify the queue
  get_3_ISR2_data_bytes(msg+1); // Get the data
  q_send(msg);
}

handler() {
  char *msg;
  q_rcv(msg);
  switch (msg[0]) {
  case '1':
    // Do ISR1 stuff
    break;
  case '2':
    // Do ISR2 stuff
    break;
  default:
    // Something unpleasant has happened
  }
}

全体charが高すぎる場合は、ISR を識別するために 1 ビット (0またはに) を設定できます。1

于 2012-04-26T02:55:27.590 に答える