中断
复位源
段操作
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_COD | PFDL库代码段 | |
.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
参考例程 an-r01an3530eu0110-rl78-crc\an-r01an3530eu0100-rl78-crc
- 使用的函数
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文件一起使用,以帮助开发人员更好地理解他们的程序在目标硬件上的运行情况 。