Datum: 26.03.2008 11:04
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?
Datum: 27.03.2008 16:55
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
Datum: 03.04.2008 16:11
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.
Datum: 03.04.2008 17:24
Also um Bilder mit dem Debugger zu uebertragen brauchste ja erstmal gar keinen Code. Beschreib doch mal wo's bei dir haengt, dann muss ich nicht so viel schreiben...
Datum: 04.04.2008 08:43
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
Datum: 04.04.2008 09:12
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
Datum: 12.04.2008 08:31
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:
uint16_t *fb; int heap_index; heap_index = heap_lookup(HEAP_SDRAM); if (heap_index < 0) { printf("Heap %d is not setup\n", HEAP_SDRAM); exit(EXIT_FAILURE); } printf("L1: % 8u bytes free\n", heap_space_unused(0)); printf("SDRAM: % 8u bytes free\n", heap_space_unused(heap_index)); fb = heap_malloc(heap_index, TFT_WIDTH * TFT_HEIGHT * sizeof(uint16_t)); if(fb == NULL) { printf("ERROR: Not enough memory in SDRAM!\n"); exit(EXIT_FAILURE); } |
Danach habe ich einfach einen Breakpoint gesetzt, die Adresse in fb ausgelesen und das Bild per Memory Fill an die entsprechende Adresse geschrieben.
Datum: 21.04.2008 11:16
hi Kannst du mir nochmal sagen, wie ich die adresse von fb auslesen kann?
Datum: 22.04.2008 05:56
Hi, Breakpoint setzen z.B. auf die Zeile
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
Datum: 06.05.2008 15:01
Hi Ich brauch mal wieder eure Hilfe. Ich hab mir jetzt im User Heap nen Speicher angelegt mit "HEAP_IMAGE" Wenn ich jetzt versuch:
uint16_t *fb; int heap_index; heap_index = heap_lookup(HEAP_IMAGE); if (heap_index < 0) { printf("Heap %d is not setup\n", HEAP_IMAGE); exit(EXIT_FAILURE); } printf("L1: % 8u bytes free\n", heap_space_unused(0)); printf("SDRAM: % 8u bytes free\n", heap_space_unused(heap_index)); fb = heap_malloc(heap_index, TFT_WIDTH * TFT_HEIGHT * sizeof(uint16_t)); if(fb == NULL) { printf("ERROR: Not enough memory in SDRAM!\n"); exit(EXIT_FAILURE); } |
Dann bekomm ich nur die Fehlermeldung:
".\SignDetect_Blackfin.c", line 4: cc0020: error: identifier "HEAP_SDRAM" is undefined heap_index = heap_lookup(HEAP_IMAGE); |
Jemand eine Ahnung woran das liegt?
Datum: 06.05.2008 15:02
".\SignDetect_Blackfin.c", line 4: cc0020: error: identifier "HEAP_IMAGE" is undefined heap_index = heap_lookup(HEAP_IMAGE); |
Natürlich kommt das.
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel