我正在对 TI 的电路板进行编程,并且我希望能够以某种方式将两个不同的 ISR 发布到任务的消息队列中。那部分工作正常。但是,在接收端,是否有任何智能方式让任务挂在其队列上,并根据 ISR 发布的数据对数据执行不同的操作?
基本上,我有一个 LCD 更新任务,它显示来自我的电机的信息。但是,如果我有一个电机传感器 ISR 和一个按钮按下 ISR,它们发送不同的信息进行更新,这可以在一个队列中完成吗?
我正在对 TI 的电路板进行编程,并且我希望能够以某种方式将两个不同的 ISR 发布到任务的消息队列中。那部分工作正常。但是,在接收端,是否有任何智能方式让任务挂在其队列上,并根据 ISR 发布的数据对数据执行不同的操作?
基本上,我有一个 LCD 更新任务,它显示来自我的电机的信息。但是,如果我有一个电机传感器 ISR 和一个按钮按下 ISR,它们发送不同的信息进行更新,这可以在一个队列中完成吗?
当然。当每个 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
太昂贵,您可以只设置一个位(to0
或1
)来识别 ISR。