请教一下 RL78G13 的CS+ for CA 的例程

你好,我最近需要在R5F100LE上将原有的工程增加支持OTA功能,原工程是用CS+ for CA的。在网上找一圈都没有找到相关的例程。请问一下如何在CS+ for CA上设置APP的中断向量,如何在bootloader上跳转到APP。bootloader能否调用到APP里面的一些函数。如何让bootloader和APP生成一个烧录的HEX文件。最好是有相关的例程可以参考一下。烦请大佬指点,谢谢。

Top Replies

Parents Reply Children
  • 黄工:

        你好。

        你给的例程已收到,谢谢!

        但在测试中还是有问题想请教一下。

        这个工程直接编译是没有问题的,但稍作修改就会编译报错,而且具体是什么问题出错也看不出来,有时候还出现在一些莫名其妙的问题。比如:我在r_xmodem.c添加了一个函数,如下图,把3行注释掉的代码不管哪一行放出来,都会编译不过,也看不出具体是什么原因出错。

  • 原工程里有一个vfi文件, 这个是boot 和 app传递变量和函数信息的文件, 在boot工程里面有个选项, 这里需要勾选, 可能你-没有设置. 

    把boot工程里面的boot.vfi 右键 remove掉, 把这里的yes 改成no, 再改成yes, 这个文件就自动添加到工程里面.

    按理说增加语句减少语句不会影响到vfi文件的存在.

  • 不是的,那个设置是开了的,YES的。关键问题不在这里,是因为代码这里出错了,所以没有生成boot.vfi文件。

    我把那3行代码注释掉是可编译通过的,

    去掉一行就会报错。

  • 你把你这一段程序, 文本贴出来

  • void Int2Str(uint8_t* str, int32_t intnum)
    {
    int32_t Div = (int32_t)(1000000000);
    uint8_t i;
    uint8_t j = 0;
    uint8_t Status = 0;

    for (i = 0; i < 10; i++)
    {
    str[j++] = (uint8_t)((uint8_t)(intnum / Div) + 48);
    intnum = intnum % Div;
    Div = Div / 10;
    if ((str[j-1] == '0') && (Status == 0))
    {
    j = 0;
    }
    else
    {
    Status++;
    }
    }
    }

  • 这一段程序, 应该是使用到了saddr区, 也就是0FFE20H - 0FFEDFH 空间

    把boot里面的dr文件增加 一个SADDR段

    可编译通过.

    但Note1 提示在FSL操作期间, 不得使用这个区间, 请评估你的应用.

  • 黄工,你好。

    我修改RAM的区域大小,发现在编译出来的APP有些不同,不知道是不是RAM区域修改的有问题。

    现象如下:

    1.未修改前,升级后运行APP,会先运行APP,后面过几秒会自动重启,再运行boot。

    2.修改过RAM区域,修改到最大,占用所有剩余空间。升级后运行APP,会先运行APP,然后就会自动重启,还是进入运行APP。

    请帮忙分析一下,这个是否正常,如果不正常,是什么原因引起的,要怎么修改。谢谢!

  • 64K的R5F100LE, FSL库文件占用下面空间, 所以 用户实际在boot程序里使用的RAM 从FF300H开始, 否则程序会跑飞.(参见这个文档r20ut2944ej0305)

    如果考虑到下图

    你重启, 是不是WDT 起作用了, 如果开着WDT再进去app后, 需要不断喂狗. 

    RAM就要在加10bytes, 所以从FF30AH开始. 

    如果是APP工程, 其RAM 就不需要如上考虑. 可以从FEF00H开始.

  • 上面的问题了解清楚了。谢谢!

    另外,是否可以APP工程中另外加一个 .dr文件,目前的 .dr 文件是在boot工程中的。

    boot和APP这两个子工程是什么关系,是共生的吗?

    APP工程中不否可以对硬件和内存重新初始化,而不用考虑boot中的内存和硬件。

  • dr文件就是ROM/RAM分配文件, 也就是你怎么划分这些空间.

    App工程可以不加dr, 如果不指定dr文件, 系统会链接一个缺省的dr文件, boot和app的关系就是在其空间分配上, 样例工程师通过vfi文件传递相应的参数. 

    APP最好重新初始化硬件和内存, 如果不初始化, 就没有必要分成两个子工程. 重新初始化是要释放被库占用的空间.