最近要做一个项目,要求IAP程序能够读取SD卡或者通过网络将APP的bin文件刷至flash中。但是我APP程序中也要使用sd,以太网等驱动,那么能否将IAP中的驱动函数绝对定位,然后APP中直接跳转至IAP中驱动函数的地址,这样可以减少代码体积。
看了一下MDK分散加载方面的资料,沒太明白sram和sdram是怎么加载的。如果APP单纯地调用IAP中的函数,那些IAP中用到的rw,zi data会不会因为没加载而出错?或者有没有更好的办法去实现这种类似动态加载驱动程序的方法?
希望能有大神给出一些建议,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
假设IAP代码相对固定,可以将共用代码放到IAP项目里,scatter里将flash分成两个块,一部分是IAP独占,一部分是共用区。
链接时要加上--symdefs选项,生成一个symbol表,列出各个函数、变量的地址。帮助里有,一查有一串相关文档。
例如:--symdefs=.share.sym
生成的symbol文件share.sym里删除无关的,保留共用的函数、字库之类的。然后加入到APP的项目里,
注意文件的属性要改成Object file。
APP也要在scatter文件里定义好区块,不能跟IAP和共用区重叠就行了。也就是说APP里没有将共同代码链接进去,只记录了代码/变量的地址,直接引用。
反过来共用代码放在APP里,生成symbol文件给IAP也是一样的。
2. 建議你不要這樣做, 可以把 IAP 想成單純一支FW, 另外一支程式也是一支 FW..
第一點難度太大, 要有很多的 RAM , 要把程式搬去RAM RUN
一周热门 更多>