Bitbanding ja oder nein?

OP #2591898
Lesenswert?

Hi,

CORTEX M3 µC bieten ja das Bitbanding feature. Gerade wenn man nur ein 
einzelnes Bit in einem Register ändern will scheint das dazu ja ideal, 
da nur ein Schreibzugriff und kein read-modify-write notwendig (ich 
spreche hier von einem Fujitsu der kein BSS/BRR wie der STM32 hat).

Sehe ich das richtig, oder gibt es Gründe, die gegen BitBanding 
sprechen?

Gruß
Thomas
Gast #2591905
Lesenswert?

Hallo,

ich kenne den Prozessor (welchen eigentlich) nicht, aber ich rate zum 
genauen Studium des Manuals: es gibt Prozessoren, die Bit-Befehle 
aufweisen, diese aber mit einem internen Read-Modify-Write ausführen. 
Dann bestehen natürlich die gleichen Probleme.

Gruss Reinhard
#2591932
Lesenswert?

Das BitBanding is ne feine Sache, geht sehr schnell und lässt sich 
intuitiv bedienen, wenn man sich die Makros richtig zusammenbaut.
Es gibt jedoch zumindest einen Fallstrick über den ich schon gestolpert 
bin. Es gibt bestimmte Bits in Statusregistern, die sich durch das Lesen 
automatisch zurücksetzen. Das klappt mit BitBanding nicht unbedingt. Das 
sollte man bei der Fehlersuche im Auge behalten und sich nicht wundern.
#2591999
Lesenswert?

Hier z.b. fürn STM32F103 das Tx-Enable Bit der ersten seriellen 
Schnittstelle
1
#define STM32_PERIPH_BASE           ((tDWord)0x40000000)     /*!< Basisadresse Peripherie */
2
#define STM32_PERIPH_BB_BASE        ((tDWord)0x42000000)   
3
#define STM32_USART1_BASE           (STM32_APB2PERIPH_BASE + 0x3800)    /*!< SCI1 */
4

5

6
#define STM32_SCI1_wSR_TXE     (*(STM32_REG *)(STM32_PERIPH_BB_BASE |(((STM32_USART1_BASE) - STM32_PERIPH_BASE)<<5) | STM32_PERIPH_BB_BASE |(7<<2)))
sowas findest du aber bestimmt auch beim Hersteller
Gast #2592139
Lesenswert?

A. K. schrieb:
> Ob schneller weiss ich nicht, mag sein. Jedenfalls aber ist es nicht
> durch Interrupts unterbrechbar.

Das ist nur ein Problem, ein anderes ist die Frage, mit welchem Register 
RMW ausgeführt wird. Handelt es sich um ein Ausgaberegister des 
entsprechenden Ports, ist das ok, wird dagegen RMW direkt am Port 
ausgeführt, so werden Eingänge eingelesen und dann mit dem gleichen Wert 
beschrieben, was Nebenwirkungen auf die nicht betroffenen Bits hat.

Eigentlich müsste ein solcher Bit-Set-Befehl verboten sein, wenn er 
Nebenwirkungen hat, aber meines Wissens gibt es das doch irgendwo.

Gruss Reinhard
Gast #2592178
Lesenswert?

Thomas Burkhart schrieb:
> @rangi: Hast Du mal ein beispiel für so ein Makro?

Ich nehm sowas:
1
#define SETBITBANDING(ADDR,BIT)    ((uint32*) ((ADDR & 0x60000000) + 0x02000000 + ((ADDR & 0xFFFFF) << 5u) + (BIT << 2u)))

Bitbanding auf dem M3 ist aber lt. J.Yiu nur für das erste MB des SRAM 
und das erste MB der "peripheral region" gültig. Für den NVIC klappts 
somit leider nicht
#2592195
Lesenswert?

Reinhard Kern schrieb:

> Das ist nur ein Problem, ein anderes ist die Frage, mit welchem Register
> RMW ausgeführt wird. Handelt es sich um ein Ausgaberegister des
> entsprechenden Ports, ist das ok, wird dagegen RMW direkt am Port
> ausgeführt, so werden Eingänge eingelesen und dann mit dem gleichen Wert
> beschrieben, was Nebenwirkungen auf die nicht betroffenen Bits hat.

Ja, aber das ist bei dem programmierten nicht-atomaren Äquivalent
   reg |= 1<<bit;
auch nicht anders. Solange man die Bitbandings als atomares Pendant 
davon betrachtet liegt man im grünen Bereich. Man darf es nur nicht 
als exaktes Äquivalent zu den verbreiteten BitSet/Clr I/O-Registern 
sehen.

Wenn man im NXP Produktspektrum wildert, dann muss man natürlich auch im 
Auge behalten, dass nicht alle LPC1000er einen CM3 Core enthalten und 
der CM0 kein Bitbanding kann.
#2592235
Lesenswert?

PS: Ich habe grad mal bei den FM3 reingesehen. Die verwenden 
sinnvollerweise getrennte Register für rein und raus, vgl. AVR. Daher 
kann Bitbanding gefahrlos auf das Output Register angewandt werden.

Das gehört sowieso zu einer meiner ersten Fragen beim Blick ins Manual 
eines unbekannten Controllers. Wenn da sowas konfuses wie die ARM 
Macrocell drinsteckt (STR9, LM3), dann sieht es schlecht aus. Auch bei 
den STR7 ist dieser Aspekt ziemlich dubios.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren