blackfin array handling part 1

Post on 03-Jan-2016

40 Views

Category:

Documents

5 Downloads

Preview:

Click to see full reader

DESCRIPTION

Blackfin Array Handling Part 1. Making an array of Zeros void MakeZeroASM(int foo[ ], int N);. To be tackled – Array handling. Setting test environment – part of Lab.0 Setting up the tests Writing “enough” assembly code so you can “call the code, and return without crashing” - PowerPoint PPT Presentation

TRANSCRIPT

Blackfin Array HandlingPart 1

Making an array of Zeros void MakeZeroASM(int foo[ ], int N);

Array handling -- part 1 -- M. Smith

2 of 30

To be tackled – Array handling

Setting test environment – part of Lab.0

Setting up the tests Writing “enough” assembly code so you can “call the

code, and return without crashing” Setting one value in an array Moving through an array

– Hard coding and auto-increment addressing modes– Software loops– Hardware loops will be covered in a later lecture

Array handling -- part 1 -- M. Smith

3 of 30

The test

Initialize the test array

Check (some) initial values

Call the assembly code routine

Check (some) final values

Array handling -- part 1 -- M. Smith

4 of 30

“Just enough code” to safely return after call

Tell “linker” which “section” is needed to place the code – program memory section NOT data

Tell “linker” that this is available for all to use (global and not private function)

Start label – need colon :

End label with RTS statementRTS = ReTurn from Subroutine

Array handling -- part 1 -- M. Smith

5 of 30

Build the project (F7)

Array handling -- part 1 -- M. Smith

6 of 30

Build the project (F7) also loads “.dxe” if successful

Array handling -- part 1 -- M. Smith

7 of 30

Run the code “F5”

Array handling -- part 1 -- M. Smith

8 of 30

BEST INDICATION that code “ran to completion”

DISASSEMBLY WINDOW SHOWS “BLUE LINE”AT __lib_prog_term – library program terminate function

Array handling -- part 1 -- M. Smith

9 of 30

indication that code “ran to completion”

ALL expected tests ran and the assert statistics are shown

Array handling -- part 1 -- M. Smith

10 of 30

IF E-TDD GUI is active then “double click” on the error takes you to the test

We “expect” the test to failas we only have “stub” being

used to check “linkage”

Array handling -- part 1 -- M. Smith

11 of 30

Set first value in array to 0Will pass the first test if correctly done

Blackfin is like MIPS, passes parameters into functions using registers and the stack

R0 – first parameter R1 – second parameter R2 – third parameter Fourth parameter passed on the stack

Array handling -- part 1 -- M. Smith

12 of 30

Like MIPs, Blackfin has “load” and “store” architecture

Blackfin is like MIPS – it has load and store architecture

This means you can’t put values directly into memory You must load value into a register and then store register to memory

Double click on the errorjumps you to the errorin the “source” code

ILLEGAL TO STORE A VALUEDIRECTLY TO MEMORY

Array handling -- part 1 -- M. Smith

13 of 30

MIPs has “general” registersBlackfin has “data” and “pointer” registers

Blackfin (like Motorola 68K) has “data” and “pointer” registers

“data” registers store data values “pointer” registers store addresses and can be used to access memory

Why not useR1 = 0;

Rather than R2 = 0;

ILLEGAL TO STORE A VALUE DIRECTLY TO MEMORYPlace in register, store register value

ILLEGAL TO USE [R0] TO ACCESS MEMORY

Array handling -- part 1 -- M. Smith

14 of 30

“address” parameter passed in “data” register R0. Move R0 to “pointer” P0

Blackfin (like Motorola 68K) has “data” and “pointer” registers

P0 = R0; transfer “parameter” (R0) into a pointer register (P0) [P0] = R2; Use “pointer” register to access memory

ILLEGAL TO STORE A VALUE DIRECTLY TO MEMORYPlace in register, store register value

Array handling -- part 1 -- M. Smith

15 of 30

Assembler “warns” you about inefficiencies in your code -- WAIL

You set P0 and then immediately use P0 This causes the processor “instruction

pipeline” to stall

Array handling -- part 1 -- M. Smith

16 of 30

Note that one more test has now passed

E-TDD GUIdeactivated

so “click” to find error no longer works

Right click toshow “line”numbers

Array handling -- part 1 -- M. Smith

17 of 30

Make first 5 values of array = 0 through “hard-coding” (straight line coding)

Weird error messages

[P0 + 0] and [P0 + 4]are legal

[P0 + 1], [P0 + 2], [P0 + 3]are illegal

Reason – we are using“ints” – 32-bit values

4 bytes for each memory location

Array handling -- part 1 -- M. Smith

18 of 30

Increment pointer register by 4 when accessing “int” arrays

Get correct result when increment by 4

Avoid this common addressing error by allowing the processor to do the calculation

Array handling -- part 1 -- M. Smith

19 of 30

“AUTO”Increment pointer register by 4 when accessing “int” arrays

Get correct result when increment by 4

Avoid this common addressing error by allowing the processor to do the calculation

Array handling -- part 1 -- M. Smith

20 of 30

Add new tests for

10 points

NOTE

COMPILER

ERROR MESSAGE

Fix code by tellingcompiler that thechange is not a defect

Array handling -- part 1 -- M. Smith

21 of 30

#undef N#define N 10 – stops error messages

Array handling -- part 1 -- M. Smith

22 of 30

As expected – code fails the new test

Array handling -- part 1 -- M. Smith

23 of 30

REFACTOR the code to make it more readable REFACTORING does not fix errors

Define the incomingparameters

Array handling -- part 1 -- M. Smith

24 of 30

REFACTOR the code to make it more readable REFACTORING does not fix errors

Define the local variables

called “registering” the variables

An “optimization” as “C++” would place these on the “local stack”

Array handling -- part 1 -- M. Smith

25 of 30

REFACTOR the code to make it more readable REFACTORING does not fix errors

This FORMATTING is this “course” REQUIREDconvention for coding as makes it easier to understand by you, TA’s and me

Array handling -- part 1 -- M. Smith

26 of 30

Attempt 1 at doing “software for-loop”

Set count = 0

Check count

Loop content

Increment countjump to loop start

BUT GET ERRORMESSAGE

Array handling -- part 1 -- M. Smith

27 of 30

Hint at what is wrong

LOOP is in blue

Blue means “keyword” inBlackfinassembly

Only works (turns BLUE)if using VDSP editor

Array handling -- part 1 -- M. Smith

28 of 30

LOOPIs a keyword for the Blackfinassembly codeas the processorcan do “highlyefficient”hardware loops

Array handling -- part 1 -- M. Smith

29 of 30

Will do “hardware loops” in another class

ZERO OVER-HEAD LOOPSHARDWARE DOES count++and check for count >= N

Array handling -- part 1 -- M. Smith

30 of 30

Tackled – Basic Array handling

Setting test environment – part of Lab.0

Setting up the tests Writing “enough” assembly code so you can “call the

code, and return without crashing” Setting one value in an array Moving through an array

– Hard coding and auto-increment addressing modes– Software loops– Hardware loops will be covered in a later lecture

top related