就这样吧!

合适的工具是必要的,总结一下现在的工具。

keil具备编码,调试功能,支持CMSIS-DAP(野火)(jlink v8 不支持rt1021板子)

使用非gcc,有代码提示功能,但是这个提示差评。支持gcc,选项一些没处设置

MCUXpressoIDE 是gcc的编译器,使用make,对自身的sdk是全支持的(直接提供各种选项),不支持CMSIS-DAP

openocd 这个可以打开设备,可以停机,然后,没有然后了,没有和任何一个ide结合起来。

vscode 好像有支持的插件。但是,没下文...

openocd 设置是这样的

在bin目录下建my.cfg,写入

interface cmsis-dap
transport select swd
source [find target/stm32f4x.cfg]

运行openocd.exe -f my.cfg

显示的结果是这样:

C:\xpack-openocd-0.11.0-4\bin>C:\xpack-openocd-0.11.0-4\bin\openocd.exe -f my.cfg
xPack OpenOCD x86_64 Open On-Chip Debugger 0.11.0+dev (2022-03-25-17:32)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
DEPRECATED! use 'adapter driver' not 'interface'
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD  supported
Info : CMSIS-DAP: Atomic commands supported
Info : CMSIS-DAP: Test domain timer supported
Info : CMSIS-DAP: FW Version = 2.0.0
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 1 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 2000 kHz
Info : SWD DPIDR 0x0bd11477
Info : [stm32f4x.cpu] Cortex-M7 r1p1 processor detected
Info : [stm32f4x.cpu] target has 8 breakpoints, 4 watchpoints
Info : [stm32f4x.cpu] external reset detected
Info : starting gdb server for stm32f4x.cpu on 3333
Info : Listening on port 3333 for gdb connections

stm32f4是M4(cmsisdap的芯) ,这个Cortex-M7 按原义是目标cpu,但没找到

telnet连接4444,输入

halt
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x6000249c msp: 0x2000ffe8
> reg
===== arm v7m registers
(0) r0 (/32): 0x00000000
(1) r1 (/32): 0x00000000
......

gdb 连3333 没成功,按这个修改一个,是个想法,

到此,平台确定是vscode 写 keil 调试, MCUXpressoIDE参考,编译成elf,调试可见c代码

上面不修改了,有新进展

试了下新想法

修改my.cfg 如下

interface cmsis-dap
transport select swd


source [find target/swj-dp.tcl]
source [find mem_helper.tcl]

set _CHIPNAME MIMXRT1021

set _ENDIAN little

# Work-area is a space in RAM used for flash programming
# By default use 32kB (Available RAM in smallest device STM32F410)
if { [info exists WORKAREASIZE] } {
   set _WORKAREASIZE $WORKAREASIZE
} else {
   set _WORKAREASIZE 0x8000
}

#jtag scan chain
if { [info exists CPUTAPID] } {
   set _CPUTAPID $CPUTAPID
} else {
   if { [using_jtag] } {
      # See STM Document RM0090
      # Section 38.6.3 - corresponds to Cortex-M4 r0p1
      set _CPUTAPID 0x4ba00477
   } {
      set _CPUTAPID 0x2ba01477
   }
}

swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu

tpiu create $_CHIPNAME.tpiu -dap $_CHIPNAME.dap -ap-num 0 -baseaddr 0xE0040000

if {[using_jtag]} {
   jtag newtap $_CHIPNAME bs -irlen 5
}

set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME cortex_m -endian $_ENDIAN -dap $_CHIPNAME.dap

$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0


if { [info exists QUADSPI] && $QUADSPI } {
   set a [llength [flash list]]
   set _QSPINAME $_CHIPNAME.qspi
   flash bank $_QSPINAME stmqspi 0x90000000 0 0 0 $_TARGETNAME 0xA0001000
}

# JTAG speed should be <= F_CPU/6. F_CPU after reset is 16MHz, so use F_JTAG = 2MHz
#
# Since we may be running of an RC oscilator, we crank down the speed a
# bit more to be on the safe side. Perhaps superstition, but if are
# running off a crystal, we can run closer to the limit. Note
# that there can be a pretty wide band where things are more or less stable.
adapter speed 2000

adapter srst delay 100
if {[using_jtag]} {
 jtag_ntrst_delay 100
}

reset_config srst_nogate

if {![using_hla]} {
   # if srst is not fitted use SYSRESETREQ to
   # perform a soft reset
   cortex_m reset_config sysresetreq
}

$_TARGETNAME configure -event examine-end {
    # Enable debug during low power modes (uses more power)
    # DBGMCU_CR |= DBG_STANDBY | DBG_STOP | DBG_SLEEP
    mmw 0xE0042004 0x00000007 0

    # Stop watchdog counters during halt
    # DBGMCU_APB1_FZ |= DBG_IWDG_STOP | DBG_WWDG_STOP
    mmw 0xE0042008 0x00001800 0
}

proc proc_post_enable {_chipname} {
    targets $_chipname.cpu

    if { [$_chipname.tpiu cget -protocol] eq "sync" } {
        switch [$_chipname.tpiu cget -port-width] {
            1 {
                mmw 0xE0042004 0x00000060 0x000000c0
                mmw 0x40021020 0x00000000 0x0000ff00
                mmw 0x40021000 0x000000a0 0x000000f0
                mmw 0x40021008 0x000000f0 0x00000000
              }
            2 {
                mmw 0xE0042004 0x000000a0 0x000000c0
                mmw 0x40021020 0x00000000 0x000fff00
                mmw 0x40021000 0x000002a0 0x000003f0
                mmw 0x40021008 0x000003f0 0x00000000
              }
            4 {
                mmw 0xE0042004 0x000000e0 0x000000c0
                mmw 0x40021020 0x00000000 0x0fffff00
                mmw 0x40021000 0x00002aa0 0x00003ff0
                mmw 0x40021008 0x00003ff0 0x00000000
              }
        }
    } else {
        mmw 0xE0042004 0x00000020 0x000000c0
    }
}

$_CHIPNAME.tpiu configure -event post-enable "proc_post_enable $_CHIPNAME"

$_TARGETNAME configure -event reset-init {
    # Configure PLL to boost clock to HSI x 4 (64 MHz)
    mww 0x40023804 0x08012008   ;# RCC_PLLCFGR 16 Mhz /8 (M) * 128 (N) /4(P)
    mww 0x40023C00 0x00000102   ;# FLASH_ACR = PRFTBE | 2(Latency)
    mmw 0x40023800 0x01000000 0 ;# RCC_CR |= PLLON
    sleep 10                    ;# Wait for PLL to lock
    mmw 0x40023808 0x00001000 0 ;# RCC_CFGR |= RCC_CFGR_PPRE1_DIV2
    mmw 0x40023808 0x00000002 0 ;# RCC_CFGR |= RCC_CFGR_SW_PLL

    # Boost JTAG frequency
    adapter speed 8000
}

$_TARGETNAME configure -event reset-start {
    # Reduce speed since CPU speed will slow down to 16MHz with the reset
    adapter speed 2000
}

///
这个就是删除stm32 ,当然,这个不会,就是试试,然后

Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : CMSIS-DAP: SWD  supported
Info : CMSIS-DAP: Atomic commands supported
Info : CMSIS-DAP: Test domain timer supported
Info : CMSIS-DAP: FW Version = 2.0.0
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 1 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 2000 kHz
Info : SWD DPIDR 0x0bd11477
Info : [MIMXRT1021.cpu] Cortex-M7 r1p1 processor detected
Info : [MIMXRT1021.cpu] target has 8 breakpoints, 4 watchpoints
Info : [MIMXRT1021.cpu] external reset detected
Info : starting gdb server for MIMXRT1021.cpu on 3333
Info : Listening on port 3333 for gdb connections
Info : accepting 'gdb' connection on tcp/3333
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x6000249c msp: 0x81dfffe8
Error: Unknown vCont packet
Info : The target is not running when halt was requested, stopping GDB.
Info : The target is not running when halt was requested, stopping GDB.
Info : dropped 'gdb' connection
Info : accepting 'gdb' connection on tcp/3333
Error: Unknown vCont packet
Info : The target is not running when halt was requested, stopping GDB.
Info : The target is not running when halt was requested, stopping GDB.
Info : dropped 'gdb' connection
Info : accepting 'gdb' connection on tcp/3333
Error: Unknown vCont packet
Info : The target is not running when halt was requested, stopping GDB.
Info : The target is not running when halt was requested, stopping GDB.
Info : dropped 'gdb' connection
Info : accepting 'gdb' connection on tcp/3333
Error: Unknown vCont packet
Info : The target is not running when halt was requested, stopping GDB.
Info : The target is not running when halt was requested, stopping GDB.
Info : dropped 'gdb' connection
Info : accepting 'gdb' connection on tcp/3333
invalid command name "s"
invalid command name "setpu"
target halted due to single-step, current mode: Thread
xPSR: 0x01000000 pc: 0x6000249e msp: 0x81dfffe8
target halted due to single-step, current mode: Thread
xPSR: 0x01000000 pc: 0x600024a2 msp: 0x81dfffe8
target halted due to single-step, current mode: Thread
xPSR: 0x81000000 pc: 0x600024a4 msp: 0x81dfffe8
target halted due to single-step, current mode: Thread
xPSR: 0x81000000 pc: 0x60002496 msp: 0x81dfffe8
target halted due to single-step, current mode: Thread
xPSR: 0x81000000 pc: 0x60002498 msp: 0x81dfffe8
target halted due to single-step, current mode: Thread
xPSR: 0x01000000 pc: 0x6000249a msp: 0x81dfffe8
target halted due to single-step, current mode: Thread
xPSR: 0x01000000 pc: 0x6000249c msp: 0x81dfffe8
target halted due to single-step, current mode: Thread
xPSR: 0x01000000 pc: 0x6000249e msp: 0x81dfffe8
invalid command name "start"
invalid command name "s"
invalid command name "s"
invalid command name "s"
target halted due to single-step, current mode: Thread
xPSR: 0x01000000 pc: 0x600024a2 msp: 0x81dfffe8
target halted due to single-step, current mode: Thread
xPSR: 0x81000000 pc: 0x600024a4 msp: 0x81dfffe8
Error: Unknown vCont packet
Info : The target is not running when halt was requested, stopping GDB.
Info : The target is not running when halt was requested, stopping GDB.
Info : dropped 'gdb' connection
Info : accepting 'gdb' connection on tcp/3333
Info : The target is not running when halt was requested, stopping GDB.
Info : The target is not running when halt was requested, stopping GDB.
Info : dropped 'gdb' connection
Info : accepting 'gdb' connection on tcp/3333
Error: Unknown vCont packet
Info : The target is not running when halt was requested, stopping GDB.
Info : The target is not running when halt was requested, stopping GDB.
Info : dropped 'gdb' connection
Info : accepting 'gdb' connection on tcp/3333
Info : dropped 'gdb' connection
Info : accepting 'gdb' connection on tcp/3333
Warn : Prefer GDB command "target extended-remote :3333" instead of "target remote :3333"

前面用ida 可以连,不能调试,看不见单步动作,输入命令有回应(不会用)

后面用arm-none-eabi-gdb.exe连,也能连上(也不会用)

这个算在工作吗?

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线段树(Segment Tree)是一种用于解决区间查询问题的数据结构。它主要用于处理一维区间上的操作,例如区间最小值、最大值、求和等。 线段树的基本思想是将区间划分为一些较小的子区间,并为每个子区间维护一些预先计算的信息,如区间的最小值、最大值、求和等。这样,我们可以通过合并子区间的信息来快速计算出更大区间的信息。 线段树通常使用二叉树表示,其中每个节点表示一个区间。树的根节点表示整个区间,而叶子节点表示单个元素。每个节点都有一个左子节点和一个右子节点,它们分别表示该节点区间的左半部分和右半部分。 线段树的构建过程通常是通过递归地将区间划分为更小的子区间来完成。构建过程中,每个节点都会计算并存储该区间的预处理信息,这样在查询过程中就可以快速获取所需的结果。 对于一个线段树,通常会有以下几种操作: 1. 构建(Build):根据给定的初始数组构建线段树。 2. 查询(Query):在给定区间内查询某种预处理信息,如最小值、最大值、求和等。 3. 更新(Update):更新线段树中某个位置的值,并重新计算相应的预处理信息。 线段树在解决一些区间查询问题上非常高效,时间复杂度通常为O(logN),其中N是原始数组的大小。它被广泛应用于各种问题,如区间最值查询、区间修改、离线查询等场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值