当前位置:首页 » 编程软件 » 如何编译函数到指定地址

如何编译函数到指定地址

发布时间: 2022-05-30 09:54:39

1. c语言如何跳转到指定的内存地址运行

为什么要用指定的内存地址执行程序。
当然,c语言被编译连接后肯定都是一条一条的指令。也肯定是存在内存中的。
那么如果你是想跳到其他的程序的指令。那么你的需求是有用的。
可是,很不幸。这样的话,操作系统是不允许的,会报异常的。属于内存越界错误,很明显你创建的程序是无法访问其他程序的指令的。
其次,如果你只是想跳到本身的c语言的某条指令的话。使用goto语句就可以实现。虽然是不鼓励的。其次,规范好你的算法实现。用循环和判断完全能够实现。如果那条指令是汇编编写的程序的话。你也可以在c中嵌套汇编语言,jump到该指令。如果是汇编有关的话,跳转指令应该经常会用的吧。

2. KEIL怎么将函数放到指定地址

那要看你的Keil究竟是指51工具链还是ARM工具链。
如果是ARM,需要修改分散加载文件,在指定的位置新增Section,之后在你的程序中声明将函数放在该Section中。
如果是51,那么在选项卡的Linker页面,在连接参数行添加参数,指定你那个函数块的绝对地址就行。

3. 在ARM汇编编程中如何指定某段程序的存储地址

在要指定代码的存储空间不是一件特别简单的事情,尤其是你想为某个或某几个函数指定具体的地址。
1,编译器只有在最终的Link阶段才会为代码和数据分配内存地址,因此指定代码段的地址一般是通过写一个link脚本来进行的。Link阶段时,编译器的Linker会读取你写的Link脚本,并且按照脚本的规定给代码分配地址。
2,根据ARM开发工具的不同,link脚本的语法和形式也有所不同。ARM MDK,ARM ADS,Eclips+GCC,Linux GCC, ARM Realview等开发工具都支持Link脚本。
如果你英文还可以,建议你直接找到开发工具的Help手册去研究。如果你英语实在不行,也可以把开发工具名称和你代码的具体情况告诉我,我帮你看看。

4. c语言,在定义函数时,如何指定函数地址,即要求编译器使用我指定的函数地址

extern void test(void)__attribute__((section(".ARM.__at_0x0001")));

5. 如何定义入口地址固定的函数

你说的for,我看出来你已经知道存在那些功能,但是还不知道某个功能是不是被实现了,下面又是一个例子:

FUN funs[16]={fun1,NULL,fun3};//假设我们知道最多也就16个功能,但是目前只有功能0和2被实现,功能1和其他的3~15都还没有实现

for(...)
{
int funCode;
...
if(funs[funCode]!=NULL)//如果不是NULL,说明对应的功能号被实现了
funs[funCode](...)//调用
}
---------------------------------------------------------

楼主,C语言是不应该干这件事的!

楼主你的需求实际上可以这样描述:
1 怎样才能根据输入条件来调用不同的函数
2 条件和函数是一一对应的,但是函数在哪是不确定的,例如可能是其他函数传进来的。

我举个简单例子来解决你的问题
typedef void (*FUN)(...);//参数列表和返回值自己填

//定义一些功能函数
void fun1(...)
{
printf("1\n");
}

void fun2(...)
{
printf("1\n");
}
....
//上面的注意了,参数列表和返回值要一样的

FUN funs[]={fun1,fun2,...};//把函数的指针放进数组,就像你C51的向量区,存放了许多函数的地址,这里最终放的也是地址,只不过等程序编译好了才知道是多少,

...//一堆代码

int funCode;//用来存放计算出来的功能代码,例如0表示fun1,1表示fun2
...//一堆超级复杂而且重要且不可逃避的代码之后,funCode被设为了某个值,这个这个值实际上是我精心而且故意设计为理解简单的小玩意,代表某个功能的代码。

funs[funCode](...)//调用功能函数(知道funCode需要精心设计了吧,funCode为0就调用了fun1),当然你也可以把funs传到某个函数,然他也像这样使用传进去的函数。

6. 程序从编译到运行经历哪几个阶段.运行的时候怎么找到函数的地址

C源程序到运行程序步骤:

  1. 编辑:输入源程序并存盘(.C)

  2. 2.编译:将源程序翻译为目标文件(.OBJ)

  3. 3.链接:将目标文件生成可执行文件( .EXE)

  4. 4.运行:执行.EXE文件,得到运行结果

7. 怎么把函数定位到指定的地址

移动物体到指定位置可用几何作图法解决。
1)在固定直线的端点为圆心画一个半径100的圆,
2)在该直线外取一点画该直线的垂直线(捕捉垂足)
3)将垂直线移动过圆心(垂直线端点与圆心重合),得与圆相交的交点,
4)将另一条直线移动(直线端点与交点重合),
5)删除圆及垂直线。

8. 如何将程序中的单独某个函数写入到flash中的特定地址

可以!前提是写入的位置是空白没有代码的部分,调用库函数: FLASH_Unlock(); //1、解锁Flash FLASH_SetLatency(FLASH_Latency_2); //2、72MHz系统时钟下设置两个时钟延时 FLASH_ErasePage(addr); //3、擦除指定的页,addr是页的起始地址

9. 如何给GCC指定编译的地址

有两种办法
1. gcc D:\XXX\main.c 用这个命令来编译你的C文件,把上面的目录、文件换成你的。
2. 在CMD里,cd到D盘,然后cd到你的C文件目录下,执行gcc main.c即可

10. c语言调用其他文件的函数怎么编译

调用函数库的话用#include<XXX.h>或者#include"XXX.h"区别是你库文件放在同一个文件夹还是在IDE的安装目录下面,如果你库文件在你工程文件夹里面用#include<XXX.h>,否则用#include"XXX.h"

如果你说自己写库的话是需要两个宏命令,#ifndef_XXX_H#define_XXX_H,然后你函数名用extern表示

如果你说编译的话,你应该说的是编译原理吧,你可以反汇编一下一个编译好的程序,如果该处编译了一个其他函数库的函数,你可以看到程序把参数PUSH到内存后CALL或者LCALL了一个这个函数的地址,这就完成了汇编中调用函数的部分,我记得X86里面CALL的机器码是E8H吧,有兴趣的话可以自己用反汇编看一下

这个CALL的话就是调用函数的功能

热点内容
手机网页连接不上服务器如何解决 发布:2025-07-04 03:29:57 浏览:921
计算机多级存储系统 发布:2025-07-04 03:24:22 浏览:283
流控搭脚本 发布:2025-07-04 03:05:59 浏览:110
编程的引号 发布:2025-07-04 03:01:09 浏览:786
百度云不能上传文件 发布:2025-07-04 02:59:28 浏览:664
皇冠哪个配置上驾驶座前后移动 发布:2025-07-04 02:45:56 浏览:92
安卓没银行卡怎么充值 发布:2025-07-04 02:40:13 浏览:668
家教网php源码 发布:2025-07-04 02:40:11 浏览:51
外锥度编程 发布:2025-07-04 02:37:28 浏览:969
炫舞二级密码怎么设置 发布:2025-07-04 02:31:50 浏览:976