AVR embedded - Register für Compiler sperren?

Antworten
Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

AVR embedded - Register für Compiler sperren?

Beitrag von Timm Thaler »

Kann ich beim AVR (konkret ATmega328P) einzelne Register für die Verwendung im Compiler sperren, so dass sie mir explizit zur Verfügung stehen?

Beispiel, ich habe in Assembler die Register r8 bis r15 für PMW-Werte reserviert

.

Code: Alles auswählen

.DEF	VPWM1		= r8		;PWM Werte
.DEF	VPWM2		= r9		;
.DEF	VPWM3		= r10		;
.DEF	VPWM4		= r11		;
...
.DEF	PCTS		= r24		;PWM Counter
und greife in einer zeitkritischen Soft-PWM direkt auf diese Register zu

Code: Alles auswählen

	cp	PCTS, VPWM1
	brsh	timer1_pwm1
	sbr	XL, (1<<Pout1)		;PWM 1 ein	
timer1_pwm1:
Jetzt will ich das Ganze auf Pascal mit Inline-Assembler übertragen

Code: Alles auswählen

    lds   r22, pwm1
    cp    r21, r22
    brsh  pwm_out1
    ori   r19, 8
pwm_out1:
Und brauche dafür einen zusätzlichen Lesezugriff. Das klingt nicht viel, macht aber bei 8 PWMs und ein paar andern Dreckeffekten (mehr push-pop, pwm-Counter laden und sichern) schnell den Unterschied zwischen 40 und 60% Prozessorzeit für diesen einen Interrupt.

Wenn ich jetzt dem Compiler sagen könnte, dass er die Register r9 bis r15 nicht verwenden darf und ich diese selbst verwende, würde das die ISR deutlich schneller machen.

Geht das?

PascalDragon
Beiträge: 834
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: AVR embedded - Register für Compiler sperren?

Beitrag von PascalDragon »

Nein, du müsstest dafür den Compiler anpassen.
FPC Compiler Entwickler

Antworten