Download presentation
Presentation is loading. Please wait.
Published byTucker Killman Modified over 9 years ago
1
UEE072HM Linking HLL and ALP An example on ARM
2
Embedded and Real-Time Systems We will mainly look at embedded systems –Systems which have the computer system embedded within their application area, normally using a specialised single board computer (SBC) –There is a difference between embedded and real-time – one does not imply the other –Hard real-time vs soft real-time
3
Embedded Systems Development Embedded systems require host-target development – this means –The development is done on a different machine than the target –The code must be downloaded to run –Can be running on different CPU and architecture
4
Host Target Development Development Host (Linux?) Target boards
5
Embedded Systems Development Embedded systems development requires –Mixed language programming – HLL plus assembler –Increased knowledge of tools – compiler, linker and librarians –Use of specialised tools – i.e. down loaders –Special skills to debug code
6
Using C for Embedded Systems A major requirement is for direct memory access, this is achieved using pointers. This style of code is quite common #define ADDRESS 0xFFFF41 main() { char *mem_p; mem_p=(char*)ADDRESS; while !(*mem_p ) ;// do nothing }
7
Using C for Embedded Systems Note –Use of # define –Use of char * –Use of volatile –Casting of return value –Use of binary op & #define ADDRESS 0xFFFF41 #define MASK 0x3 main() { volatile char *mem_p; mem_p=(char*)ADDRESS; while !(*mem_p & MASK ) ;// do nothing }
8
Using C for Embedded Systems Using C in Embedded Systems you will need to know more about –Compilation process –Linking –Storage issues
9
Using C for Embedded Systems Compilation issues –Passing parameters –Naming conventions –Symbol table and map generation –Assembler output
10
Why use HLL? Why do high level language programmers need to know the low level details of storage and function calls? –To write more efficient code –To write assembler routines that are called from a HLL –To call assembler routine from a HLL –Improves knowledge of both tools and CPU
11
Why use ALP? Why use assembler in place of HLL? –Speed up code –Smaller code –Special instructions –Boot strap routines –Optimise HLL code
12
Using C for Embedded Systems Ways to link HLL & ALP - passing parameters –Parameter blocks No recursion –Using registers Limited numbers of registers –Using the stack Most favoured method –Many use a combination of the above
13
The run-time stack In order to see how HLLs are implemented we need to know about the run-time stack and the registers that control it. The stack is used for –Storing important values that may get changed during execution –Local variables –Passing some function parameters
14
Function set-up In C function set up consists of –Creating an executable label –Saving the stack pointer into ip –Storing registers used onto the stack Using stmfd store multiple registers instructions –Putting the frame pointer at the stack base gcc2_compiled.:.text.align2.globalmain.type main,function main: @ args = 0, pretend = 0, frame = 8 @ frame_needed = 1 movip, sp stmfdsp!, {fp, ip, lr, pc} subfp, ip, #4
15
Function set-up Stack IP Intra-Procedure FP Frame Pointer FP IP LR PC SP Stack Pointer Registers High memory Low memory
16
Local variables The stack is used for local variable storage The compiler creates a stack frame to store the variables The variables are accessed by an offset from the frame pointer fp This means –variable names can be repeated –functions can be recursively called
17
Create the Stack frame movip, sp stmfdsp!, {fp, ip, lr, pc} subfp, ip, #4 subsp, sp, #8 movr3, #10 strr3, [fp, #-16] movr3, #20 strr3, [fp, #-20] main() { int i, j; i = 10; j = 20; } Initialise Variable i } Initialise Variable j Creating a stack frame
18
A stack frame IP Intra-Procedure FP Frame Pointer FP IP LR PC SP Stack Pointer Registers High memory Low memory FP - 16 FP - 20 i j 10 20
19
Leaving a function call The code to leave a function call is simple –ldmea Load multiple registers command is used from the stack –The old frame & stack pointers & program counter –are restored This does a return with a cleaned stack. L2: ldmeafp, {fp, sp, pc}.Lfe1:.size main,.Lfe1-main
20
@ Generated by gcc 2.95.3 20010315 (release) for ARM/elf.file"ex1.c" @ GNU C version 2.95.3 20010315 (release) (arm-linux) compiled by GNU C version 2.95.2 20000220 (Debian GNU/Linux). @ options passed: -fverbose-asm @ options enabled: -fpeephole -ffunction-cse -fkeep-static-consts @ -freg-struct-return -fsjlj-exceptions -fcommon -fverbose-asm -fgnu-linker @ -fargument-alias -fident -mapcs-32 -mshort-load-bytes -mno-short-load-words gcc2_compiled.:.text.align2.globalmain.type main,function main: @ args = 0, pretend = 0, frame = 8 @ frame_needed = 1, current_function_anonymous_args = 0 movip, sp stmfdsp!, {fp, ip, lr, pc} subfp, ip, #4 subsp, sp, #8 movr3, #10 strr3, [fp, #-16] movr3, #20 strr3, [fp, #-20] movr0, #1 movr1, #2 movr2, #3 movr3, #4 bldo_it.L2: ldmeafp, {fp, sp, pc}.Lfe1:.size main,.Lfe1-main
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.