[样例程序]--RL78 bootloader via UART for CCRL

一个RL78 bootloader样例程序.

MCU: RL78G13, R5F100LE, 64K ROM,

IDE: CS+ for CCRL.

通讯口为UART, Xmodem, 发送bin文件

Boot : 0000 - 1FFFH, Boot的_start 在0xd8,

APP: 2000 - FFFFH, 其中2000开始的FLASH_TABLE是虚拟向量表( ftable.asm), 通过向量表映射实现中断访问, APP的程序入口地址(_start)在2200H

对于不同的ROM size移植, 只要将App的地址作相应的平移.

样例程序 4150.OTA_Test_0319.zip

硬件手册   https://www.renesas.cn/us/zh/document/man/rl78g13-users-manual-hardware?r=1054286

和资源分配表https://www.renesas.cn/us/zh/document/mat/rl78-family-self-ram-list-flash-self-programming-library-rev305

请认真参照样例程序(section定义, 和其他build option设置 ) 和 硬件手册, 资源分配表构建自己的bootloader. 如果编译和调试过程中发生错误, 再仔细看看自己的工程和样例之间的差异(asm文件和初始生成不一样, 有改动, 请参考修改).

Parents
  • 黄工,向您请教几个问题,您方便解答一下吗?

  • 屏蔽了的是没有用到, 不要去考虑. 

    .db, .db2, .db4 分别定义1byte, 2byte, 4byte, 这里是构建的App的(虚拟)向量表

    0xfffffff, 相当于没有中断

    BR是汇编无条件跳转指令

    BR !!Function_name, 是跳转到中断服务程序, 这里是和boot的build tool里面的设置相对应的, 如下图.

    此样例程序, boot不使用中断, 把中断向量表留给了App使用, 因为只有一个硬件的中断向量在boot区(0-7F), 所以中断发生后, 从0-7fH某一地址, 指向到 0x2000+offset, 再从这个地址跳转(BR 汇编指令)到Function_name(中断服务程序), 也就是这里做了一个虚拟的中断向量表. 

    如果你要用某一个中断, 就参考RL78/G13 HM中断一章节的中断向量表, 然后把上面的表对应的地址改成 BR !!function_name

    BR !!Function_name 一共占用4byte, 所以这个虚拟向量表每一个中断对应4byte. 你可以通过simulator, 在debug状态下, 参照memory, 结合程序, 加深对这部分的理解. 

Reply
  • 屏蔽了的是没有用到, 不要去考虑. 

    .db, .db2, .db4 分别定义1byte, 2byte, 4byte, 这里是构建的App的(虚拟)向量表

    0xfffffff, 相当于没有中断

    BR是汇编无条件跳转指令

    BR !!Function_name, 是跳转到中断服务程序, 这里是和boot的build tool里面的设置相对应的, 如下图.

    此样例程序, boot不使用中断, 把中断向量表留给了App使用, 因为只有一个硬件的中断向量在boot区(0-7F), 所以中断发生后, 从0-7fH某一地址, 指向到 0x2000+offset, 再从这个地址跳转(BR 汇编指令)到Function_name(中断服务程序), 也就是这里做了一个虚拟的中断向量表. 

    如果你要用某一个中断, 就参考RL78/G13 HM中断一章节的中断向量表, 然后把上面的表对应的地址改成 BR !!function_name

    BR !!Function_name 一共占用4byte, 所以这个虚拟向量表每一个中断对应4byte. 你可以通过simulator, 在debug状态下, 参照memory, 结合程序, 加深对这部分的理解. 

Children