We are going to do a few little array computations today to make sure you have everything ready for the upcoming homework assignments. You may to consult the MIPS “Green Card” for this lab. The MPLAB® XC32 Assembler, Linker and Utilities User’s Guide remains the ultimate resource.
You should work by yourself today.
Getting Started
Downloading a starter project
Download a
tar.gz file
containing a compressed MPLAB X
project called ArrayTester
.
You should be able to expand it from the browser.
Be sure to store it in your MPLABXProjects
directory.
It might also be useful to bring up the Arrays with the MIPS32 Assembly lab in another browser window to jog your memory about UART simulation and MIPS32 arrays.
Looking at the code
Take a look at the following files within the project.
- tester.c —
Contains the
main
function for the project. Does little more than calltestArrayFunctions
with the address of functions to be tested. - misc.c —
Contains the
testArraysFunctions
function which calls two functions, passed as parameters, and see if they perform the same results. - testFunctionsInC.c — Four C array functions which you will implement in MIPS32 assembly language.
- tester.h — An include file with prototypes for all the functions.
- The .s files — These are outlines for your assembly code.
Note the header for the testArrayFunctions
function
in misc.c . This is how you
declare function prototypes. The physicists using C (and FORTRAN)
love to pass functions to functions.
In this case, the testArrayFunctions
is passed
two arrays, f1
and f2
, of functions
and a third argument, size
, giving the size of the arrays.
Both of the function receive two arguments, a pointer to a
int32_t
and a int32_t
value.
void testArrayFunctions( int32_t (*f1)(int32_t *, int32_t), int32_t (*f2)(int32_t *, int32_t), int32_t size)
Even stranger is the prototype for
testArrayFunctions
in tester.h . It doesn’t contain
parameter names. No other programming language has a (*)
.
void testArrayFunctions( int32_t (*)(int32_t *, int32_t), int32_t (*)(int32_t *, int32_t), int32_t) ;
Java doesn’t allow functions to be used as parameters. However, you can use interfaces to accomplish a similar task.
public interface ArrayFunctionTester<T> { int arrayFunction(T[] vector, T element) ; }
Your task for today
First, comment out the #define
for BORINGTEST
and
comment in the #define
for EXCINGTEST
.
This will cause your program to use the MIPS32 assembly routines rather than
their C equivalents.
// #define BORINGTEST 1 #define EXCITINGTEST 1
Debug your project. You should now have lots of errors for the Exciting tests.
One at a time, fix all four MIPS32 functions.