ningsane 发表于 2026-1-19 20:57:43

编写远程升级用户app遇到代码不规范问题。

我用的是STC8A8K64D4单片机。编写程序前也参考了论坛上的例子。用参考例程改变单片机类型后,设置都按照 <<使用 STC 的 IAP 系列单片机开发自己的 ISP 程序――基于 STC8H8K64U>>说明的方法进行设置编译,然后用 用户ISP下载程序(串口版)打开,遇到代码不规范。后来把原文件的所有编译文件都删除了,新建工程,再编译,再试,代码规范了。然后同样的办法用的我自己的用户程序,却总是代码不规范。我的程序编译后显示30K。除了文件大一些,好像也没有其他的不同了。是不是除了说明文件之外,还有其他地方需要设置需要注意的吗?

ningsane 发表于 2026-1-19 22:01:05

比较了例子的HEX文件和自己的用户文件hex。如上图,昨天的是例子的hex文件,右边的是自己生成的hex文件数据。 自己的用户hex和调整前有些不同,没有调整前从0000h字节开始用户程序,调整后的hex开始的数据好像没有完全调整过来,只调整了一部分。这是什么原因?

ercircle 发表于 2026-1-19 22:06:02

对比官网例子逐页检查工程配置:



ningsane 发表于 2026-1-20 08:06:19

页面中的设置项我都按照原图设置过了,得到的代码还是不规范。肯定还有其他方面的原因。也怀疑过目录中不能有汉字,试过了,不是这个原因。有没有汉字不影响代码是否规范。

ercircle 发表于 2026-1-20 09:07:00

ningsane 发表于 2026-1-20 08:06
页面中的设置项我都按照原图设置过了,得到的代码还是不规范。肯定还有其他方面的原因。也怀疑过目录中不能 ...

打包上传两个工程看看

ningsane 发表于 2026-1-20 09:30:23

找到原因了。自己的工程目录里边添加了isr.asm这个文件。这个文件开头也设置了偏移,LDR_SIZE    EQU   1000H ,把这个文件移除工程文件再编译就可以了。或许这个文件和C51页面的设置重复?理解不深。反正把这个isr.asm这个文件去掉就可以了。非常感谢。

AHBbGao 发表于 2026-2-16 15:04:56

我的工程,也出现一样问题,但是要用到这两个中断,不能移走,应该怎么改呀。
      EXTRN DATA      (isr_index)
    LDR_SIZE EQU 1000H
      CSEG      AT      011BH                ;35号 触摸按键 中断入口
      MOV                isr_index, #35      ;标记中断号35
      LJMP      006BH                        ;跳转到中断号13的向量

      CSEG      AT      0123H                ;36号 RTC 中断入口
      MOV                isr_index, #36      ;标记中断号36
      LJMP      006BH                        ;跳转到中断号13的向量

      END
还有一个问题,如果下载时我要用12M,不是默认的24M,应该怎么改?

patch1582 发表于 2026-2-17 16:49:04

楼主搞定了没,最近也在写bootloader

ningsane 发表于 2026-3-4 09:55:17

BOOT程序中不能用任何中断,只能用查询的方式。这个远程升级的关键是重建中断向量表。要把中断向量表给用户程序使用,boot程序只能用查询法,不能使用任何中断。

ningsane 发表于 2026-3-4 10:03:09

程序下载用多少M没有关系,多少都可以。视频网络设备和远程设备正常通讯。烧写的速率是根据现场的设备工作频率匹配的。
页: [1]
查看完整版本: 编写远程升级用户app遇到代码不规范问题。