打印

两个工程合并的问题

[复制链接]
2249|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
21ID|  楼主 | 2013-9-30 22:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 21ID 于 2013-9-30 22:51 编辑

在做远程升级的时候,目前的方法是将256K的Flash分成200K和56K。因为在升级的时候要擦除前200K Flash,故升级程序相关函数及变量要存放在固定的后56K Flash中。
1,200K用作平常状态下运行的程序,程序结构为时钟初始化→判断是否需要升级→各模块初始化→While{接收升级程序数据,存放外部Flash}。
2,56K用作升级时的函数及变量存放地址,程序结构为时钟初始化→Flash相关初始化→擦除200K Falsh→写200K Falsh→软件重启。
3,现在的情况是分成两个Keil工程来实现的,即有2个main函数,在Keil工程选项On-Chip  IRom1中来划分256K 的空间,这样生成的2个烧写文件写到单片机中会分别存到各自的空间中。
4,上述的方法带来每次都要烧写2个程序,生产可能会忘记烧远程升级的程序,及给生产造成麻烦。
5,请问一下:
      ①如何将两个单独的Keil工程合并起来?
      ②怎么用绝对地址定位多个函数及多个变量?
      ③如何一次编译,一次烧写?
6,附上草写的流程图

相关帖子

沙发
wangch_sh| | 2013-10-2 09:05 | 只看该作者
这个真不会,同问。

使用特权

评论回复
板凳
outstanding| | 2013-10-2 11:57 | 只看该作者
帮顶

使用特权

评论回复
地板
21ID|  楼主 | 2013-10-3 08:57 | 只看该作者
谢谢楼上两位兄弟!还望各路英雄拔笔相助!

使用特权

评论回复
5
dirtwillfly| | 2013-10-3 12:21 | 只看该作者
不太明白楼主说的“生产可能会忘记烧远程升级的程序”。
难道批量很小,都是手工生产?批量流水线生产不会不会忘记烧写的,即使有遗漏,还有出厂检测呢。

使用特权

评论回复
6
21ID|  楼主 | 2013-10-5 10:29 | 只看该作者
dirtwillfly 发表于 2013-10-3 12:21
不太明白楼主说的“生产可能会忘记烧远程升级的程序”。
难道批量很小,都是手工生产?批量流水线 ...

确实很小,所以小弟想通过研发这块解决这个问题。
本以为可以把函数都定位起来,不过多个函数时就要知道函数占多大的空间,感觉没什么办法了呵呵

使用特权

评论回复
7
huangxz| | 2013-10-5 10:57 | 只看该作者
21ID 发表于 2013-10-5 10:29
确实很小,所以小弟想通过研发这块解决这个问题。
本以为可以把函数都定位起来,不过多个函数时就要知道 ...

一般在单片机程序里面函数都是使用静态链接的,没有实体在链接的时候是会出错的,
通常的解决办法是使用函数指针,不过需要小心处理堆(比如使用库函数),和栈的问题。

使用特权

评论回复
8
leinou| | 2014-4-28 18:55 | 只看该作者
楼主问题解决啦没啊。。。我也遇到啦。。。望回复下

使用特权

评论回复
9
望断云山| | 2014-4-29 10:47 | 只看该作者
把两个bin文件合并,两个文件之间插ff或00,使第二个bin文件的起始地址符合要求,可行么?

使用特权

评论回复
10
21ID|  楼主 | 2014-4-30 22:13 | 只看该作者
望断云山 发表于 2014-4-29 10:47
把两个bin文件合并,两个文件之间插ff或00,使第二个bin文件的起始地址符合要求,可行么? ...

谢谢,已经找到方法。
1,修改连接文件,定义代码段
2,函数定位到自定义代码段

使用特权

评论回复
11
renwocai| | 2014-4-30 22:44 | 只看该作者
好高深的问题哦,对于51单片机,我只知道,有任何的需要,都只能用一个工程来实现需要的逻辑和功能,原来还可以有两个工程写到一个单片机上。受教了

使用特权

评论回复
12
zxcscm| | 2014-5-3 16:03 | 只看该作者
楼主具体是怎么实现的,就示例一下吗?

使用特权

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

本版积分规则

157

主题

912

帖子

5

粉丝