GDB->OpenOCD flash varning

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

GDB->OpenOCD flash varning

Inlägg av Korken »

Godagens!

När jag flashar min NXP LPC1769 (Cortex-M3) med GDB via OpenOCD så får jag en konstig varning; "No flash at address 0x10000000".
Det som ligger där är min stack som jag vill ha först i minnet.

Och jag förstår inte varningen som jag får, då jag inte skriver nå data utan bara allokerar utrymmet.
Samt gör man en objdump så stämmer allt, stacken ligger först som den ska.
Vet någon hur man fixar bort denna varning?

Mvh
Emil

Link.T :

Kod: Markera allt

MEMORY 
{
    FLASH (rx) : ORIGIN = 0x0, LENGTH = 512k
    SRAM (rwx) : ORIGIN = 0x10000000, LENGTH = 32k
    /* SRAM2 (rwx) : ORIGIN = 0x20000000, LENGTH = 32k */
}

SECTIONS
{
  .text : { 
	*(.vectors)
	*(.text)
	*(.lookup)
	. = ALIGN(4);
	_DATA_FLASH_START = .;
	} > FLASH
  
  .stackarea : {
	*(.stackarea)
  } > SRAM
  
  .bss : { 
    . = ALIGN(4);
    PROVIDE(_BSS_START = .);
    *(.bss) 
    PROVIDE(_BSS_END = .);
  } > SRAM

  .data : { 
    . = ALIGN(4);
    _DATA_START = .;
    *(.data)
    _DATA_END = .;
  } > SRAM AT > FLASH
}
Kod:

Kod: Markera allt

#define STACK_SIZE	1024
__attribute__((section(".stackarea"))) int stack[STACK_SIZE];
Utdrag ur objdump:

Kod: Markera allt

Disassembly of section .stackarea:

10000000 <stack>:
	...

Disassembly of section .bss:

10001000 <_BSS_START>:
10001000:	00000000 	andeq	r0, r0, r0

10001004 <ADC_struct>:
	...

Disassembly of section .data:

10001024 <ADC_values>:
10001024:	10001004 	andne	r1, r0, r4

10001028 <SystemFrequency>:
10001028:	00b71b00 	adcseq	r1, r7, r0, lsl #22
Flash script för GDB:

Kod: Markera allt

monitor reset halt
monitor mww 0x400fc040 1
monitor flash erase_address 0x00000000 0x00080000
monitor flash write_image main.elf 0 elf
file main.elf
monitor reset halt
monitor wait_halt
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: GDB->OpenOCD flash varning

Inlägg av SvenW »

Har du provat att göra 'load main.elf' i stället för 'monitor flash write_image main.elf 0 elf'.
Möjligen försöker 'monitor flash write_image' lägga saker i flash som inte hör dit.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: GDB->OpenOCD flash varning

Inlägg av Korken »

Det har jag testar. Får alltid "Load failed." när jag kör med det kommandot, därför jag kör med write_image.
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: GDB->OpenOCD flash varning

Inlägg av SvenW »

Detta är ytterligare en spekulation:

Load borde fungera.
Jag var emellertid tvungen att fiffla lite i filen 'openocd.cfg'.
Ursprungliga rader bortkommenterade. (Obs ej samma processor)

Kod: Markera allt

set _FLASHNAME $_CHIPNAME.flash
#flash bank $_FLASHNAME stm32x 0 0 0 0 $_TARGETNAME
#flash bank stm32x 0 0 0 0 $_TARGETNAME
#flash bank $_FLASHNAME stm32x 0 0 0 0 $_TARGETNAME gdb_flash_program enable
flash bank $_FLASHNAME stm32x 0x08000000 0x20000 0 0 $_TARGETNAME gdb_flash_program enable

# Error: usage: flash bank <name> <driver> <base> <size> <chip_width> <bus_w>
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: GDB->OpenOCD flash varning

Inlägg av Korken »

Jo, load borde fungera.
Kan det bero på min GDB? Jag kör version 7.2.

Testade att lägga till de du hade, men det hjälpte inte. :(
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: GDB->OpenOCD flash varning

Inlägg av SvenW »

Jag har /arm-none-eabi-gdb --version
GNU gdb (Sourcery G++ Lite 2010.09-51) 7.2.50.20100908-cvs

Om du kör vanliga '/usr/local/bin/gdb' blir det kanske konstigheter,(?) men så enkelt är väl inte problemet!
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: GDB->OpenOCD flash varning

Inlägg av Korken »

Jag kör arm-elf-gdb. Ska prata med min föreläsare på tisdag och se om han vet vad som kan göra det.
Dock så är det lite irriterande att det blir som det blir... :doubt:

korken@korken-laptop:~/Desktop/ARM_Toolchain_Builder$ arm-elf-gdb --version
GNU gdb (GDB) 7.2
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details.
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-elf".
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: GDB->OpenOCD flash varning

Inlägg av Korken »

Nu har jag pratat med min föreläsare och han berättade att det var en bugg i OpenOCD.
Det är dock ingen fara med att de händer, det är bara ett medelande som kommer för någon anledning.

Spännande spännande! :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: GDB->OpenOCD flash varning

Inlägg av sodjan »

Om det är en känd bugg och det är ett vanligt förekommende
verktyg, så borde en googling ha hittat det ganska snabbt.
Så antingen är den en mindre känd bugg eller ett verktyg som
inte är så speciellt vanligt... :-)
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: GDB->OpenOCD flash varning

Inlägg av SvenW »

Kikade lite i källkoden för OpenOCD. Felutskiften kommer från rutinen nedan:

openocd-0.4.0
flash/nor/core.c:

Kod: Markera allt

/* lookup flash bank by address */
struct flash_bank *get_flash_bank_by_addr(struct target *target, uint32_t addr)
{
	struct flash_bank *c;

	/* cycle through bank list */
	for (c = flash_banks; c; c = c->next)
	{
		int retval;
		retval = c->driver->auto_probe(c);

		if (retval != ERROR_OK)
		{
			LOG_ERROR("auto_probe failed %d\n", retval);
			return NULL;
		}
		/* check whether address belongs to this flash bank */
		if ((addr >= c->base) && (addr <= c->base + (c->size - 1)) && target == c->target)
			return c;
	}
	LOG_ERROR("No flash at address 0x%08" PRIx32 "\n", addr);
	return NULL;
}
Antingen försöker du skriva in saker med specificerad adress som inte passar in i
någon flash bank, eller är 'c->driver->auto_probe(c)' inte i ordning.

Jag gissar att det senare är fallet, och i så fall kan det möjligen gå att få bort varningen genom att
specificera rätt i 'openocd.cfg' .

Det här fungerar alltså i mitt fall:

Kod: Markera allt

#flash bank $_FLASHNAME stm32x 0 0 0 0 $_TARGETNAME gdb_flash_program enable
flash bank $_FLASHNAME stm32x 0x08000000 0x20000 0 0 $_TARGETNAME gdb_flash_program enable
#  usage: flash bank <name> <driver> <base> <size> <chip_width> <bus_width>
Observera att basadressen 0x08000000 och storleken 0x20000 gäller hos mig, men inte i ditt fall. Om drivern 'stm32x' är den rätta i ditt fall får du nog också undersöka.

Eller är det så att det fungerar att ladda i flash trots varningsutskriften?
I så fall är det väl något helt oväsentligt den inte lyckas få dit: (?)
Skriv svar