怎么单独编译一个C文件生成HEX或BIN文件
我单片机上有3个工程,这3个工程都会用到一些相同的函数,我不想让3分工程在编译的时候都编译到各自的烧录文件中,,然后再烧到flash里,这样做,比较浪费空间。我想单独把这些公用的函数编译成HEX或BIN文件,单独烧写到内部flash里面。在编译的时候,我记下每个函数的首地址,然后其他3个工程中使用函数指针,就可以运行这些公用函数。
同样的,以后还有些公用的数据也想像这么干,但不知道怎么做,怎么创建一份这些公用函数的工程。 为什么要用三个工程呢? 求同!帮顶!! 本帖最后由 ayb_ice 于 2014-5-22 09:18 编辑
这个没有可能的
"我单片机上有3个工程,"
这个说法本身就有问题吧 ayb_ice 发表于 2014-5-22 09:16 static/image/common/back.gif
这个没有可能的
"我单片机上有3个工程,"
那要怎么说才是没问题的呢? ayb_ice 发表于 2014-5-22 09:16 static/image/common/back.gif
这个没有可能的
"我单片机上有3个工程,"
单片机上一个IAP,一个APP。这样的方式应该很常见吧,再加个备份用的APP也没什么吧. 可以编译成库文件,然后在三个工程里使用 lr2131 发表于 2014-5-22 09:32 static/image/common/back.gif
单片机上一个IAP,一个APP。这样的方式应该很常见吧,再加个备份用的APP也没什么吧. ...
将IAP的地址空间保留出来就可以了吧 dirtwillfly 发表于 2014-5-22 09:36 static/image/common/back.gif
可以编译成库文件,然后在三个工程里使用
编译成库之后,这3个工程在编译时,一样会链接这个库,然后编译到烧录文件中吧。
那单片机内部Flash一样还是有这公用函数库的3分拷贝吧。 ayb_ice 发表于 2014-5-22 10:07 static/image/common/back.gif
将IAP的地址空间保留出来就可以了吧
不明白你的意思 lr2131 发表于 2014-5-22 10:44 static/image/common/back.gif
编译成库之后,这3个工程在编译时,一样会链接这个库,然后编译到烧录文件中吧。
那单片机内部Flash一样 ...
是的 lr2131 发表于 2014-5-22 10:46 static/image/common/back.gif
不明白你的意思
那个工程,将公共文件编译烧录进MCU(公共函数地址固定不变)
其它工程用强制指针调用公共函数即可,烧录时不擦除保留空间,也不烧录保留空间
我并没有实际搞过这个,但好象就是这样搞的 dirtwillfly 发表于 2014-5-22 10:53 static/image/common/back.gif
是的
我就是不想让公用的代码或数据在flash中有多份重复,才想要用这样的方法,相当于是动态链接的方式吧,静态方式浪费空间。 函数指针 ayb_ice 发表于 2014-5-22 11:24 static/image/common/back.gif
那个工程,将公共文件编译烧录进MCU(公共函数地址固定不变)
其它工程用强制指针调用公共函数即可,烧录时 ...
你说的方法感觉应该可以,把公用函数都放到一个不太变动的工程中,从编译文件中拿到每个公用函数的地址,然后其他工程中用函数指针的方式调用函数。 lanmp 发表于 2014-5-22 11:37 static/image/common/back.gif
函数指针
函数指针,然后呢? 把绝对地址付给函数指针。最好不要传递参数,或者干脆使用全局变量。 lanmp 发表于 2014-5-22 11:42 static/image/common/back.gif
把绝对地址付给函数指针。最好不要传递参数,或者干脆使用全局变量。
是把绝对地址赋给函数指针啊,带参数可以啊,怎么不可以呢?
只是这些公用函数必须是可重入函数,里面不能使用静态变量,不管是全局的还是局部的。 编译第一个文件时,把函数指定绝对地址,第二个文件声明这个函数地址,就可以直接用了
贾丝文 发表于 2014-5-22 14:11 static/image/common/back.gif
编译第一个文件时,把函数指定绝对地址,第二个文件声明这个函数地址,就可以直接用了
...
这个我知道
页:
[1]
2