ningsane 发表于 2026-2-4 17:34:39

ISP烧写完毕的程序为啥不能运行?

ISP程序运行后,接收到发过来的用户程序BIN文件,烧写到了预设的存储空间,烧写完毕后调用了((void (code *)(void)) 0x3400)();把程序指针调用到0X3400这个预设的程序空间地址,但是用户程序为何没有运行?运行的还是ISP程序。烧写完毕后还需要做哪些工作才能让用户程序运行起来?根据范例修改的,ISP程序完全使用查询方式,没有用任何中断。

ningsane 发表于 2026-2-4 22:39:56

MOVC访问是需要IAP地址加偏移地址。图中的IAP_OFFSET是0XF000,那么对应的STC8A8K64D4的IAP_OFFSET应该是0XFFFF,这个如果用MOV方式访问,就不能再加了吧,0XFFFF加除了0之外任何数都会溢出了。我的用户程序从0X3400地址开始,对应的是第26扇区。用户程序要执行肯定是需要MOV方式访问的,那么应该找这个绝对物理地址。那就是从后往前排,第128-26=102个扇区,用户程序应该存放在IAP访问的第102个扇区。程序复位的0扇区,实际是对应着IAP扇区的最后一个。应该是这样理解的吧。扇区顺序物理地址和逻辑地址顺序是反着的。但是扇区里边的字,物理地址和逻辑地址也是反着的吗?感觉这个顺序应该是一样的,无论是物理地址和IAP访问的逻辑地址,都应该是从0~512,难道这个也是反着的吗?明天实际试一下
页: [1]
查看完整版本: ISP烧写完毕的程序为啥不能运行?