凡人 发表于 2019-6-5 16:38:35

如何将中断程序搬移到RAM运行

目前我使用的是RT1062单片机,成功的实现了将中断以外的程序复制到RAM且能够运行了,复制程序是通过修改IAR的ICF文件来实现的,目前我想把中断程序也复制过去,但是不知道怎么操作了,中断向量表我已经复制过去了,就差中断程序了。希望有大佬指教一下。十分感激。

zl1215 发表于 2019-6-5 17:38:53

直接中断函数前面加__ramfunc就行了,或者把中断函数所在的那个obj放到ram

凡人 发表于 2019-6-5 18:07:55

zl1215 发表于 2019-6-5 17:38
直接中断函数前面加__ramfunc就行了,或者把中断函数所在的那个obj放到ram

非常感谢您的回答,实际上我的应用要求我不允许使用__ramfunc   必须得通过修改ICF来进行程序的搬移,然后我也测试了下用__ramfunc,中断是放在了RAM了,但是中断里面调用的程序还是放在flash里面的。   除非被调用程序也加__ramfunc,但是我的所有代码都是通过修改ICF已经搬移到了RAM里面了,   如果这个程序不是在中断里面调用的,则不会跑到flash里面去。还求大佬指教

凡人 发表于 2019-6-5 18:11:59

zl1215 发表于 2019-6-5 17:38
直接中断函数前面加__ramfunc就行了,或者把中断函数所在的那个obj放到ram

还有就是通过 readonly object isr.o, 这样的方式不行,我的函数是写在了isr.c文件。我估计与.s文件里面指定了section有关系

zl1215 发表于 2019-6-5 18:36:08

凡人 发表于 2019-6-5 18:07
非常感谢您的回答,实际上我的应用要求我不允许使用__ramfunc   必须得通过修改ICF来进行程序的搬移,然 ...

IAR中除了使用__ramfunc之外其他的方式想要在中断中调用RAM中的函数都比较麻烦。你如果使用官方的启动代码,IAR在启动时候有一个保护机制,只要是中断向量表中的函数,它所调用的函数都不可以在RAM中运行。除非你只用启动代码中的复位中断,后面的中断你再创建一个向量表,和启动代码中的第一段向量表区别开。

凡人 发表于 2019-6-5 18:42:18

zl1215 发表于 2019-6-5 18:36
IAR中除了使用__ramfunc之外其他的方式想要在中断中调用RAM中的函数都比较麻烦。你如果使用官方的启动代 ...

看来遇到了一个真大佬,目前我已经再开始您说的那种方法了,看来只能这么干了,真的很感谢您的回答。谢谢

zl1215 发表于 2019-6-5 22:42:51

凡人 发表于 2019-6-5 18:42
看来遇到了一个真大佬,目前我已经再开始您说的那种方法了,看来只能这么干了,真的很感谢您的回答。谢谢

不是大佬……也是从其他地方学到的,有问题再沟通,RT系列确实牛逼,不过用起来确实也有点麻烦

小白1111 发表于 2024-3-28 14:47:54

您好,可以说怎么弄的吗?
页: [1]
查看完整版本: 如何将中断程序搬移到RAM运行