Using RPMSG to implement a simple calculator on PRU¶
Code¶
init_message_channel();
while : true {
int option := receive_message();
int a := receive_message();
int b := receive_message();
if : option == 1 {
send_message(a+b);
}
elif : option == 2 {
send_message(a-b);
}
elif : option == 3 {
send_message(a*b);
}
elif : option == 4 {
if : b != 0 {
send_message(a/b);
}
else {
send_message(a);
}
}
else
{
send_message(a+b);
}
}
Following code works on PocketBeagle, to use on other boards, please change the pins accordingly.
Explanation¶
init_message_channel();
starts the message channel for communication
with ARM <-> PRU cores. Then while : true
loops runs endlessly.
int option := receive_message();
receives which operator to be
executed and stores it in option variable. 1 for addition, 2 for
subtractions, 3 for multiplication and 4 for division.
int a := receive_message();
receives the value of first operand, and
int b := receive_message();
receives the value of second operand.
if-elseif ladder checks if value of option is 1, 2, 3 or 4 and
accordingly sends the value of operation back to ARM core using
send_message
. While division, it makes sure that divisor is not 0.
If value of option is anything other than 1, 2, 3, 4, then it defaults
to else condition, that is a+b.
This runs endlessly since it is inside a while : true
loop.