Sida 1 av 1

GDB->OpenOCD flash varning

Postat: 20 februari 2011, 00:36:48
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

Re: GDB->OpenOCD flash varning

Postat: 20 februari 2011, 10:36:14
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.

Re: GDB->OpenOCD flash varning

Postat: 20 februari 2011, 11:22:10
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.

Re: GDB->OpenOCD flash varning

Postat: 20 februari 2011, 13:32:38
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>

Re: GDB->OpenOCD flash varning

Postat: 20 februari 2011, 14:06:00
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. :(

Re: GDB->OpenOCD flash varning

Postat: 20 februari 2011, 16:20:37
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!

Re: GDB->OpenOCD flash varning

Postat: 20 februari 2011, 23:02:16
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".

Re: GDB->OpenOCD flash varning

Postat: 24 februari 2011, 18:34:21
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! :)

Re: GDB->OpenOCD flash varning

Postat: 24 februari 2011, 19:01:41
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... :-)

Re: GDB->OpenOCD flash varning

Postat: 25 februari 2011, 11:12:20
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: (?)