rust-embedded / cortex-m-quickstart

Template to develop bare metal applications for Cortex-M microcontrollers
782 stars 164 forks source link

Debug have some problems "unknown command: `arm` " #111

Open adminSxs opened 2 years ago

adminSxs commented 2 years ago

Os: win10 toolchain: stable-x86_64-pc-windows-msvc

config.toml

[target.thumbv7m-none-eabi]
# uncomment this to make `cargo run` execute programs on QEMU
runner = "qemu-system-arm -cpu cortex-m3 -machine lm3s6965evb -nographic -semihosting-config enable=on,target=native -kernel"

[target.'cfg(all(target_arch = "arm", target_os = "none"))']
# uncomment ONE of these three option to make `cargo run` start a GDB session
# which option to pick depends on your system
 runner = "arm-none-eabi-gdb -q -x openocd.gdb"
# runner = "gdb-multiarch -q -x openocd.gdb"
# runner = "gdb -q -x openocd.gdb"

rustflags = [
  # This is needed if your flash or ram addresses are not aligned to 0x10000 in memory.x
  # See https://github.com/rust-embedded/cortex-m-quickstart/pull/95
  "-C", "link-arg=--nmagic",

  # LLD (shipped with the Rust toolchain) is used as the default linker
  "-C", "link-arg=-Tlink.x",

  # if you run into problems with LLD switch to the GNU linker by commenting out
  # this line
  # "-C", "linker=arm-none-eabi-ld",

  # if you need to link to pre-compiled C libraries provided by a C toolchain
  # use GCC as the linker by commenting out both lines above and then
  # uncommenting the three lines below
  # "-C", "linker=arm-none-eabi-gcc",
  # "-C", "link-arg=-Wl,-Tlink.x",
  # "-C", "link-arg=-nostartfiles",
]

[build]
# Pick ONE of these compilation targets
# target = "thumbv6m-none-eabi"        # Cortex-M0 and Cortex-M0+
target = "thumbv7m-none-eabi"        # Cortex-M3
# target = "thumbv7em-none-eabi"       # Cortex-M4 and Cortex-M7 (no FPU)
# target = "thumbv7em-none-eabihf"     # Cortex-M4F and Cortex-M7F (with FPU)
# target = "thumbv8m.base-none-eabi"   # Cortex-M23
# target = "thumbv8m.main-none-eabi"   # Cortex-M33 (no FPU)
# target = "thumbv8m.main-none-eabihf" # Cortex-M33 (with FPU)

I follow embedded book https://doc.rust-lang.org/stable/embedded-book/start/qemu.html cargo build success, but i want to dbg, i use arm-none-eabi-gdb -q -x openocd.gdb

warning: No executable has been specified and target does not support                                           
determining executable automatically.  Try using the "file" command. 
0x00000464 in ?? ()                                                  
No symbol table is loaded.  Use the "file" command.                                                    
Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal]
No symbol table is loaded.  Use the "file" command.                                                    
Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal]
No symbol table is loaded.  Use the "file" command.                                                    
Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal]
No symbol table is loaded.  Use the "file" command.                                                    
Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal]
unknown command: 'arm'
.\openocd.gdb:37: Error in sourced command file:
No executable file specified.
Use the "file" or "exec-file" command.
jonathanpallant commented 2 years ago

The runners get the ELF file added to the command line arguments automatically. It appears you ran GDB by hand but didn't specify the path to the ELF file. Hence the error "No executable has been specified".

Either:

$ cargo run

Or

$ arm-none-eabi-gdb -q -x openocd.gdb ./target/thumbv7m-none-eabi/debug/<your-crate-name>