我现在使用F13的芯片,参考例程把Boot和APP做成了单独的例程,Boot和APP分别独立运行都正常,但是将APP设置为0x6000启动之后,就出现APP中无法进入中断的现象,并且APP中操作Flash会引起芯片软件复位,从boot开始重新执行。
芯片是96K,我把0000-6000用作Boot区域,中断向量表做了偏移,如图:
Demo.zip
请大神有空帮忙看看!
1. WDT有没有启动? 是不是WDT造成的
2. 可以查看一下复位后的RESF是什么复位造成的
3. section的定义有问题, App的section是从6000H开始的. 这里怎么定义在0x2800
4. Boot已经做了向量表的映射, 为什么app还要做一次?
请认真对照样例程序, boot 和app的编译选项设置有差别, 仔仔细细按照样例程序去做.
非常感谢您的回复。我先和您讨论中断的问题,复位的问题后续我在查看。
3. 我这边之前有修改过,如图所示,也是一样的现象。
4. Boot这边是我后来修改的,之前是空的。
我按照下图的配置,也是一样的现象。
请问除了这两个配置和 函数跳转表,还有其他地方需要设置吗?
两个独立工程, 不用fsy的话, boot就不需要使用这个
感谢您的回复,这边改了之后现象一样。我单独调试boot,如下图,是可以跳转到APP的
调试APP+Boot时,可以成功跳转到APP执行,但是就是进不去中断,包括timer定时中断和CAN接收中断,不知道和Section的这些值有没有关系?
有没有可能是中断跳转到Boot的的中断服务函数那里去了,而APP部分的中断服务函数和Boot的中断服务函数没有指向同一个区域?
您好,我刚在Boot的中断服务函数加了一段IO调试翻转,发现APP代码运行时,确实是进入到了Boot的中断服务函数,请问有没有办法能够让中断服务函数改变到APP中?
因为RL78只有一个硬件的中断向量表, 在0-7FH, 所以为了应用方便, 在boot里面不使用向量中断, 因为0-7FH是在boot区里面, 所以你使用了(vect = xxxx)后, 所有中断都会指向boot区了, 即使你映射了也没有用.
所以建议boot不要用向量中断(用查询的办法), 把向量中断留给App用(比较省事), 因为boot的功能本来就只是flash和数据获得.比较简单.
另外一个就是boot的向量表自己写, 通过标志位(自己定义的判断是boot还是app)然后分支到boot或app的服务程序,
还有一个办法就是通过FSL_ChangeInterruptTable, 实现boot和app- 使用中断, 但相对来说, 代码会复杂一些.
感谢您提供的几种解决办法,请问您方便提供一些参考示例吗?我的邮箱:[email protected]
hello,请问你这种做成boot和app做成单独工程的(boot和app均可以使用中断)有实现了吗?
黄工 我还有另外一个问题就是我想一系列的app都用同一个boot 但是不同的app用到的中断不一定一样(但相同中断的服务程序名是一样的) 这样怎么实现? 是把所有的中断都预留吗?