[样例程序]--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
  • 黄工你好,

    在这个例程中,我看boot里面在使用了串口1的时候使能了收发中断:

    所以我这里有一个疑问,boot里面使能串口中断的话,那在收发数据的时候,不是会跳转到app里面的串口中断服务函数里面去的吗(假设存在app的情况)?

  • 在Boot中运行时,中断是关闭状态(boot_hdwinit()函数中调用了DI()),收发UART数据采用了轮询方式,可通过查看Boot中的代码实现来验证这一点。当跳转到App之后,会将中断打开,则此时收发UART数据会跳转到App中重新映射后的中断服务程序处理。

Reply
  • 在Boot中运行时,中断是关闭状态(boot_hdwinit()函数中调用了DI()),收发UART数据采用了轮询方式,可通过查看Boot中的代码实现来验证这一点。当跳转到App之后,会将中断打开,则此时收发UART数据会跳转到App中重新映射后的中断服务程序处理。

Children
  • 感谢黄工的回答,另外我这里在参考例程适配到RL78/F14 R5F10PGJ下,出现点问题:
    参考例程,设置段地址如图,

    编译出现.const超出范围错误的提示:

    E0562320:Section address overflowed out of range : ".const"

    另外这里也进行了设置,编译还是同样出现上面的错误,

    看RL78/F14 R5F10PGJ的memory space如下:

    =================================

    我这边把.const段去掉之后,让编译器自动分配,可以编译成功,看map是将.const的start地址定到了0x3000的位置。

    所以就想问下,为什么把.const定到0x2200的位置会报错?

    另外,让编译器自动分配的话是否会有问题呢?

    如果可以的话,黄工能否详细讲解下例程中那些段所设置的起始地址的参考依据呢?