This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

看在我凌晨还在努力的份上帮帮我吧,跪谢!!在线升级时关于c_int00的处理问题



28035做在线升级,APP与BOOTLOADER放同一个工程。int00放A扇区,以为已经工作正常了。但是发现APP更改时HEX中int00相关的数据会变。int00如果不放A扇区,如果升级失败int00被擦除了会找不到main入口。放A扇区又无法在程序变动后升级c_int00。相互矛盾。极端情况甚至坏DSP不知道是烧了还是锁FLASH了,仿真器都连不上了。请问如何处理。明明是矛盾的,为什么别人做成功了,想不明白。

c_int00拷A扇区是这样拷的,不知道对不对:

BootAPI:
{
-lrts2800_ml.lib(.text FLASHA)
-lrts2800_ml.lib(.cinit FLASHA)
} > FLASHA PAGE = 0

另外请问int00为什么会跟着APP程序变。跳转,初始化堆栈,全局变量。好像都跟APP没关系 啊

为什么要把app与bootloader做一起?因为老板要求,我也没办法。

  • 瞎指挥的老板不是好老板,早点弃暗投明。
  • c_int00会变是因为c_int00中最后一句代码是用来跳转到main()函数的,每次编译后main的位置不一样。

    有两个解决办法:

    一、(不推荐)固定main()函数的存储区域,但因为main()函数因功能不同而大小不定,甚至较大,不推荐;另一方面,也不符合贵老板想把程序做在一个工程中且用户(程序员)操作界面友好的强迫症症状。

    二、(推荐)舍弃c_int00,查看相关源文件(或者连上仿真器查看c_int00的汇编代码),可以看出其功能并不复杂,完全可以自己实现,十几行代码搞定,自己实现的好处是最后的跳转指令可以自由发挥,例如可以固定跳转至B扇区的某个地址,而这个地址长度可以只设为0x02,用来存放一条长跳转指令,如LB main,这个方式与CodeStartBranch.asm中的codestart段类似。