3

我正在对 TI 的电路板进行编程,并且我希望能够以某种方式将两个不同的 ISR 发布到任务的消息队列中。那部分工作正常。但是,在接收端,是否有任何智能方式让任务挂在其队列上,并根据 ISR 发布的数据对数据执行不同的操作?

基本上,我有一个 LCD 更新任务,它显示来自我的电机的信息。但是,如果我有一个电机传感器 ISR 和一个按钮按下 ISR,它们发送不同的信息进行更新,这可以在一个队列中完成吗?

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太昂贵,您可以只设置一个位(to01)来识别 ISR。

于 2012-04-26T02:55:27.590 回答