SAMC20 ASF DmaDescriptor

Gast #5554891
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.