siro hat geschrieben: Fr 19. Aug 2022, 13:38
Absolute ist eigentlich unumgänglich für Embedded Anwendungen.
So werden die Register des Controllers definiert, die ja immer an einer festen Adresse liegen.
Beispielsweise so:
Unumgänglich würde ich nicht sagen, pointer gehen einfach:
Code: Alles auswählen
const SYSTICK_BASE_ADDRESS = $E000E010; // Basisadresse beim STM32Fxxx
var STK_CTRL : PDWORD = PDWord(SYSTICK_BASE_ADDRESS + 0); // Steuerung interupt Clock select usw.
var STK_LOAD : PDWORD = PDWord(SYSTICK_BASE_ADDRESS + 4; // Zaehlerwert welcher beim Erreichen von 0 wieder geladen werden soll
var STK_VAL : PDWORD = PDWord(SYSTICK_BASE_ADDRESS + 8); // aktuelle Zählerstand des 24 Bit Zählers
begin
STK_CTRL^ := 7; // counter enable, enable interrupt
.....
Zugegeben das ist einer der Fälle indenen man argumentieren kann das der syntaktische zucker von absolut ganz nett ist, aber im endeffekt nimmt es nur den "aufwand" einmal ^ tippen zu müssen. Aber ist ^ tippen wirklich so viel aufwand das das einen ganz eigenes syntaktisches Konstrukt?
Man könnte argumentieren das man damit ja ausversehen den pointer modifizieren könnte, aber das kann man mit const fixen:
Code: Alles auswählen
const SYSTICK_BASE_ADDRESS = $E000E010;
const STK_CTRL = PDWord(SYSTICK_BASE_ADDRESS + 0);
begin
STK_CTRL^ := 42;
STK_CTRL := 32; // Error: Can't assign values to an address
end.
Die const variante ist sogar 7 chars kürzer als die absolute variante, also man kann 7 mal ^ benutzen bevor man den selben tippaufwand hat
Also auch hier muss ich sagen: Absolut kein grund absolut zu verwenden.
Bei einem Spezialfall sollte man sich immer Fragen ob der wirklich speziell genug ist eine eigene syntax mit eigenen implikationen (wie hier das aushebeln aller compilerchecks bei verwendung für andere zwecke wie z.b. typecasting) zu bekommen, und für absolut seh ich das beim besten willen nicht