WCH沁恒单片机
直播中

百合子

8年用户 882经验值
擅长:控制/MCU
私信 关注
[问答]

CH32V307启动文件长跳转根本不起作用怎么解决?

这边需要写一个IAP,于是在ld文件里面把项目的FLASH起始地址往后挪了0x4000


MEMORY
{
    BOOTFLASH (rx) :ORIGIN=0x00000000, LENGTH=16K
    FLASH (rx) :ORIGIN=0x00004000, LENGTH=176K
    RAM (xrw) :ORIGIN=0x20000000, LENGTH=128K
}


SECtiONS
{
    .bootapp:
    {
        _sbootappinit=.;
        .=ALIGN(4);
        KEEP(*(SORT_NONE(.bootapp)))
        .=ALIGN(4);
        _ebootappinit=.;
    } >BOOTFLASHAT>BOOTFLASH


    .init:
    {
        _sinit=.;
        .=ALIGN(4);
        KEEP(*(SORT_NONE(.init)))
        .=ALIGN(4);
        _einit=.;
    } >FLASHAT>FLASH
为了方便调试,在前面塞了个bootFLASH段,写了个新的s文件.在BOOTFLASH段,里面只有一个j指令,跳到原本的地址:

    .section .bootapp,"ax",@progbits
    .global _boot
    .align  1
_boot:
    j _start
    .word0x00000013
    .word0x00000013
    .word0x00000013
    .word0x00000013
    .word0x00000013
    .word0x00000013
    .word0x00000013
    .word0x00000013
    .word0x00000013
    .word0x00000013
    .word0x00000013
    .word0x00000013
    .word0x00100073
但是实际调试发现,这个跳转根本不起作用,单步调试发现跳到了莫名其妙的地方去了.


改成
    lia6,0x4000
    jra6
也一样的效果


回帖(5)

张立

2022-6-21 09:50:59
您好,可以检查一下ld文件中入口点这一块是否修改,如下图。我这边按照你的配置测试了一下没问题,附件为测试例程
CH32V307 Test.zip
举报

高倩

2022-6-21 09:51:04
我下载了你的工程文件,未进行任何修改,在main入口处打断点,F5运行调试,等半天都没进main.
点击暂停按钮后,发现程序跑飞至莫名其妙地址.

与我的工程结果一致.
举报

白边赫

2022-6-21 09:51:12
您好,可以先通过WCHISPTool工具下载配置一下RAM和FLASH大小,然后再通过Link下载调试看看,如下图,后面若有问题,可通过邮箱(lzs@wch.cn)和我沟通。注意使用WCHISPTool下载时,BOOT0接VCC,BOOT1接GND
WCHISPTool工具下载链接:http://www.wch.cn/downloads/WCHISPTool_Setup_exe.html
举报

郝蓓蓓

2022-6-21 09:51:18
有进行图中这个配置的.
另外,我发现偏移只有0x400的情况下就可以正常工作. 当偏移调到0x4000就出现这个问题.经过测试,0x800也不行.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分