gougou_0 发表于 2024-8-12 14:11:07

有关中断和入口地址重映射

本帖最后由 gougou_0 于 2024-8-12 14:14 编辑

在“使用STC的IAP系列单片机开发自己的ISP程序”文档中提到”重映射的工作上位机应用程序自动处理,用户在编写ap代码时无需关心“,这句话啥意思,为什么重映射工作不是在isp程序或者应用程序里做呢?上位机不是只搞通信和数据传输吗?难道上位机还要解析程序?如果是自己写isp和上位机,那么烦请把这部分重映射原理和操作方法讲清楚,谢谢!
另外,看例程,isp工程中串口似乎没有采用中断号?个人觉得isp工程中应该可以正常使用中断,且不需要做任何重映射,只有转到应用程序中时,才需要做地址和中断映射

小坤 发表于 2024-8-12 15:44:35

“重映射的工作上位机应用程序自动处理,用户在编写ap代码时无需关心” 这句话要 我要是没有记错的应该是出现在将如何在 KEIL 中重新定义中断偏移的时候。所以你不需要关心,只要根据你的底层Boot程序大小设置中断偏移量

DebugLab 发表于 2024-8-12 17:45:36

中断向量位于用户ISP区,用户ISP程序要保留该区域,编译器设置好用户AP区的偏移量,编译器会自动重映射中断

乘风飞扬 发表于 2024-8-12 18:10:27

keil 51编译生成的hex文件复位跳转指令是在0000H地址,而用户程序有效代码是从1000H开始,所以需要手动或者通过上位机升级软件将起始跳转指令移到1000H地址。
用户ISP程序与用户应用程序在设计时虽然使用2个项目,但是最终生成的代码是合并烧录到同一个芯片里,所以做不到在用户ISP区域运行时中断地址不偏移,而在用户程序区运行时进行中断地址偏移。

gougou_0 发表于 2024-8-12 22:26:29

那么在isp程序中能否使用中断?是不是在使用中断时需将中断重新映射到app中断区?

soma 发表于 2024-8-12 23:53:02

isp程序中应该能使用中断中断入口和起始地址有关

gougou_0 发表于 2024-8-15 11:09:40

DebugLab 发表于 2024-8-12 17:45
中断向量位于用户ISP区,用户ISP程序要保留该区域,编译器设置好用户AP区的偏移量,编译器会自动重映射中断 ...

我想请教您,关于isp区域能否正常使用中断,如果能使用,是不是需要在isr.asm中添加偏移量就可以?

gougou_0 发表于 2024-8-15 11:24:45

乘风飞扬 发表于 2024-8-12 18:10
keil 51编译生成的hex文件复位跳转指令是在0000H地址,而用户程序有效代码是从1000H开始,所以需要手动或者 ...

那么请问有啥办法在isp程序和app程序中都可以使用中断呢?

DebugLab 发表于 2024-8-15 11:53:45

gougou_0 发表于 2024-8-15 11:24
那么请问有啥办法在isp程序和app程序中都可以使用中断呢?

中断就是EA=1且每个中断的使能位为1,中断标志位被置位时,单片机内部硬件控制PC=中断向量,这是硬件决定的无法修改,程序中的interrupt是在指定位置(中断向量地址)插入指向中断函数的跳转指令(LJMP),保证这些跳转过程正常执行就可以正常使用中断

DebugLab 发表于 2024-8-15 12:00:40

乘风飞扬 发表于 2024-8-12 18:10
keil 51编译生成的hex文件复位跳转指令是在0000H地址,而用户程序有效代码是从1000H开始,所以需要手动或者 ...

这样是否可行:
下载软件设置整个FLASH可做EEPROM,在用户ISP区运行时,先通过IAP操作重置中断跳转地址为用户ISP区的,等用户ISP程序执行完毕,再通过IAP操作修改中断跳转地址为用户程序区的(虽然一旦操作错误整个程序崩溃hhh)
页: [1] 2
查看完整版本: 有关中断和入口地址重映射