lr2131 发表于 2014-5-21 20:29

怎么单独编译一个C文件生成HEX或BIN文件

我单片机上有3个工程,这3个工程都会用到一些相同的函数,我不想让3分工程在编译的时候都编译到各自的烧录文件中,,然后再烧到flash里,这样做,比较浪费空间。

我想单独把这些公用的函数编译成HEX或BIN文件,单独烧写到内部flash里面。在编译的时候,我记下每个函数的首地址,然后其他3个工程中使用函数指针,就可以运行这些公用函数。

同样的,以后还有些公用的数据也想像这么干,但不知道怎么做,怎么创建一份这些公用函数的工程。

wangch_sh 发表于 2014-5-21 21:08

为什么要用三个工程呢?

nbldelnan 发表于 2014-5-22 08:51

求同!帮顶!!

ayb_ice 发表于 2014-5-22 09:16

本帖最后由 ayb_ice 于 2014-5-22 09:18 编辑

这个没有可能的

"我单片机上有3个工程,"
这个说法本身就有问题吧

lr2131 发表于 2014-5-22 09:31

ayb_ice 发表于 2014-5-22 09:16 static/image/common/back.gif
这个没有可能的

"我单片机上有3个工程,"


那要怎么说才是没问题的呢?

lr2131 发表于 2014-5-22 09:32

ayb_ice 发表于 2014-5-22 09:16 static/image/common/back.gif
这个没有可能的

"我单片机上有3个工程,"


单片机上一个IAP,一个APP。这样的方式应该很常见吧,再加个备份用的APP也没什么吧.

dirtwillfly 发表于 2014-5-22 09:36

可以编译成库文件,然后在三个工程里使用

ayb_ice 发表于 2014-5-22 10:07

lr2131 发表于 2014-5-22 09:32 static/image/common/back.gif
单片机上一个IAP,一个APP。这样的方式应该很常见吧,再加个备份用的APP也没什么吧. ...

将IAP的地址空间保留出来就可以了吧

lr2131 发表于 2014-5-22 10:44

dirtwillfly 发表于 2014-5-22 09:36 static/image/common/back.gif
可以编译成库文件,然后在三个工程里使用

编译成库之后,这3个工程在编译时,一样会链接这个库,然后编译到烧录文件中吧。

那单片机内部Flash一样还是有这公用函数库的3分拷贝吧。

lr2131 发表于 2014-5-22 10:46

ayb_ice 发表于 2014-5-22 10:07 static/image/common/back.gif
将IAP的地址空间保留出来就可以了吧

不明白你的意思

dirtwillfly 发表于 2014-5-22 10:53

lr2131 发表于 2014-5-22 10:44 static/image/common/back.gif
编译成库之后,这3个工程在编译时,一样会链接这个库,然后编译到烧录文件中吧。

那单片机内部Flash一样 ...

是的

ayb_ice 发表于 2014-5-22 11:24

lr2131 发表于 2014-5-22 10:46 static/image/common/back.gif
不明白你的意思

那个工程,将公共文件编译烧录进MCU(公共函数地址固定不变)

其它工程用强制指针调用公共函数即可,烧录时不擦除保留空间,也不烧录保留空间

我并没有实际搞过这个,但好象就是这样搞的

lr2131 发表于 2014-5-22 11:33

dirtwillfly 发表于 2014-5-22 10:53 static/image/common/back.gif
是的

我就是不想让公用的代码或数据在flash中有多份重复,才想要用这样的方法,相当于是动态链接的方式吧,静态方式浪费空间。

lanmp 发表于 2014-5-22 11:37

函数指针

lr2131 发表于 2014-5-22 11:39

ayb_ice 发表于 2014-5-22 11:24 static/image/common/back.gif
那个工程,将公共文件编译烧录进MCU(公共函数地址固定不变)

其它工程用强制指针调用公共函数即可,烧录时 ...

你说的方法感觉应该可以,把公用函数都放到一个不太变动的工程中,从编译文件中拿到每个公用函数的地址,然后其他工程中用函数指针的方式调用函数。

lr2131 发表于 2014-5-22 11:40

lanmp 发表于 2014-5-22 11:37 static/image/common/back.gif
函数指针

函数指针,然后呢?

lanmp 发表于 2014-5-22 11:42

把绝对地址付给函数指针。最好不要传递参数,或者干脆使用全局变量。

lr2131 发表于 2014-5-22 12:12

lanmp 发表于 2014-5-22 11:42 static/image/common/back.gif
把绝对地址付给函数指针。最好不要传递参数,或者干脆使用全局变量。

是把绝对地址赋给函数指针啊,带参数可以啊,怎么不可以呢?
只是这些公用函数必须是可重入函数,里面不能使用静态变量,不管是全局的还是局部的。

贾丝文 发表于 2014-5-22 14:11

编译第一个文件时,把函数指定绝对地址,第二个文件声明这个函数地址,就可以直接用了

lr2131 发表于 2014-5-22 15:55

贾丝文 发表于 2014-5-22 14:11 static/image/common/back.gif
编译第一个文件时,把函数指定绝对地址,第二个文件声明这个函数地址,就可以直接用了
...

这个我知道
页: [1] 2
查看完整版本: 怎么单独编译一个C文件生成HEX或BIN文件