自己用C语言写RL78 serial bootloader

本文介绍了作者使用C语言为Renesas RL78单片机编写串行bootloader的过程,包括实现环境、bootloader和application的内存映射、中断向量重映射、FSL库的使用以及bootloader的功能和逻辑实现。通过超级终端hyperterm进行通信,实现了程序的在线升级功能。尽管存在效率低和通信协议简单的问题,但为后续的优化和新bootloader的开发奠定了基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序)。

  之前用C实现过多款PIC单片机的bootloader, 包括8-bit的PIC16,PIC18;16-bit的PIC24, dsPIC30, dsPIC33; 和32-bit的PIC32MX,PIC32MZ,我为这些类型PIC都写过C bootloader。今天要介绍的serial bootloader 是为我的RL78单片机学习板而写。RL78是Renesas的16-bit单片机。这是我第一次为Renesas的单片机写C 语言bootloader,遇到不少问题,通过不懈努力,总算成功的完成了我的第一个Renesas RL78 serial bootloader。我将这个RL78 serial bootloader命名为hyperboot_rl78, 因为hyperboot_rl78用到的上位机是hyperterm (超级终端)。写这篇博文的目的是来总结这次hyperboot_rl78的实现过程,总结内容包括bootloader的设计, bootloader的逻辑,bootloader的使用,实现环境,实现过程中遇到的问题,以及如何解决的。以上都会一一在这篇博文中介绍到。

       首先介绍实现环境,IDE是CS+, C编译器是CC-RL, 硬件板是我的学习板,  详细如下:

IDE :        CS+  for CC V7.00.00 [13 Jun 2018]

Compiler:    CC-RL V1.07.00

MCU:          RL78 F14 R5F10PPJ

Hardware:   QB-R5F10PPJ-TB(e)

      我的bootloader和application的memory map设计如下:

bootloader code range: 0x0000~0x33FF

application code range: 0x3400~0x3FFFF

application reset vector remap:0x4000

interrupt vector remap: 0x4006~0x40CA

bootloader 不使用interrupt,interrupt vector 区间0x4~0x7C remap到application的code区间0x4006~0x40CA。

bootloader code range设置, bootloader interrupt remap 都需要通过修改CS+ bootloader工程的Linker Option来实现。具体可以查阅CS+的帮助。

application code range设置, application reset vector remap 也需要修改CS+ application工程的Linker Option来实现。

另外,interrupt vector remap 到application code区间0x4006~0x40CA, application使用中断的话,需要在代码中建Juamp Table, 并将interrupt service routine的地址映射到Jump Table中。 我的做法是在application CS+ 工程的Linker Option中新增 .app_vector section,  .app_vector section的地址范围0x4000~0x40CA(包括reset vector 和 interrupt vector).

Jump Table指定到.app_vetor section, 在Jump Table 添加跳转指令和_start 地址(cstartup for reset vector)或interrupt service routine的地址(for interrupt vector)到相对应的位置中。Jump Table我是用CC-RL的汇编指令实现的,为此我查阅了RL78的Software Manual。Jump Table 中的汇编代码例子如下:

 


    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值