打印
[ZLG-ARM]

LPC2136的IAP问题请教

[复制链接]
1998|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kavka|  楼主 | 2009-9-8 11:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
启动程序不修改,只要在应用程序中增加、删除一个变量或者添加一条无关紧要的语句,重新编译链接后生成一个bin格式升级文件,再通过在线升级,发现程序就跑飞了。但是修改一个变量的值却没有这种情况,可以升级成功。现在只能重新烧入启动程序才行。新手求助。

相关帖子

沙发
kavka|  楼主 | 2009-9-10 12:35 | 只看该作者
本帖最后由 kavka 于 2009-9-10 14:35 编辑

自己顶一下。
我的思路是IAP放在开头0-3区,MAIN函数也放在IAP中,只是MAIN里调用了应用程序APP,APP从固定地址开始。只是现在感觉编译链接生成的两个bin文件有关联。
是不是分散加载文件出问题了?
ROM_LOAD 0x0
{
    SYSTEM 0x00000000                        ;// 系统固件区域,起始地址:扇区0
    {
        Startup.o (vectors, +First)
        main.o(+RO)
        target.o(+RO)
        *(+RO)
    }
}

ROM_LOAD2 0x4000
{
    USER 0x4000 FIXED                         ;// 用户程序区域,起始地址:扇区4
    {
        user.o (+RO, +First)
        users.o (+RO)
    }   
   
    IRAM 0x40000000
    {
        Startup.o (MyStacks)
        * (+RW,+ZI)
    }

    HEAP +0 UNINIT
    {
        Startup.o (Heap)
        
    }
    STACKS 0x40008000 UNINIT    ;for LPC2136
    {
        Startup.o (Stacks)
    }   
}
工程树图:

使用特权

评论回复
板凳
pigeon0411| | 2009-9-12 17:54 | 只看该作者
这不是ZLG的例程吗,
虽然那个例程简单了点,但还是能跑起来的。

注意在USER.C中,首先执行的代码要与以前一样,否则相对地址就会改变。

不建议用ZLG的例程的方法去做,如果设计稍微复杂一点的升级程序,将会出现很多问题。

建议使用分散加载文件配合中断向量重映射或者动态配置的方法实现升级区应用区真正意义上的独立。

或者你有足够大的空间,可以考虑使用两个区,切换升级。

使用特权

评论回复
地板
kavka|  楼主 | 2009-9-15 13:30 | 只看该作者
谢谢楼上,可以升级了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

8

帖子

1

粉丝