SAMC20 ASF DmaDescriptor

Gast #5554891
Lesenswert?

Hallo zusammen,
ich versuche gerade den DMA Controller des SAMC20 in Betrieb zu nehmen 
und dafür habe ich mir das Beispiel "Quick Start for SAM ADC Driver with 
DMA - SAM C21 Xplained Pro" angeguckt. In diesem Beispiel wird folgendes 
gemacht:
1
// [transfer_descriptor]
2
COMPILER_ALIGNED(16)
3
DmacDescriptor example_descriptor SECTION_DMAC_DESCRIPTOR;
4
// [transfer_descriptor]
Kann mir bitte jemand erklären, was da gemacht wird?

Vielen Dank!

Simon
#5554948
Lesenswert?

Nicht viel:

Es wird der Speicherplatz der Struktur des Types DmacDescriptor unter 
dem Sysmbol example_descriptor reserviert an einer Adresse in 
SECTION_DMAC_DESCRIPTOR, die durch 16 teilbar ist. Diese Ausrichtung 
(Alignment) an dieser 16 Byte Grenze ist nötig, damit die DMA Hardware 
darauf zugreifen kann.

Im späteren Verlauf des Programms muss der DMA Hardware die Adresse der 
Struktur mitgeteilt werden.
Gast #5554971
Lesenswert?

Hallo Tim,

vielen Dank für die erhellenden Worte.

Etwas verstehe ich aber noch nicht richtig.
Was für ein "konstrukt" ist die folgende Zeile?
1
DmacDescriptor example_descriptor SECTION_DMAC_DESCRIPTOR;


Ich dachte eine Variablendeklaration sieht immer so aus:
1
int foo = 12;
#5554984
Lesenswert?

SECTION_DMAC_DESCRIPTOR ist ein define. Wahrscheinlich findest du es 
irgendwo in den Sourcen mit einer Compiler-Anweisung. Das ist streng 
genommen kein Programmcode, sondern nur ein Hinweis für den Compiler, in 
welche Section er die Variable legen soll.

Ansonsten steht da:
Type VariablenName;

Also genau so, wie du es kennst. Deklaration ohne Default-Wert.
#5555007
Lesenswert?

Simon schrieb:
> DmacDescriptor example_descriptor SECTION_DMAC_DESCRIPTOR;

Da sind Makros drin.

GCC "sieht" nach Macro Expansion im Präprozessor sowas ähnliches:
1
DmacDescriptor example_descriptor __attribute__((section("DMA_STUFF")));


Die Idee dahinter ist das "DMA_STUFF" nicht unbedingt im "normalen" 
Datensegment liegen muss. Einige µC haben nicht-kontinuierliche RAM 
Speicherbereiche, da muss man dem LD Linker mit sowas unter die Arme 
greifen.

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