如何将程序中的单独某个函数写入到flash中的特定地址?就看有没有真大神在

2019-07-20 18:51发布

正在做远程升级,低功耗,所以不想完全升级整个程序,想做好公用部分(各种库),然后把功能函数单独写到某个特定地址,然后到时候只升级这一部分。查过keil,貌似只有把某一变量写到flash的特定地址,那函数该怎么写到特定地址?求原子哥和各位大神指点
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
dengxiaojun12
1楼-- · 2019-07-20 20:27
 精彩回答 2  元偷偷看……
zmingwang
2楼-- · 2019-07-20 23:12
这个功能倒是挺有趣的, 不过如果函数太大了,会不会覆盖掉其他函数的空间?
cookles
3楼-- · 2019-07-21 03:22
dengxiaojun12 发表于 2016-10-31 16:37
#pragma arm section code=".ARM.__at_0x8100000"
void task(void)
{

keil里面可以将一个.C文件单独写在一个特定地址,我试了一下,可行。原本想着把所有想要升级的部分都放在这个文件里,然后其它作为公用部分。可是经过测试发现,如果我把想要升级的部分的函数做了改动(仅仅改动某一个函数里面的内容,函数名什么的都不动),两者生成的HEX文件做对比,发现公用的那部分程序也发生了变化。我知道开头的中断向量表部分肯定会变,我是说中断向量表后面的真正公用程序部分也会因为这个函数的长度变化而变化。哎,麻烦了
kun0226
4楼-- · 2019-07-21 08:33
cookles 发表于 2016-11-7 10:25
这个功能倒是挺有趣的, 不过如果函数太大了,会不会覆盖掉其他函数的空间?

更改之前肯定计算好空间问题
kun0226
5楼-- · 2019-07-21 14:10
zmingwang 发表于 2016-11-7 01:18
2楼的方法可行,还需要定义一个函数向量表,最好是在指定的代码段开头处,类似于中断向量表,用于检索函数入口 ...

只升级一部分的话,因为这部分函数虽然名字不变,但是长度肯定会变,所以中断向量表也要重新写入,如果仅仅是这样也还好,可是刚刚测试发现,某一个写在特定位置的函数内容改变了,也会影响到其它部分(不止中断向量表),我是通过HEX文件对比看出来
kun0226
6楼-- · 2019-07-21 18:59
 精彩回答 2  元偷偷看……

一周热门 更多>