VisualDSP++ Bild laden

Gast #823252
Hi

Bin leider noch sehr neu dabei in der Programmierung mit VisualDSP 
Version 5 und bräuchte jetzt mal eure Hilfe.

Zur Zeit arbeite ich nur in einer Simulation und würde gerne ein JPG 
Bild bzw. ein BMP Bild (je nachdem was leichter geht) von der Festplatte 
laden/einlesen.

Habe aber leider keinerlei Ahnung wie ich das bewerkstelligen kann. Habt 
Ihr da einen Tipp für mich?
Persönliche Seite #825000
Hi,

wenn du mit dem Target verbunden bist kannst du ueber den Menueeintrag 
Memory->Fill eine Datei direkt ins RAM des Zielprozessors schreiben.
Also z.B. im Programm einen ausreichend grossen Puffer allozieren und 
danach einfach benutzen. Beim Debuggen haelst du das Programm nach dem 
allozieren mit einem Breakpoint an und fuellst den Puffer manuell. 
Danach kannst du das Bild verarbeiten.

Ich benutze fuer solche Experimente gerne das TGA-Format. Ist unheimlich 
simpel: 18 Byte Header und danach einfach die unkomprimierten Farbwerte 
(z.B. BGR, 24-Bit).

Viel Erfolg :-)
Sebastian
Gast #832291
Könntest du mir dafür vielleicht mal ein bisschen Beispiel Code posten 
wie ich das anstelle. Wenn ich es genauso mache wie du sagst, kommt bei 
mir nur Pixelbrei bei raus.
Gast #832848
Hi.
Wenn ich auf Memory-Fill klicke und dann ein Bild ab 0x0 schreibe Count, 
der Anzahl der Pixel entspricht (+ Header) und Stride auf 1 steht und 
ich dann versuche mit den geschriebenen Bereich ab 0x37 (also hinterm 
Header) anzugucken, dann bekomme ich alles andere zu sehen außer dem 
eigentlich Bild.

Hier noch mal die Einstellungen vom "Fill Memory"

Fill memory from: Binary file
File name: datei.bmp

Adress: 0x0
Count: 1214
Stride: 1
#832873
Okay das Problem laden und Anzeigen hat sich jetzt geklärt. nur wie 
reserviere ich mir eine festen speicherbereich und lade genau in diesen 
bereich mein bild bzw wie greife ich dann darauf zu?

dazu würde mir vielleicht ein bissl code helfen.

Vielen Dank
Persönliche Seite #840514
War ein Paar Tage unterwegs, nun gehts weiter :)

In den Projekt-Optionen in VisualDSP habe ich einen neuen Heap im SDRAM 
(L3) angelegt und "HEAP_SDRAM" genannt. Ich falls du nicht die 
automatisch erzeugten LDF-Files benutzt musst du da ggf. selbst Hand 
anlegen.
In dem Neuen Heap kannst du dann wie folgt Speicher reservieren:
1
  uint16_t *fb;
2
  int heap_index;
3

4
  heap_index = heap_lookup(HEAP_SDRAM);
5

6
  if (heap_index < 0) {
7
    printf("Heap %d is not setup\n", HEAP_SDRAM);
8
    exit(EXIT_FAILURE);
9
  }
10

11
  printf("L1:    % 8u bytes free\n", heap_space_unused(0));
12
  printf("SDRAM: % 8u bytes free\n", heap_space_unused(heap_index));
13

14
  fb = heap_malloc(heap_index, TFT_WIDTH * TFT_HEIGHT * sizeof(uint16_t));
15
  if(fb == NULL)
16
  {
17
    printf("ERROR: Not enough memory in SDRAM!\n");
18
    exit(EXIT_FAILURE);
19
  }

Danach habe ich einfach einen Breakpoint gesetzt, die Adresse in fb 
ausgelesen und das Bild per Memory Fill an die entsprechende Adresse 
geschrieben.
Gast #848975
Hi,

Breakpoint setzen z.B. auf die Zeile
1
 if(fb == NULL)

Dann das Programm bis zu diesem Breakpoint ausfuehren. Wenn der Debugger 
dort anhaelt einfach mit der Maus auf den Variablennamen zeigen. ein 
Tooltipp mit der Adresse erscheint. Du kannst natuerlich auch im 
Debugger Menue "Watch..." (oder so aehnlich, hab grad kein VDSP da) 
auswaehlen und den Variablennamen eintippen.

hth,
Sebastian
Gast #860558
Hi

Ich brauch mal wieder eure Hilfe.
Ich hab mir jetzt im User Heap nen Speicher angelegt mit "HEAP_IMAGE"

Wenn ich jetzt versuch:
1
uint16_t *fb;
2
  int heap_index;
3

4
  heap_index = heap_lookup(HEAP_IMAGE);
5

6
  if (heap_index < 0) {
7
    printf("Heap %d is not setup\n", HEAP_IMAGE);
8
    exit(EXIT_FAILURE);
9
  }
10

11
  printf("L1:    % 8u bytes free\n", heap_space_unused(0));
12
  printf("SDRAM: % 8u bytes free\n", heap_space_unused(heap_index));
13

14
  fb = heap_malloc(heap_index, TFT_WIDTH * TFT_HEIGHT * sizeof(uint16_t));
15
  if(fb == NULL)
16
  {
17
    printf("ERROR: Not enough memory in SDRAM!\n");
18
    exit(EXIT_FAILURE);
19
  }

Dann bekomm ich nur die Fehlermeldung:
1
".\SignDetect_Blackfin.c", line 4: cc0020:  error: identifier "HEAP_SDRAM" is
2
          undefined
3
    heap_index = heap_lookup(HEAP_IMAGE);

Jemand eine Ahnung woran das liegt?
Gast #860560
1
".\SignDetect_Blackfin.c", line 4: cc0020:  error: identifier "HEAP_IMAGE" is
2
          undefined
3
    heap_index = heap_lookup(HEAP_IMAGE);

Natürlich kommt das.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.