On 08-06-12 06:45, Ludo Brands wrote:
Handcrafted alignment:
var
ReservedBlock:array[0..$1FF] of byte;
IntVectors:pointer;
begin
IntVectors:=pointer((ptruint(@ReservedBlock[0])+$100) and not $ff);
End;
Or dynamic:
Var
pReservedBlock,IntVectors:pointer;
begin
Getmem(pReservedBlock,$200);
IntVectors:=pointer((ptruint(pReservedBlock)+$100) and not $ff);
End;
Thanks Ludo,
I'll take that as a starting point. I hope I will not need the "lost"
256 bytes in the future.
I can replace the IntVectors-pointer with a pointer to a record of
pointers, isn't it ? That way I have a clearer view of what vectors I'm
working with.
TIntVectorTable = record of
NMI_Handler,
HardFault_Handler,
MemManage_Handler,
BusFault_Handler,
UsageFault_Handler,
SWI_Handler,
DebugMonitor_Handler,
PendingSV_Handler,
Systick_Handler,
(* STM32 specific Interrupt Numbers *)
WWDG_Handler,
PVD_Handler,
...
USBWakeUp_Handler : pointer;
end {TIntVectors};
var
IntVectors : ^TIntVectorTable;
ReservedBlock:array[0..$FF+SizeOf(TIntVectorTable)] of byte;
procedure SystickProc; interrupt;
begin
...
end;
begin
IntVectors:=pointer((ptruint(@ReservedBlock[0])+$100) and not $ff);
IntVectors^.SystickHandler:=@SystickProc;
...
end.
Koenraad
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal