#include<stdio.h>
#include<stdlib.h>
// Uncomment this if when you copy this code to run it on HW
//#define RUN_ON_HW
#ifdef RUN_ON_HW
#define Serial1 Serial
#endif
void myPrint(char* fnName, unsigned int result);
// Define external assembly function
extern "C" {
bool chk_eq_asm_fn(int, int);
bool chk_unsigned_hs_asm_fn(unsigned int, unsigned int);
bool chk_signed_lt_asm_fn(int, int);
}
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
Serial1.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
bool result;
unsigned uint_a = 0xFFFFFFFF;
unsigned uint_b = 0xFFFFFFFE;
int int_a = 8;
int int_b = -6;
if (result = chk_eq_asm_fn(100, 101)){
Serial1.println("The values are equal.");
myPrint("chk_eq_asm_fn()", result);
}
else {
Serial1.println("The values are not equal.");
myPrint("chk_eq_asm_fn()", result);
}
if (result = chk_unsigned_hs_asm_fn(uint_a, uint_b)){
Serial1.println("uint_a is higher or same as uint_b.");
myPrint("chk_unsigned_hs_asm_fn()", result);
}
else {
Serial1.println("uint_a is lower than uint_b.");
myPrint("chk_unsigned_hs_asm_fn()", result);
}
if (result = chk_signed_lt_asm_fn(int_a, int_b)){
Serial1.println("int_a is lower than int_b.");
myPrint("chk_signed_lt_asm_fn()", result);
}
else {
Serial1.println("int_a is higher or equal than int_b.");
myPrint("chk_signed_lt_asm_fn()", result);
}
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
} // end of loop()
void myPrint(char* fnName, unsigned int printVal){
Serial1.print("The value returned from the assembly fn ");
Serial1.print(fnName);
Serial1.print(" : "); Serial1.println(printVal);
Serial1.print("The value returned from the assembly fn ");
Serial1.print(fnName);
Serial1.print(" in Hex: 0x"); Serial1.println(printVal, HEX);
Serial1.println(); // print an empty line
} // myPrint(char*, int)