一个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文件和初始生成不一样, 有改动, 请参考修改).
cstart.asm只是做了基本的堆栈初始化, 段的配置等操作, 不设计用户IO, timer的初始化, 所以hdwinit就是预留一个接口做这件事的,
你是什么单位看看是不是需要给你们安排线下支持. 私信给我[email protected]
黄工你好,
在这个例程中,我看boot里面在使用了串口1的时候使能了收发中断:
所以我这里有一个疑问,boot里面使能串口中断的话,那在收发数据的时候,不是会跳转到app里面的串口中断服务函数里面去的吗(假设存在app的情况)?
在Boot中运行时,中断是关闭状态(boot_hdwinit()函数中调用了DI()),收发UART数据采用了轮询方式,可通过查看Boot中的代码实现来验证这一点。当跳转到App之后,会将中断打开,则此时收发UART数据会跳转到App中重新映射后的中断服务程序处理。
感谢黄工的回答,另外我这里在参考例程适配到RL78/F14 R5F10PGJ下,出现点问题:参考例程,设置段地址如图,
编译出现.const超出范围错误的提示:
E0562320:Section address overflowed out of range : ".const"
另外这里也进行了设置,编译还是同样出现上面的错误,
看RL78/F14 R5F10PGJ的memory space如下:
=================================
我这边把.const段去掉之后,让编译器自动分配,可以编译成功,看map是将.const的start地址定到了0x3000的位置。
所以就想问下,为什么把.const定到0x2200的位置会报错?
另外,让编译器自动分配的话是否会有问题呢?
如果可以的话,黄工能否详细讲解下例程中那些段所设置的起始地址的参考依据呢?