Subversion Repositories Code-Repo

Compare Revisions

Ignore whitespace Rev 110 → Rev 111

/Classwork/ECE4534 - Embedded Systems/PIC 27J13/msg_queues.c
11,34 → 11,34
// FromMainQueueToLow: Writer is main(), Reader is a low priority interrupt
// FromMainQueueToHigh: Writer is main(), Reader is a high priority interrupt
 
//#pragma udata msgqueue1_1
//static msg MQ_ToMainFromLow_1;
//#pragma udata msgqueue1_2
//static msg MQ_ToMainFromLow_2;
#pragma udata msgqueue1_1
static msg MQ_ToMainFromLow_1;
#pragma udata msgqueue1_2
static msg MQ_ToMainFromLow_2;
 
#pragma udata msgqueue2_1
static msg MQ_ToMainFromHigh_1;
#pragma udata msgqueue2_2
static msg MQ_ToMainFromHigh_2;
#pragma udata msgqueue2_3
static msg MQ_ToMainFromHigh_3;
//#pragma udata msgqueue2_3
//static msg MQ_ToMainFromHigh_3;
 
//#pragma udata msgqueue3_1
//static msg MQ_FromMainToLow_1;
//#pragma udata msgqueue3_2
//static msg MQ_FromMainToLow_2;
#pragma udata msgqueue3_1
static msg MQ_FromMainToLow_1;
#pragma udata msgqueue3_2
static msg MQ_FromMainToLow_2;
 
#pragma udata msgqueue4_1
static msg MQ_FromMainToHigh_1;
#pragma udata msgqueue4_2
static msg MQ_FromMainToHigh_2;
#pragma udata msgqueue4_3
static msg MQ_FromMainToHigh_3;
//#pragma udata msgqueue4_3
//static msg MQ_FromMainToHigh_3;
 
#pragma udata
//static msg_queue MQ_ToMainFromLow;
static msg_queue MQ_ToMainFromLow;
static msg_queue MQ_ToMainFromHigh;
//static msg_queue MQ_FromMainToLow;
static msg_queue MQ_FromMainToLow;
static msg_queue MQ_FromMainToHigh;
 
static unsigned char MQ_Main_Willing_To_Block;
56,23 → 56,23
void MQ_init() {
MQ_Main_Willing_To_Block = 0;
 
// MQ_ToMainFromLow.queue[0] = &MQ_ToMainFromLow_1;
// MQ_ToMainFromLow.queue[1] = &MQ_ToMainFromLow_2;
MQ_ToMainFromLow.queue[0] = &MQ_ToMainFromLow_1;
MQ_ToMainFromLow.queue[1] = &MQ_ToMainFromLow_2;
 
MQ_ToMainFromHigh.queue[0] = &MQ_ToMainFromHigh_1;
MQ_ToMainFromHigh.queue[1] = &MQ_ToMainFromHigh_2;
MQ_ToMainFromHigh.queue[2] = &MQ_ToMainFromHigh_3;
// MQ_ToMainFromHigh.queue[2] = &MQ_ToMainFromHigh_3;
 
// MQ_FromMainToLow.queue[0] = &MQ_FromMainToLow_1;
// MQ_FromMainToLow.queue[1] = &MQ_FromMainToLow_2;
MQ_FromMainToLow.queue[0] = &MQ_FromMainToLow_1;
MQ_FromMainToLow.queue[1] = &MQ_FromMainToLow_2;
 
MQ_FromMainToHigh.queue[0] = &MQ_FromMainToHigh_1;
MQ_FromMainToHigh.queue[1] = &MQ_FromMainToHigh_2;
MQ_FromMainToHigh.queue[2] = &MQ_FromMainToHigh_3;
// MQ_FromMainToHigh.queue[2] = &MQ_FromMainToHigh_3;
 
// MQ_init_queue(&MQ_ToMainFromLow);
MQ_init_queue(&MQ_ToMainFromLow);
MQ_init_queue(&MQ_ToMainFromHigh);
// MQ_init_queue(&MQ_FromMainToLow);
MQ_init_queue(&MQ_FromMainToLow);
MQ_init_queue(&MQ_FromMainToHigh);
}
 
191,29 → 191,29
_endasm
}
 
///* Message Queue 1 - Low Interrupt -> Main */
//signed char MQ_sendmsg_ToMainFromLow(unsigned char length, unsigned char msgtype, void *data) {
//#ifdef DEBUG
// if (!interrupt_in_low_interrupt_routine()) {
// return (MSG_NOT_IN_LOW);
// }
//#endif
// return (MQ_send_msg(&MQ_ToMainFromLow, length, msgtype, data));
//}
//
//signed char MQ_recvmsg_ToMainFromLow(unsigned char maxlength, unsigned char *msgtype, void *data) {
//#ifdef DEBUG
// if (!interrupt_in_main_routine()) {
// return (MSG_NOT_IN_MAIN);
// }
//#endif
// return (MQ_recv_msg(&MQ_ToMainFromLow, maxlength, msgtype, data));
//}
//
//unsigned char MQ_peek_ToMainFromLow() {
// return (MQ_peek_msg(&MQ_ToMainFromLow));
//}
/* Message Queue 1 - Low Interrupt -> Main */
signed char MQ_sendmsg_ToMainFromLow(unsigned char length, unsigned char msgtype, void *data) {
#ifdef DEBUG
if (!interrupt_in_low_interrupt_routine()) {
return (MSG_NOT_IN_LOW);
}
#endif
return (MQ_send_msg(&MQ_ToMainFromLow, length, msgtype, data));
}
 
signed char MQ_recvmsg_ToMainFromLow(unsigned char maxlength, unsigned char *msgtype, void *data) {
#ifdef DEBUG
if (!interrupt_in_main_routine()) {
return (MSG_NOT_IN_MAIN);
}
#endif
return (MQ_recv_msg(&MQ_ToMainFromLow, maxlength, msgtype, data));
}
 
unsigned char MQ_peek_ToMainFromLow() {
return (MQ_peek_msg(&MQ_ToMainFromLow));
}
 
/* Message Queue 2 - High Interrupt -> Main */
signed char MQ_sendmsg_ToMainFromHigh(unsigned char length, unsigned char msgtype, void *data) {
#ifdef DEBUG
237,29 → 237,29
return (MQ_peek_msg(&MQ_ToMainFromHigh));
}
 
///* Message Queue 3 - Main -> Low Interrupt */
//signed char MQ_sendmsg_FromMainToLow(unsigned char length, unsigned char msgtype, void *data) {
//#ifdef DEBUG
// if (!interrupt_in_main_routine()) {
// return (MSG_NOT_IN_MAIN);
// }
//#endif
// return (MQ_send_msg(&MQ_FromMainToLow, length, msgtype, data));
//}
//
//signed char MQ_recvmsg_FromMainToLow(unsigned char maxlength, unsigned char *msgtype, void *data) {
//#ifdef DEBUG
// if (!interrupt_in_low_interrupt_routine()) {
// return (MSG_NOT_IN_LOW);
// }
//#endif
// return (MQ_recv_msg(&MQ_FromMainToLow, maxlength, msgtype, data));
//}
//
//unsigned char MQ_peek_FromMainToLow() {
// return (MQ_peek_msg(&MQ_FromMainToLow));
//}
/* Message Queue 3 - Main -> Low Interrupt */
signed char MQ_sendmsg_FromMainToLow(unsigned char length, unsigned char msgtype, void *data) {
#ifdef DEBUG
if (!interrupt_in_main_routine()) {
return (MSG_NOT_IN_MAIN);
}
#endif
return (MQ_send_msg(&MQ_FromMainToLow, length, msgtype, data));
}
 
signed char MQ_recvmsg_FromMainToLow(unsigned char maxlength, unsigned char *msgtype, void *data) {
#ifdef DEBUG
if (!interrupt_in_low_interrupt_routine()) {
return (MSG_NOT_IN_LOW);
}
#endif
return (MQ_recv_msg(&MQ_FromMainToLow, maxlength, msgtype, data));
}
 
unsigned char MQ_peek_FromMainToLow() {
return (MQ_peek_msg(&MQ_FromMainToLow));
}
 
/* Message Queue 4 - Main -> High Interrupt */
signed char MQ_sendmsg_FromMainToHigh(unsigned char length, unsigned char msgtype, void *data) {
#ifdef DEBUG
307,9 → 307,9
if (MQ_check_msg_queue_unread(&MQ_ToMainFromHigh)) {
return;
}
// if (MQ_check_msg_queue_unread(&MQ_ToMainFromLow)) {
// return;
// }
if (MQ_check_msg_queue_unread(&MQ_ToMainFromLow)) {
return;
}
 
// If everything checks out, go to sleep
MQ_enter_sleep_mode();
329,10 → 329,10
MQ_Main_Willing_To_Block = 0;
return;
}
// if (MQ_check_msg_queue_unread(&MQ_ToMainFromLow)) {
// MQ_Main_Willing_To_Block = 0;
// return;
// }
if (MQ_check_msg_queue_unread(&MQ_ToMainFromLow)) {
MQ_Main_Willing_To_Block = 0;
return;
}
// Sleep for a period of time before checking again
Delay1KTCYx(10);
}