RL78开发问题记录

一、如何查看stack的分布区域
这里以R5系列为例(之所以指定平台是因为R5系列处理器的stack是自动分配的,分配的大小取决于内存的使用情况)
在编译生成的.map文件中查找以下两个关键字:
__STACK_ADDR_START
__STACK_ADDR_END
stack区域的数据开机时并不会被初始化,即初始数据是随机的,如果出异常后想确认stack是否发生溢出行为,可以在main函数开始的位置使用递归函数对stack进行填充,通过填充指定数据会发现一个有意思的小细节,那就是当stack溢出时会循环覆盖之前的数据,覆盖位置从main函数的入栈位置开始,这就是所谓的循环栈吧
二、 const分区提示overrange的问题
RL78系列处理器对const区域的位置有一定的要求,区域要求在0x2000之后,实际测试发现0x3000后才不会报错

三、如何调整分区(section)或新增分区
注意:一般情况下不需要自行调整分区,分区的大小会根据实际使用大小自行调整,但对于某些特殊情况,比如有些数据结构必须4字节对齐,那么数据结构的地址就需要放在指定的区域,这时就需要新增一个分区用来存储专用数据
指定某个结构指向特定位置时需要在该结构定义的地方使用#program section 关键字修饰,详情可查看IDE 编译工具链的使用说明书
CS+的设置位置如下:
在这里插入图片描述
四、user option byte
这是一个系统重量级的参数合集、包括watchdog(开关、超时时间)、系统工作电压、系统时钟、debug模式都是在该参数合集中设置,详情请参考每个处理器的spec 中OPTION BYTE章节的描述,正常情况下使用CS+集成开发环境中的代码生成器改变以上几个配置时,该参数会自动改变,当然也可以手动修改该参数,修改位置如下:
在这里插入图片描述
五、关于中断处理函数
R5系类处理器ROM大多数都超过64k,对于16位单片机需要支持64k以上地址寻址的方案,瑞萨使用了名为near 和far的地址区分,near区域在64k以内,far区域代表大于64k的区域,大部分程序对存储区域没有限制,但是中断处理函数比较特殊,其存储位置必须位于near空间内,具体原因没有深入了解过
解决的办法是使用near对函数进行修饰,也可以在build选项中调整链接该文件的顺序,推荐使用near进行修饰的方法,调整链接顺序有可能导致未知异常

六、trace的使用
对于异常问题的分析处理,除了查看memory、call stack以外,还可以开启trace选项,该选项可以查看当前PC指针所指位置的前100条指令的调用过程,比 call stack更加详细,下图是开启trace的配置项
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值