瑞萨-RL78

中断

复位源

在这里插入图片描述

段操作

Changing compiler output section name (#pragma section)
在这里插入图片描述

不支持%f 浮点数打印;

会导致重启;

打印段的地址

段起始位置 __sectop __secend
Section address operator (__sectop/__secend)
__sectop
printf(“constbos_polling_n:0x%x-0x%x\r\n”,(uint16_t)__sectop(“.constbos_polling_n”),(uint16_t)__secend(“.constbos_polling_n”));
printf(“constdriver_init_0_n:0x%x-0x%x\r\n”,(uint16_t)__sectop(“.constdriver_init_0_n”),(uint16_t)__secend(“.constdriver_init_0_n”));
printf(“constdriver_init_n:0x%x-0x%x\r\n”,(uint16_t)__sectop(“.constdriver_init_n”),(uint16_t)__secend(“.constdriver_init_n”));

输出预处理文件

在这里插入图片描述

cs+中设置宏定义

在这里插入图片描述

段定义和使用

RL78

头文件没有添加,编译不会报错,
但是在实际运行调试的时候函数直接无法跳转;类似跑飞掉,
或者就是传参出错的情况 实参数据是0xfc60 到了函数里面 形参编程0x0c60

段名内容空间
.text中断服务程序
.RLIB内置乘除法程序?
.SLIB标准库函数
.textf用户程序代码
.constf常量
.data预定义变量值(ROM)
.sdata
PFDL_CODPFDL库代码段
.monitor2调试用
.dataR有初值的变量(RAM)–初始值在ROM中
.bss没有初始化的变量
.sdataR
.sbss

ROM剩余
00001e00 - 00001d79 = 135 字节

RAM剩余
FFEDF - 000ffe20 = 191 字节

*** Total Section Size ***

RAMDATA SECTION: 000002ae Byte(s) 有初值、没初值变量
ROMDATA SECTION: 000002b0 Byte(s)
PROGRAM SECTION: 00001c8a Byte(s)

R5F100LG

启动过程

启动过程

R5F100LG-储存空间大小

在这里插入图片描述
flash 128k [0-1FFFF]
最有有0x200(512)字节给 调试信息
去掉最后一个字节 1FBFF
eeprom 8K [0-1FFF]
ram 12K [0-2FFF]
pin64

在这里插入图片描述

RL78-R5F100L flash

在这里插入图片描述

指定的数据放在 固定地址

.jtext .CSEG AT 0x1111 的意思是告诉汇编器将接下来的代码段视为可执行代码,并且在程序实际加载时,这些代码应该从物理地址 0x1111 开始存储。这对于需要精确控制程序在存储器中布局的情况非常有用,例如在微控制器中设置中断向量表的位置或者为了满足特定硬件的启动要求等。

镜像区域

在这里插入图片描述

app端的位置

在这里插入图片描述
启动过程
在这里插入图片描述

版本信息定义在固定位置

参考资料

程序的CRC校验

CRC参考

在这里插入图片描述
固定好程序段的长度;
然后再这个程序段的后面 加上 对应的数据

程序内部内置的crc

参考例程 an-r01an3530eu0110-rl78-crc\an-r01an3530eu0100-rl78-crc

  1. 使用的函数
    在这里插入图片描述

2.使用window的进行bin文件校验 得到 正确的CRC计算值,该值应该是 编译器能够生成的值
在这里插入图片描述
3.注意点 bin文件未使用部分的填充问题
使用 0xff 填充
在这里插入图片描述

奇葩的地址偏移 CRC 最后地址是 XXXB

在这里插入图片描述
在这里插入图片描述

程序分段情况

最有有0x200(512)字节给 调试信息
去掉最后一个字节 1FBFF 126
flash 128k [0-1FFFF]
方案1 boot 0-5000
最大 分 53K (1FC00-5000)/2 = 107K 均分就是 53K
0x5000- 0x123FF‬ 【50K-长度D400】
0x12400‬ - 0x1F800 【50K-长度D400】

平分 53K
0x5000- 0x117FF‬ 【50K-长度C800】
0x11800‬ - 0x1E000 【50K-长度C800】

boot 0-3FFF 111K
均分是 55k
0x4000- 0x117FF‬ 【50K-长度C800】
0x11800‬ - 0x1E000 【50K-长度C800】
最后有多0x200(0.5K)是给调试 占用的,不能用的
在这里插入图片描述
在这里插入图片描述

中断向量大小

54个中断 每个中断2字节地址 共计 220字节
在这里插入图片描述

瑞萨的栈

参考-栈的大小配置
参考-malloc 堆栈
栈的大小通常是 从大 到小 增长;
R5F100-RAM 地址
在这里插入图片描述
程序里面分配的 情况:通常是从高地址向低地址增长的。、
栈【FILO 先入后出】 开始地址 > 结束地址
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

为什么app设置在0x5000后 程序还是能够运行-是因为使用了仿真器;

仿真器 会自动生成vect段,默认的 ,让后让程序跳转到 起始位置;
仿真器烧录后 程序可以正常使用;
但是使用flash烧写的方式 无法运行;因为只包含了 0x5000开始的数据;

因为编译器 能够生成如下段;连 vect都自动生成了;
在这里插入图片描述

mot文件

开始
S1 2位地址的数据 13 字节数 5000 地址
S2 3位地址的数据 13 字节数 5000 地址
在这里插入图片描述
文件的最后位置
在这里插入图片描述

dr 文件

瑞萨中的.dr文件是一种链接脚本文件,用于将编译器生成的目标文件链接到可执行文件中。它通常包含有关存储器布局、寄存器定义和其他链接选项的信息。在瑞萨电子的软件开发环境中,.dr文件通常与.map文件一起使用,以帮助开发人员更好地理解他们的程序在目标硬件上的运行情况 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值